zoukankan      html  css  js  c++  java
  • sql常用操作(二)数据约束

    1.1什么是数据约束:

    对用户操作表的数据进行约束

    1.2 默认值

    作用: 当用户对使用默认值的字段不插入值的时候,就使用默认值。

    注意:

    1)对默认值字段插入null是可以的。

    2)对默认值字段可以插入非null

    最好在建表时就加好约束

    例:

    create table user01(

    uid int,

    uname varchar(10),

    address varchar(20) default '北京'

    );

    /*当字段没有插入值的时候,mysql自动给该字段分配默认值*/

    insert into user01(uid,uname) values (2,'王夏');

    1.3非空

    作用: 限制字段必须赋值

    注意:

    1)非空字符必须赋值

    2)非空字符不能赋null

    例:

    create table user01(

    uid int not null,

    uname varchar(10),

    address varchar(20) default '北京'

    );

    insert into user01(uname) values ('李秋');

    结果报错:

     

    1.4 唯一

    作用: 对字段的值不能重复

    注意:

    1)唯一字段可以插入null

    2)唯一字段可以插入多个null

    例:

    /*唯一约束*/

    create table user01(

    uid int not null,

    uname varchar(10) unique,

    address varchar(20) default '北京'

    );

    insert into user01(uid,uname) values (1,'张春');

     

    再次:insert into user01(uid,uname) values (1,'张春');

    报错:

     

    1.5 主键

    作用: 非空+唯一

    注意:

    1)通常情况下,每张表都会设置一个主键字段。用于标记表中的每条记录的唯一性。

    2)建议不要选择表的包含业务含义的字段作为主键,建议给每张表独立设计一个非业务含义的id字段。

    语法:primary key
    例:

    /*主键约束*/

    create table user01(

    uid int primary key,

    uname varchar(10),

    address varchar(20) default '北京'

    );

    insert into user01 values (1,'张春','上海');

     

    再次:insert into user01 values (1,'张春','上海');

    报错:

     

    1.6自增长

    作用:自动递增

    自增长字段可以不赋值,自动递增

    例:

    /*自增长*/

    create table user01(

    uid int primary key auto_increment,

    uname varchar(10),

    address varchar(20) default '北京'

    );

    执行三遍:insert into user01(uname) values ('张春');

     

    实际企业中很少用自增长,一般用一个随机长字符串(例如:时间戳)当做主键

    1.6.2零填充

    例:

    create table user01(

    uid int(4) zerofill primary key auto_increment,

    uname varchar(10),

    address varchar(20) default '北京'

    );

    执行三遍:insert into user01(uname) values ('张春');

     

    1.7 外键

    作用:约束两种表的数据

    出现两种表的情况:

    解决数据冗余高问题:独立出一张表

    例:

    /*员工表*/

    create table emp(

    eid int primary key auto_increment,

    ename varchar(10),

    deptid int

    );

    insert into emp(ename,deptid) values('张三',1);

    insert into emp(ename,deptid) values('李四',2);

    select * from emp;

     

    /*部门表*/

    create table dept(

    id int primary key auto_increment,

    dname varchar(15)

    );

    insert into dept(dname) values('研发部');

    insert into dept(dname) values('产品部');

    select * from dept;

     

    问题出现:在插入员工表数据的时候,员工表的部门id字段可以随便插入!

    解决办法: 在员工表的部门id字段添加一个外键约束

    语法:

    constraint emlyee_dept_fk foreign key(deptid) references dept(id)

    --                     外键名称             外键           参考表(参考字段)

    外键名称通用规则:所在表_主表_fk

    注意:

    1)被约束的表称为副表,约束别人的表称为主表,外键设置在副表上的!

    2)主表的参考字段通用为主键!外键必须是主表的主键

    3)添加数据: 先添加主表,再添加副表

    4)修改数据: 先修改副表,再修改主表

    5)删除数据: 先删除副表,再删除主表

    例:

    create table dept(

    id int primary key auto_increment,

    dname varchar(15)

    );

    create table emp(

    eid int primary key auto_increment,

    ename varchar(10),

    deptid int,

    constraint emp_dept_fk foreign key(deptid) references dept(id)

    );

    创建成功:

     

    /*插入数据*/

    insert into dept(dname) values('测试部');

    insert into dept(dname) values('市场部');

    insert into dept(dname) values('销售部');

    select * from dept;

    insert into emp(ename,deptid) values('李四',4);

    结果报错:

     

    /*修改数据*/

    update emp set deptid=1 where eid=2;

    update dept set id=5 where id=2;

    /*删除数据*/

    delete from emp where eid=1;

    delete from dept where id=3;

    /*全表删除两种方式对比*/

    create table test(

    id int primary key auto_increment,

    tname varchar(10)

    );

    insert into test(tname) values('小红');

    insert into test(tname) values('小兰');

    insert into test(tname) values('小绿');

    select * from test;

     

    delete from test;

    insert into test(tname) values('小红');

    insert into test(tname) values('小兰');

    insert into test(tname) values('小绿');

    select * from test;

      

    truncate table test;

    insert into test(tname) values('小红');

    insert into test(tname) values('小兰');

    insert into test(tname) values('小绿');

    select * from test;

     

    表已建好后,再添加外键:

    /*创建表后添加约束*/

    create table test(

    id int primary key auto_increment,

    tname varchar(10),

    empid int

    );

    alter table test add constraint test_emp_fk foreign key(empid) references emp(eid);

    在企业里很少用外键,但是要在开发文档中体现出来。

  • 相关阅读:
    [zoj3627]模拟吧
    [zoj3623]背包模型
    [hdu4358]树状数组
    [hdu1272]并查集
    [hdu3308]线段树
    [hdu5033]单调队列
    [hdu1506]单调队列(栈)
    [hdu2888]二维RMQ
    [hdu4123]dfs区间化+RMQ
    [hdu1242]优先队列
  • 原文地址:https://www.cnblogs.com/hzhjxx/p/9958504.html
Copyright © 2011-2022 走看看