概述
- 约束:对数据表中的数据进行限定,保证数据的完整性,有效性、正确性
- 分类:
- 主键约束:primary key
- 非空约束:not null
- 唯一约束:unique
- 外键约束:foreign key
非空约束
-
创建表时添加约束
// 创建stu表时,给name限定非空约束 CREATE TABLE stu( id INT, NAME VARCHAR(20) NOT NULL -- name为非空 ); // 删除stu表中的name的非空约束 ALTER TABLE stu MODIFY NAME VARCHAR(20);
-
创建表完后添加
// 创建stu表时,给name限定非空约束 CREATE TABLE stu( id INT, NAME VARCHAR(20) ); // 创建stu表完后,给name添加非空约束 ALTER TABLE stu MODIFY NAME VARCHAR(20) NOT NULL;
唯一约束
-
创建表时添加唯一约束
// 创建stu表时添加唯一约束,MySQL中唯一约束限定的值可以有多个null CREATE TABLE stu( id INT, phone_number VARCHAR(11) UNIQUE ); // 删除stu表中phone_number的唯一约束 ALTER TABLE stu DROP INDEX phone_number;
-
创建表之后添加唯一约束
// 给stu表中phone_number添加唯一约束 ALTER TABLE stu MODIFY phone_number VARCHAR(11) UNIQUE;
主键约束
-
注意事项
- 含义:表示非空并且唯一
- 一张表只能有一个字段为主键
- 主键就是表中记录的唯一表示
-
创建表时添加唯一约束
// 创建stu表时给id添加主键约束 CREATE TABLE stu( id INT PRIMARY KEY, NAME VARCHAR(20) ); // 删除stu表中id的主键约束 ALTER TABLE stu DROP PRIMARY KEY;
-
创建表之后添加唯一约束
// 表stu创建完成后给id添加主键约束 ALTER TABLE stu MODIFY id INT PRIMARY KEY;
-
自动增长
- 如果某一列数据是数据类型的,使用 可以完成值的自动增长
// 创建stu表时给id添加主键约束,并且完成自动增长 CREATE TABLE stu( id INT PRIMARY KEY AUTO_INCREMENT, NAME VARCHAR(20) ); INSERT INTO stu VALUES(NULL,"cc"); // 根据上一条记录的id值增长 // 删除stu表中id的自动增长 ALTER TABLE stu MODIFY id INT; // 给stu表中id的添加自动增长 ALTER TABLE stu MODIFY id INT AUTO_INCREMENT;
外键约束
-
外键约束让表之间关联起来,从而保证数据的正确性
-
创建表时可以添加外键约束
语法: CREATE TABLE 表名( ... 外键列 CONSTRAINT 外键名称 FOREIGN KEY (外键列名称) REFERENCES 主表的名称(主表列名称) );
// 创建department表 CREATE TABLE department( id INT PRIMARY KEY AUTO_INCREMENT, dep_name VARCHAR(30), dep_location VARCHAR(30) ); INSERT INTO department VALUES(NULL,"研发部","广州"),(NULL,"销售部","深圳"); // 创建employee表,并将dep_id与表department的id关联, CREATE TABLE employee( id INT PRIMARY KEY AUTO_INCREMENT, NAME VARCHAR(20), dep_id INT, -- 外键对应的主键 CONSTRAINT emp_dept_fk FOREIGN KEY (dep_id) REFERENCES department(id) ); INSERT INTO employee VALUES(NULL,"a",1),(NULL,"b",2),(NULL,"c",1),(NULL,"d",2),(NULL,"e",1),(NULL,"f",2);
-
删除外键
// 删除表employee中的外键emp_dept_fk ALTER TABLE employee DROP FOREIGN KEY emp_dept_fk;
-
在创建表之后添加外键
//给表employee添加外键emp_dept_fk,将该表中dep_id和表department中的id关联起来 ALTER TABLE employee ADD CONSTRAINT emp_dept FOREIGN KEY (dep_id) REFERENCES department(id);
-
级联操作
- 需要在添加外键的时候设置级联更新(ON UPDATE CASCADE)
// 给表employee添加外键emp_dept_fk,将该表中dep_id和表department中的id关联起来 // 并且设置了级联更新,更改表department中的id,表employee中的dep_id会自动更新 ALTER TABLE employee ADD CONSTRAINT emp_dept FOREIGN KEY (dep_id) REFERENCES department(id) ON UPDATE CASCADE;
- 通过架构设计器可以很好地看出表之间级联关系
- 级联删除(ON DELETE CASCADE),谨慎使用
// 给表employee添加外键emp_dept_fk,将该表中dep_id和表department中的id关联起来 // 并且设置了级联更新,更改表department中的id,表employee中的dep_id会自动更新 // 并且设置了级联删除,删除表department中的id,表employee中的dep_id相对应的行会自动删除 ALTER TABLE employee ADD CONSTRAINT emp_dept FOREIGN KEY (dep_id) REFERENCES department(id) ON UPDATE CASCADE ON DELETE CASCADE;