约束
概念:对表中的数据进行限定,保证数据的正确性、有效性和完整性
分类:
1)主键约束:primary key
2)非空约束:not null
3)唯一约束:unique
4)外键约束:foreign key

1)非空约束:not null
① 创建表时添加约束

-- 创建表时添加非空约束
CREATE TABLE stu2(
	id INT,
	NAME VARCHAR(20) NOT NULL -- name为非空(创建表时添加约束)
);

② 删除非空约束

-- 删除非空约束
ALTER TABLE stu2 MODIFY NAME VARCHAR(20);

③ 创建表之后,添加非空约束

-- 创建表之后,添加非空约束
ALTER TABLE stu2 MODIFY NAME VARCHAR(20) NOT NULL;

2)唯一约束:unique,值不可以重复
① 创建表时添加唯一约束

-- 创建表时添加唯一约束
CREATE TABLE stu3(
	NAME INT,
	phone_number VARCHAR(20) UNIQUE
);
-- 注意:在mysql中,唯一约束限定的列的值可以有多个null

② 删除唯一约束

-- 删除唯一约束
ALTER TABLE stu3 DROP INDEX phone_number;

③ 创建表后,添加唯一约束

-- 创建表后,添加唯一约束
ALTER TABLE stu3 MODIFY phone_number VARCHAR(20) UNIQUE;

3)主键约束:primary key
注意:
① 含义:非空 且 唯一
② 一张表只能有一个字段为主键
③ 主键就是表中记录的唯一标识
*

① 创建表时添加主键

-- 创建表时添加主键
CREATE TABLE stu4(
	id INT PRIMARY KEY,
	NAME VARCHAR(20)
);

② 删除主键

-- 删除主键
ALTER TABLE stu4 DROP PRIMARY KEY;

③ 创建表之后,添加主键

-- 创建表之后,添加主键
ALTER TABLE stu4 MODIFY id INT PRIMARY KEY;

④ 自动增长
概念:如果某一列是数值型的,可以使用auto_increment来完成值的自动增长

-- 使用auto_increment完成主键的自动增长
-- 在创建表时,添加主键约束,并且完成主键的自动增长
CREATE TABLE stu5(
	id INT PRIMARY KEY AUTO_INCREMENT,
	NAME VARCHAR(20)
);
-- 删除自动增长
ALTER TABLE stu5 MODIFY id INT;
-- 添加自动增长
ALTER TABLE stu5 MODIFY id INT AUTO_INCREMENT;

4)外键约束:foreign key
① 在创建表时,可以添加外键

create table 表名(
	...
	外键列
	constraint 外键名称foreign key(外键名称) reference 主表名称(主表列名称)
);
栗子:
-- department表 (部门表) 主表
CREATE TABLE department(
	id INT PRIMARY KEY AUTO_INCREMENT,
	dep_name VARCHAR(20),
	dep_location VARCHAR(20)
);

-- employee表 (员工表) 从表
CREATE TABLE employee(
	id INT PRIMARY KEY AUTO_INCREMENT,
	NAME VARCHAR(20),
	age INT,
	dep_id INT,  -- 外键 对应主表的主键
	
	-- 创建外键约束 创建表时添加外键约束
	CONSTRAINT emp_depid_fk FOREIGN KEY (dep_id) REFERENCES department (id)
);

② 删除外键

alter table 表名 drop foreign key 外键名称;
栗子:
-- 删除外键约束
ALTER TABLE employee DROP FOREIGN KEY emp_depid_fk;

③ 创建表之后,添加外键

alter table 表名 add constraint 外键名称 foreign key (外键字段名称) references 主表名称(主表列名称);
栗子:
-- 在employee表存在的情况下添加外键约束
ALTER TABLE employee ADD CONSTRAINT emp_depid_fk FOREIGN KEY (dep_id) REFERENCES department (id);

④ 级联操作
添加级联操作

语法:ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段名称) REFERENCES 主表名称 (主表列名称) ON UPDATE CASCADE ON DELETE CASCADE;
栗子:
ALTER TABLE employee ADD CONSTRAINT emp_depid_fk FOREIGN KEY (dep_id) REFERENCES department (id) ON UPDATE CASCADE ON DELETE CASCADE;

分类:
① 级联更新:ON UPDATE CASCADE
② 级联删除:ON DELETE CASCADE