1. 概念和分类
 
1.1 约束的概念
 
- 约束是作用于表中列上的规则,用于限制加入表的数据
 - 约束的存在保证了数据库中数据的正确性、有效性和完整性
 
 
1.2 约束的分类
 

 
- 非空约束: 关键字是 NOT NULL
 保证列中所有的数据不能有null值。
 例如:id列在添加 马花疼 这条数据时就不能添加成功。 - 唯一约束:关键字是 UNIQUE
 保证列中所有数据各不相同。
 例如:id列中三条数据的值都是1,这样的数据在添加时是绝对不允许的。 - 主键约束: 关键字是 PRIMARY KEY
 主键是一行数据的唯一标识,要求非空且唯一。一般我们都会给没张表添加一个主键列用来唯一标识数据。
 例如:上图表中id就可以作为主键,来标识每条数据。那么这样就要求数据中id的值不能重复,不能为null值。 - 检查约束: 关键字是 CHECK
 保证列中的值满足某一条件。
 例如:我们可以给age列添加一个范围,最低年龄可以设置为1,最大年龄就可以设置为300,这样的数据才更合理些。
 MySQL不支持检查约束 - 默认约束: 关键字是 DEFAULT
 保存数据时,未指定值则采用默认值。
 例如:我们在给english列添加该约束,指定默认值是0,这样在添加数据时没有指定具体值时就会采用默认给定的0。 
 
CREATE TABLE emp (
	id INT PRIMARY KEY auto_increment, 
	ename VARCHAR(50) NOT NULL UNIQUE, 
	joindate DATE NOT NULL, 
	salary DOUBLE(7,2) NOT NULL, 
	bonus DOUBLE(7,2) DEFAULT 0 
);
 
- 外键约束: 关键字是 FOREIGN KEY
 外键用来让两个表的数据之间建立链接,保证数据的一致性和完整性。 
 
CREATE TABLE emp(
	id int primary key auto_increment,
	name varchar(20),
	age int,
	dep_id int,
	
	
	CONSTRAINT fk_emp_dept FOREIGN KEY(dep_id) REFERENCES dept(id)
	
);
 
alter table emp add CONSTRAINT fk_emp_dept FOREIGN key(dep_id) REFERENCES dept(id);
 
alter table emp drop FOREIGN KEY fk_emp_dept;