1.约束的分类

  1. /*
  2. NOT NULL 非空约束,规定某个字段不能为空
  3. UNIQUE 唯一约束,规定某个字段在整个表中是唯一的
  4. PRIMARY KEY 主键(非空且唯一)-每张表中必须有主键
  5. FOREIGN KEY 外键
  6. CHECK 检查约束(mysql不支持)
  7. DEFAULT 默认值
  8. 约束:列级约束 vs 表级约束
  9. 列级约束 :只能单独约束一列
  10. 表级约束 :可以同时约束多列
  11. 注意:not null和default只有列级约束
  12. 添加约束:创建表时添加约 vs 创建表后添加约束(几乎不用)
  13. */
  14. CREATE DATABASE db3;
  15. #创建表时添加列级约束
  16. CREATE TABLE emp(
  17. id INT PRIMARY KEY,#主键
  18. ename VARCHAR(20) NOT NULL,#非空约束
  19. age INT DEFAULT 18,#默认值
  20. eid INT UNIQUE #唯一约束
  21. );
  22. DESC emp;
  23. INSERT INTO emp(id,ename,age,eid) VALUES(1,'a',10,100);
  24. INSERT INTO emp(id,ename,age,eid) VALUES(2,'b',11,101);
  25. INSERT INTO emp(id,ename,eid) VALUES(4,'d',103);
  26. #创建表时添加表级约束

一般都是创建时进行约束,比较常用的是:
PRIMARY KEY NOT NULL UNIQUE
NOT NULL
UNIQUE
PRIMARY KEY
FOREIGN KEY
CHECK
DEFAULT

2.创建表后添加约束(了解)


3.自增

  1. /*
  2. AUTO_INCREMENT : 自增
  3. */
  4. CREATE TABLE emp4(
  5. id INT PRIMARY KEY AUTO_INCREMENT,
  6. username VARCHAR(20)
  7. );
  8. INSERT INTO emp4(username) VALUES('aa');

AUTO_INCREMENT

4.外键约束

  1. /*
  2. 外键约束:
  3. 思考:
  4. 创建表时先创建主表还是从表?主表
  5. 添加数据时先添加到主表还是从表?主表
  6. 删除数据时先删除主表还是从表?从表
  7. */
  8. CREATE DATABASE db4;
  9. #部门表 -- 主表
  10. CREATE TABLE dept(
  11. dept_id INT AUTO_INCREMENT PRIMARY KEY,
  12. dept_name VARCHAR(20)
  13. );
  14. #员工表 -- 从表
  15. CREATE TABLE emp(
  16. emp_id INT AUTO_INCREMENT PRIMARY KEY,
  17. last_name VARCHAR(15),
  18. dept_id INT,
  19. #添加外键约束CONSTRAINT 索引名 FOREIGN KEY(字段名) REFERENCES 主表(字段名)
  20. CONSTRAINT emp_dept_id_fk FOREIGN KEY(dept_id)
  21. REFERENCES dept(dept_id)
  22. );
  23. INSERT INTO dept(dept_id) VALUES(10);
  24. INSERT INTO emp(last_name,dept_id) VALUES('abc',10);
  25. DELETE FROM emp;
  26. DELETE FROM dept WHERE dept_id=10;

CONSTRAINT FOREIGN KEY() REFERENCES ()

5.级联删除

  1. /*
  2. 级联删除
  3. */
  4. #部门表 -- 主表
  5. CREATE TABLE dept2(
  6. dept_id INT AUTO_INCREMENT PRIMARY KEY,
  7. dept_name VARCHAR(20)
  8. );
  9. #员工表 -- 从表
  10. CREATE TABLE emp2(
  11. emp_id INT AUTO_INCREMENT PRIMARY KEY,
  12. last_name VARCHAR(15),
  13. dept_id INT,
  14. #ON DELETE CASCADE :级联删除
  15. CONSTRAINT emp2_dept2_id_fk FOREIGN KEY(dept_id)
  16. REFERENCES dept2(dept_id) ON DELETE CASCADE
  17. );
  18. DELETE FROM dept2 WHERE dept_id=10;

ON DELETE CASCADE