目录
概念: 对表中的数据进行限定,保证数据的正确性、有效性和完整性。
分类:主键约束,唯一约束,非空约束,外键约束。
非空约束 -- not null
1.创建表时添加非空约束
CREATE TABLE person(
per_id INT NOT NULL,
per_name VARCHAR(20)
);
2.删除非空约束
ALTER TABLE person MODIFY per_id INT;
3.创建表之后,添加非空约束
ALTER TABLE person MODIFY per_id INT NOT NULL;
唯一约束 -- unique
1.创建表是添加唯一约束
-- 唯一约束
CREATE TABLE person(
id INT UNIQUE NOT NULL, -- 添加唯一非空约束
per_name VARCHAR(20)
);
2.删除唯一约束
ALTER TABLE person DROP INDEX id ;
3.创建表之后添加唯一约束
ALTER TABLE person MODIFY id INT UNIQUE;
注意:如果创建表之后,插入了两天或者多条指定字段相同的数据,那么再为此字段重新添加唯一约束时会报错,因为表中已经存在相同的的字段,违背了唯一约束。
主键约束 -- primary key
1. 注意:
- 含义:非空且唯一
- 一张表只能有一个字段为主键
- 主键就是表中记录的唯一标识
2.在创建表的时候,添加主键约束
CREATE TABLE person(
id INT PRIMARY KEY,
per_name VARCHAR(20)
);
3.删除主键约束;创建表之后,添加主键约束
-- 删除主键约束
ALTER TABLE person DROP PRIMARY KEY;
-- 创建表之后,添加主键约束
ALTER TABLE person MODIFY id INT PRIMARY KEY;
4.自动增长 -- 如果某一列是数值类型的,使用 auto_increment 可以来完成值得自动增长
-- 设置自增长
CREATE TABLE person(
id INT PRIMARY KEY AUTO_INCREMENT,
per_name VARCHAR(20)
);
-- 删除自增长
ALTER TABLE person MODIFY id INT PRIMARY KEY;
-- 创建表之后,设置自增长
ALTER TABLE person MODIFY id INT PRIMARY KEY AUTO_INCREMENT;
外键约束 -- foreign key
外键约束:foreign key,让表于表产生关系,从而保证数据的正确性。
-- 创建部门表(id,dep_name,dep_location)
-- 一方,主表
CREATE TABLE department(
id INT PRIMARY KEY AUTO_INCREMENT,
dep_name VARCHAR(20),
dep_location VARCHAR(20)
);
-- 创建员工表(id,name,age,dep_id)
-- 多方,从表
CREATE TABLE employee(
id INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(20),
age INT,
dep_id INT -- 外键对应主表的主键
)
-- 添加 2 个部门
INSERT INTO department VALUES(NULL, '研发部','广州'),(NULL, '销售部', '深圳');
SELECT * FROM department;
-- 添加员工,dep_id 表示员工所在的部门
INSERT INTO employee (NAME, age, dep_id) VALUES ('张三', 20, 1);
INSERT INTO employee (NAME, age, dep_id) VALUES ('李四', 21, 1);
INSERT INTO employee (NAME, age, dep_id) VALUES ('王五', 20, 1);
INSERT INTO employee (NAME, age, dep_id) VALUES ('老王', 20, 2);
INSERT INTO employee (NAME, age, dep_id) VALUES ('大王', 22, 2);
INSERT INTO employee (NAME, age, dep_id) VALUES ('小王', 18, 2);
查询部门表:SELECT * FROM department;
删除研发部门数据,竟然删掉了;查询员工表,发现这时张三,李四,王五还在研发部,这种操作就不符合开发规则。
1.创建表之后添加外键
ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段名称) REFERENCES 主表名称(主表列名称);
添加外键之后,操作部门表,删除销售部门数据 ,发现删除不了,因为部门表被引用在员工表里,无法删除。
同时,如果在员工表里插入数据时指定的外键字段名称在主表种不存在,就无法成功添加数据。
对应的,如果在主表里修改被引用的列里的数据,也是无法操作的。
2.创建表时添加外键
create table 表名(
....
外键列
constraint 外键名称 foreign key (外键列名称) references 主表名称(主表列名称)
);
3.删除外键:ALTER TABLE 表名 DROP FOREIGN KEY 外键名称;
4.级联操作:主表中修改列里的内容,从表中关联的列内容自动修改。例如上例中,研发部的id字段修改为5,与之相关联的三个 人的dep_id自动修改为5,不需要手动操作。
- 添加级联操作
语法:ALTER TABLE 表名 ADD CONSTRAINT 外键名称
FOREIGN KEY (外键字段名称) REFERENCES 主表名称(主表列名称) ON UPDATE CASCADE ON DELETE CASCADE ;
-- 级联操作
-- ALTER TABLE 表名 ADD CONSTRAINT 外键名称
-- FOREIGN KEY (外键字段名称) REFERENCES 主表名称(主表列名称) ON UPDATE CASCADE ON DELETE CASCADE ;
ALTER TABLE employee ADD CONSTRAINT emp_dep FOREIGN KEY (dep_id) REFERENCES department(id)
ON UPDATE CASCADE ON DELETE CASCADE;
- 分类
-- 级联更新:ON UPDATE CASCADE
-- 级联删除:ON DELETE CASCADE