约束:
对表中数据进行一些限制,从而保证数据的正确性。
-- 删除表
DROP TABLE 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,-- 非空
bouns DOUBLE(7,2)DEFAULT 0 -- 奖金,默认为0
);
-- 查询表
SELECT * FROM emp;
-- 演示非空约束
INSERT into emp(id,ename,joindate,salary,bouns) VALUES(1,'小马','1999-12-19',NULL,10);
-- 演示唯一约束,不能和主键的id序列向重复
INSERT into emp(id,ename,joindate,salary,bouns) VALUES(1,'小马','1999-12-19',3000,10);
-- 演示默认约束
INSERT into emp(id,ename,joindate,salary) VALUES(1,'小马','1999-12-19',3000);
-- 演示自动增长:auto_increment:当列是数字类型并且唯一约束
-- ??这里为什么跑不起来
INSERT into emp(ename,joindate,salary,bouns) VALUES('小马','1999-12-19',3000,10);
INSERT into emp(id,ename,joindate,salary,bouns) VALUES(NULL,'小马','1999-12-19',3000,10);
外建约束
外键约束用来建立物理关系的约束。
举个例子,先创建部门表,再创建员工表。(员工属于某一个部门)
如果我们直接删除某一个部门,其中的员工却还在,这样就会出现错误。
所以我们要建立外建约束来建立物理关系进行正确约束。
-- 部门表
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('研发部','广州'),('销售部','厦门');
-- 添加员工,dep_id表示员工所在的部门
INSERT INTO emp(NAME,age,dep_id) VALUES
('张三',20,1),
('李四',20,1),
('王五',19,1),
('赵六',21,2),
('孙七',23,2),
('周八',24,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) ;
SELECT * FROM dept;
SELECT * FROM emp;
show tables;
drop TABLE dept;
DROP TABLE emp;