约束的概念和分类
1、约束的概念:
-
约束是作用于表中列上的规则,用于限制加入表的数据
-
约束的存在保证了数据库中数据的正确性、有效性和完整性
2、约束的分类
- Tips:MySQL不支持检查约束
DROP TABLE if EXISTS emp;
CREATE table emp(
id int primary key auto_increment, -- 限制员工id填写 主键且自增长(主键:primary key(主键只能定义一个)) (自增长:auto_increment (当列是数字类型并且唯一))
name varchar(10) not null unique, -- 限制员工名字填写 非空且唯一(非空:not null) (唯一:unique)
joindate date not null, -- 限制员工入职时间填写 非空
salary double(7,2) not null,-- 限制员工工资填写 非空
bonus double(7,2) default 0 -- 限制员工奖金填写 (默认约束:default 将没有填写的值设置成默认值));
INSERT into emp(id,name,joindate,salary,bonus) values(NULL,'赵六','1999-02-18',5000,300);
SELECT id,name,joindate,salary,bonus FROM emp;
特殊一点的外键约束
CREATE table staff(
id int PRIMARY KEY auto_increment,
name varchar(20),
age int,
dep_id int,
-- 添加外键约束 dep_id关联dep表的id主键(必须要有主键才能关联)
constraint fk_staff_dep FOREIGN key(dep_id) references dep(id)
);
CREATE table dep(
id int PRIMARY KEY auto_increment, -- 主键
dep_name varchar(20),
address varchar(50)
);
-- 创建表之后添加外键约束
-- alter TABLE staff add CONSTRAINT fk_staff_dep foreign key(dep_id)REFERENCES dep(id);
insert into staff(name,age,dep_id) values('张三',20,1),('李四',20,1),('王五',20,1),('赵六',20,2),('孙七',20,2),('周八',20,2);
insert into dep(dep_name,address) VALUES('研发部','杭州'),('销售部','深圳');
select name,age,dep_id from staff;
select id,dep_name,address from dep;
ALTER table staff DROP FOREIGN key fk_staff_dep; -- 删除外键约束