1.约束的概念
- 约束是作用于表中列上的规则,用于限制加入表的数据
- 约束的存在保证了数据库中数据的正确性、有效性和完整性
2.约束的分类
3.约束案例
drop TABLE IF EXISTS emp;
-- 员工表
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
);
INSERT INTO emp(id,ename,joindate,salary,bonus)values
(1,'张三','1999-11-11',8800,5000);
-- 演示主键约束:非空且唯一
INSERT INTO emp(id,ename,joindate,salary,bonus)values
(NULL,'李四','1999-11-11',8800,5000);
INSERT INTO emp(id,ename,joindate,salary,bonus)values
(1,'张三','1999-11-11',8800,5000);
-- 正确写法
INSERT INTO emp(id,ename,joindate,salary,bonus)values
(2,'李四','1999-11-11',8800,5000);
-- 演示默认约束
INSERT INTO emp(id,ename,joindate,salary)values
(3,'王五','1999-11-11',8800);
SELECT * from emp;
-- 演示自动增长:auto_increment:当列是数字类型并且 唯一约束
INSERT INTO emp(ename,joindate,salary,bonus)values
('赵六','1999-11-11',8800,5000);
INSERT INTO emp(id,ename,joindate,salary,bonus)values
(NULL,'赵六2','1999-11-11',8800,5000);
4.外键约束
drop TABLE IF EXISTS emp;
drop TABLE IF EXISTS dept;
-- 部门表
create table dept(
id int primary key auto_increment,
dep_name varchar(20),
addr varchar(20)
);
-- 员工表
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)
);
-- 添加两个部门
INSERT INTO dept(dep_name,addr) VALUES
('研发部','广州'),('销售部','深圳');
-- 添加员工
INSERT INTO emp(name,age,dep_id) VALUES
('张三',20,1),
('李四',20,1),
('王五',20,1),
('赵六',20,2),
('孙七',22,2),
('周八',18,2);
-- 删除外键
ALTER table emp drop FOREIGN KEY fk_emp_dept;
-- 建完表后,添加外键
alter table emp add CONSTRAINT fk_emp_dept FOREIGN key(dep_id) REFERENCES dept(id);