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

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)删除数据: 先删除副表,再删除主表

 

posted on 2018-07-11 10:13  丁昆  阅读(198)  评论(0编辑  收藏  举报