Mysql-约束
drop table if exists emp;
CREATE table emp(
id INT PRIMARY KEY auto_increment , -- 员工id,自增长
ename VARCHAR(50) NOT NULL UNIQUE, -- 员工姓名,非空且唯一
joindate date NOT NULL, -- 入职日期,非空
salary DOUBLE(7,2) NOT NULL, -- 工资,非空
bonus DOUBLE(7,2) DEFAULT 0 -- 奖金,如果没有奖金默认为0
);
insert into emp(id,ename,joindate,salary,bonus)values(1,'张三','1990-11-11',8800,5000);
-- 演示主键约束:非空且唯一
insert into emp(id,ename,joindate,salary,bonus)values(null,'张三','1990-11-11',8800,5000);
insert into emp(id,ename,joindate,salary,bonus)values(1,'张三','1990-11-11',8800,5000);
insert into emp(id,ename,joindate,salary,bonus)values(2,'李四','1990-11-11',8800,5000);
-- 演示非空约束:
insert into emp(id,ename,joindate,salary,bonus)values(3,null,'1990-11-11',8800,5000);
-- 演示唯一约束:
insert into emp(id,ename,joindate,salary,bonus)values(4,'李四','1990-11-11',8800,5000);
-- 演示默认值约束:
insert into emp(id,ename,joindate,salary)values(3,'王五','1990-11-11',8800);
insert into emp(id,ename,joindate,salary,bonus)values(4,'赵六','1990-11-11',8800,null);
-- 演示自动增长:auto_increment :当列是数字类型,并且他是唯一约束
insert into emp(ename,joindate,salary,bonus)values('赵六','1990-11-11',8800,null);
insert into emp(id,ename,joindate,salary,bonus)values(null,'赵六3','1990-11-11',8800,null);
SELECT * from emp;
还可以通过 alter table 表名 alter 列名 drop 约束 去删除约束
外键约束
--删除表
drop table if EXISTS dept;
drop table if EXISTS emp;
-- 部门表
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,
-- 添加外键 dep_id,关联dept表id主键
CONSTRAINT fk_emp_dept FOREIGN KEY (dep_id) REFERENCES dept(id)
);
-- 添加2个部门
INSERT into dept (dep_name,addr)VALUES('研发部','广州'),('销售部','深圳');
-- 添加员工,dept_id 表示员工所在部门
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);