数据约束

数据约束

1 什么是数据约束?

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

2 默认值

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

CREATE TABLE user01(

      uid INT,

      uname VARCHAR(10),

      address VARCHAR(20)DEFAULT'艾欧尼亚'

)

INSERT INTO user01 VALUES (1,'泰隆','比尔吉沃特');

INSERT INTO user01(uid,uname) VALUES (2,'艾瑞莉娅');

INSERT INTO user01 VALUES (3,'菲兹',NULL);

SELECT * FROM user01;

 

 

 

3 非空约束

作用: 限制字段必须赋值

注意:

      1)非空字符必须赋值

      2)非空字符不能赋null

CREATE TABLE user01(

      uid INT NOT NULL,

      uname VARCHAR(10),

      address VARCHAR(20)DEFAULT'艾欧尼亚'

)

INSERT INTO user01 VALUES(1,'卡特','暗影岛');

可以插入卡特这一条 但是执行下面这条时

INSERT INTO user01(uname) VALUES('特朗德尔');

 

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,'安妮');

当再次输入上面这句话时

 

 

5 主键

作用: 非空+唯一

注意:            

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

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

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;

 

 

其中PRIMARY KEY为主键   AUTO_INCREMENT为自增长

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

DELETE FROM student; -- 不能影响自增长约束

TRUNCATE TABLE student; -- 可以影响自增长约束

6 外键

作用:约束两种表的数据

          

出现两种表的情况:

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

      例如: 员工表  和  部门表

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

 

      使用外键约束:约束插入员工表的部门ID字段值

 

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

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('猪八戒',3);

INSERT INTO emp(ename,deptid) VALUES('孙悟空',2);

INSERT INTO emp(ename,deptid) VALUES('白骨精',1);

SELECT * FROM emp;

注意:

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

                 2)主表的参考字段通用为主键!

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

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

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

 

 

 

当插入主表没有的值时

INSERT INTO emp(ename,deptid) VALUES('唐三藏',4);

 

 

l  两种全表删除的区别

首先我们新建一个表test插入数据 其中主键id 自增长

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('小绿');

 

 

首先是delete from删除

DELETE FROM test;

删除后再添加:INSERT INTO test(tname) VALUES('小红');

INSERT INTO test(tname) VALUES('小蓝');

INSERT INTO test(tname) VALUES('小绿');

这时:

 

而truncate table 的运行结果为

 

posted @ 2018-11-16 10:14  张宗强1  阅读(427)  评论(0编辑  收藏  举报