约束的目的:
保证数据的一致性和唯一性
1.主键约束
PRIMARY KEY AUTO_INCREMENT
一张表 只有主键约束 没有自动增长 可以
不能 只有自动增长 没有主键约束
两者最好配合使用
主键约束保证数据的唯一性
主键自带非空属性
2.唯一约束
保证数据的唯一性
3.非空约束
NOT NULL
4.默认约束
DEFAULT default_value
5.外键约束
1.保证表的引擎 必须 Innodb
2.保证字段的类型一致 数值类型要求长度一样 如果有无符号 也要保持一致
字符串不做要求
3.外键约束命令: FOREIGN KEY (pid) REFERENCES major(id)
主表:
4.外键列如果没有指定索引,会自动创建 主键列不会
CREATE TABLE IF NOT EXISTS major(
   id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
   name varchar(20)
);

子表
CREATE TABLE IF NOT EXISTS stu(
   id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
   name varchar(20),
   pid  INT  UNSIGNED,
   FOREIGN KEY (pid) REFERENCES major(id) ON UPDATE  CASCADE ON DELETE CASCADE
);

INSERT major (name) VALUES('PHP');
INSERT major (name) VALUES('java');
INSERT major (name) VALUES('h5');

INSERT stu (name,pid) VALUES('xiaoming',1);
INSERT stu (name,pid) VALUES('laowang',2);
INSERT stu (name,pid) VALUES('gebixiaowang',3);

UPDATE major SET id = 4 where id = 3;
DELETE FROM major where id  = 4;
1.CASCADE :从父表删除或更新且自动删除或更新子表匹配的行
2.SET NULL:从父表删除或更新行,并设置子表外键列为null,如果使用该选项,必须保证子表列没有指定NOT NULL
3.RESTRICT:拒绝对父表的删除或更新操作
4.NO ACTION :标准SQL的关键在在MYSQL 中与RESTRICT 相同