约束的概念
- 约束是作用于表中列上的规则,用于限制加入表的数据
- 约束的存在保证了数据库中数据的正确性、有效性和完整性
约束的分类
约束名称 | 描述 | 关键字 |
---|
非空约束 | 保证列中的所有数据不能有空值 | NOT NULL |
唯一约束 | 保证列中所有数据各不相同 | UNIQUE |
主键约束 | 主键是一行数据的唯一标识,要求非空且唯一 | PRIMARY KEY |
检查约束 | 保证列中的值满足某一条件 | CHECK |
默认约束 | 保存数据时,未指定值则采用默认值 | DEFAULT |
外键约束 | 外键用来让两个表的数据之间建立连接,保证数据的一致性和完整性 | FOREIGN KEY |
约束案例
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',8000,5000);
INSERT INTO emp(id,ename,joindate,salary,bonus) VALUES(NULL,'张三','1999-11-11',8000,5000);
INSERT INTO emp(id,ename,joindate,salary,bonus) VALUES(1,'张三','1999-11-11',8000,5000);
INSERT INTO emp(id,ename,joindate,salary,bonus) VALUES(2,'李四','1999-11-11',8000,5000);
INSERT INTO emp(id,ename,joindate,salary,bonus) VALUES(3,NULL,'1999-11-11',8000,5000);
INSERT INTO emp(id,ename,joindate,salary,bonus) VALUES(3,'李四','1999-11-11',8000,5000);
INSERT INTO emp(id,ename,joindate,salary) VALUES(4,'王五','1999-11-11',8000);
INSERT INTO emp(id,ename,joindate,salary,bonus) VALUES(3,'赵六','1999-11-11',8000,NULL);
SELECT * from emp;
INSERT INTO emp(ename,joindate,salary) VALUES('王五','1999-11-11',8000);
INSERT INTO emp(id,ename,joindate,salary,bonus) VALUES(NULL,'赵六','1999-11-11',8000,NULL);
INSERT INTO emp(id,ename,joindate,salary,bonus) VALUES(NULL,'赵六2','1999-11-11',8000,NULL);
外键约束
- 概念:外键用来让两个表的数据之间建立链接,保证数据的一致性和完整性
员工表和部门表做外键约束(dep_id与id关联)![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/41d9b9dc17b27e2437fedd402db201a6.png)
drop table if EXISTS dept;
CREATE TABLE dept(
id int PRIMARY KEY auto_increment,
dept_name VARCHAR(20),
addr VARCHAR(20)
);
drop TABLE if EXISTS emp;
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(dept_name,addr) VALUES
('研发部','广州'),
('销售部','深圳');
INSERT INTO emp(name,age,dep_id) VALUES
('张三',20,1),
('李四',20,1),
('王五',20,1),
('赵六',20,2),
('孙七',22,2),
('周八',18,2);
SELECT * FROM dept;
select * FROM emp;
ALTER TABLE emp drop FOREIGN KEY fk_emp_dept;
ALTER TABLE emp add CONSTRAINT fk_emp_dept FOREIGN key(dep_id) REFERENCES dept(id);