1.约束的分类
/*
NOT NULL 非空约束,规定某个字段不能为空
UNIQUE 唯一约束,规定某个字段在整个表中是唯一的
PRIMARY KEY 主键(非空且唯一)-每张表中必须有主键
FOREIGN KEY 外键
CHECK 检查约束(mysql不支持)
DEFAULT 默认值
约束:列级约束 vs 表级约束
列级约束 :只能单独约束一列
表级约束 :可以同时约束多列
注意:not null和default只有列级约束
添加约束:创建表时添加约 vs 创建表后添加约束(几乎不用)
*/
CREATE DATABASE db3;
#创建表时添加列级约束
CREATE TABLE emp(
id INT PRIMARY KEY,#主键
ename VARCHAR(20) NOT NULL,#非空约束
age INT DEFAULT 18,#默认值
eid INT UNIQUE #唯一约束
);
DESC emp;
INSERT INTO emp(id,ename,age,eid) VALUES(1,'a',10,100);
INSERT INTO emp(id,ename,age,eid) VALUES(2,'b',11,101);
INSERT INTO emp(id,ename,eid) VALUES(4,'d',103);
#创建表时添加表级约束
一般都是创建时进行约束,比较常用的是:
PRIMARY KEY NOT NULL UNIQUE
NOT NULL
UNIQUE
PRIMARY KEY
FOREIGN KEY
CHECK
DEFAULT
2.创建表后添加约束(了解)
3.自增
/*
AUTO_INCREMENT : 自增
*/
CREATE TABLE emp4(
id INT PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(20)
);
INSERT INTO emp4(username) VALUES('aa');
AUTO_INCREMENT
4.外键约束
/*
外键约束:
思考:
创建表时先创建主表还是从表?主表
添加数据时先添加到主表还是从表?主表
删除数据时先删除主表还是从表?从表
*/
CREATE DATABASE db4;
#部门表 -- 主表
CREATE TABLE dept(
dept_id INT AUTO_INCREMENT PRIMARY KEY,
dept_name VARCHAR(20)
);
#员工表 -- 从表
CREATE TABLE emp(
emp_id INT AUTO_INCREMENT PRIMARY KEY,
last_name VARCHAR(15),
dept_id INT,
#添加外键约束CONSTRAINT 索引名 FOREIGN KEY(字段名) REFERENCES 主表(字段名)
CONSTRAINT emp_dept_id_fk FOREIGN KEY(dept_id)
REFERENCES dept(dept_id)
);
INSERT INTO dept(dept_id) VALUES(10);
INSERT INTO emp(last_name,dept_id) VALUES('abc',10);
DELETE FROM emp;
DELETE FROM dept WHERE dept_id=10;
CONSTRAINT FOREIGN KEY() REFERENCES ()
5.级联删除
/*
级联删除
*/
#部门表 -- 主表
CREATE TABLE dept2(
dept_id INT AUTO_INCREMENT PRIMARY KEY,
dept_name VARCHAR(20)
);
#员工表 -- 从表
CREATE TABLE emp2(
emp_id INT AUTO_INCREMENT PRIMARY KEY,
last_name VARCHAR(15),
dept_id INT,
#ON DELETE CASCADE :级联删除
CONSTRAINT emp2_dept2_id_fk FOREIGN KEY(dept_id)
REFERENCES dept2(dept_id) ON DELETE CASCADE
);
DELETE FROM dept2 WHERE dept_id=10;
ON DELETE CASCADE