数据约束:对用户操作表的数据进行约束
1、默认值约束 default
当用户对使用默认值的字段不插入值的时候,就使用默认值。
CREATE TABLE student( id INT, NAME VARCHAR(20), address VARCHAR(20) DEFAULT '山东淄博' -- 默认值 )
当用户插入NULL时,可以允许,值为NULL
2、非空约束 NOT NULL
限制字段必须赋值,不能为NULL
-- 需求: gender字段必须有值(不为null) CREATE TABLE student( id INT, NAME VARCHAR(20), gender VARCHAR(2) NOT NULL -- 非空 ) --非空字符gender不能插入null
3、唯一约束 unique
设定字段的值不能重复
CREATE TABLE student( id INT UNIQUE, -- 唯一 NAME VARCHAR(20) )
id字段不能有重复字段
注意: 1)唯一字段可以插入null
2)唯一字段可以插入多个null
4、主键约束 primary key
设定该字段唯一且非空,每个表只能有一个主键
CREATE TABLE student( id INT PRIMARY KEY, -- 主键 NAME VARCHAR(20) )
注意:
1)通常情况下,每张表都会设置一个主键字段。用于标记表中的每条记录的唯一性。
2)建议不要选择表的包含业务含义的字段作为主键,建议给每张表独立设计一个非业务含义的id字段。
5、自增长约束 AUTO_INCREMENT
设定自动递增,前提该字段必须是主键,默认1开始
CREATE TABLE student( id INT PRIMARY KEY AUTO_INCREMENT, -- 自增长,从1开始 NAME VARCHAR(20) )
注意:
-- 不能影响自增长约束,再次添加数据,还从删除前接着自增 DELETE FROM student; -- 可以影响自增长约束,再次添加数据,重新从1开始自增 TRUNCATE TABLE student;
零填充 ZEROFILL
CREATE TABLE USER( uid INT(4) ZEROFILL PRIMARY KEY AUTO_INCREMENT, uname VARCHAR(10), address VARCHAR(30) DEFAULT '山东省' ) --int 后添加位数,ZEROFILL,在前面用零填充
6、外键
约束两种表的数据,只能是另一个表的主键
出现两种表的情况:为解决数据冗余高问题: 独立出一张表
-- 部门表(主表) CREATE TABLE dept( id INT PRIMARY KEY, deptName VARCHAR(20) ) -- 修改员工表(副表/从表) CREATE TABLE employee( id INT PRIMARY KEY, empName VARCHAR(20), deptId INT,-- 把部门名称改为部门ID,数据类型与dept定义相同 -- 声明一个外键约束 CONSTRAINT emlyee_dept_fk FOREIGN KEY(deptId) REFERENCES dept(id) )
deptId INT, -- 数据类型int 与dept定义相同
CONSTRAINT emlyee_dept_fk FOREIGN KEY(deptId) REFERENCES dept(id)
--CONSTRAINT 声明 --emlyee_dept_fk 自定义 (emlyee:本表名,dept:外键表名,fk:外键缩写 FOREIGN KEY) --FOREIGN KEY 外键约束语句 --deptId 与emlyee的外键名相同 --REFERENCES 依赖 --dept(id) dept的id键(与dept一致)
注意:
1)被约束的表称为副表,约束别人的表称为主表,外键设置在副表上的!!!
2)主表的参考字段通用为主键!
3)添加数据: 先添加主表,再添加副表
4)修改数据: 先修改副表,再修改主表
5)删除数据: 先删除副表,再删除主表