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
