-- --*********************************************
#外键删除数据(理论上先删除从表,再删主表,but秘籍可以实现直接删主表信息)
#方式一:级联删除: ON DELETE CASCADE
ALTER TABLE stuinfo ADD FOREIGN KEY(majorid) REFERENCES major(id) ON DELETE CASCADE;
#方式二:级联置空: ON DELETE SET NULL
ALTER TABLE stuinfo ADD FOREIGN KEY(majorid) REFERENCES major(id) ON DELETE SET NULL;
-- --*********************************************
#常见约束
/*
含义:一种限制,用于限制表中的数据的准确性和可靠性
分类:
1、not null:非空约束(必填项)
2、default:默认约束,保证该字段有默认值
3、primary key:主键约束,保证该字段的值具有唯一性,且非空
4、unique:唯一约束,可以为空
5、check:检查约束【mysql不支持】
6、foreign key:外键约束,用于限制两个表的关系,用于保证该字段的值必须来自于主表的关联列的值
在从表添加外键约束,引用主表中某列的值
添加约束的时机:(添加数据之前)
1、创建表时
2、修改表时
约束的添加分类:
1、列级约束(紧跟列类型之后,在,之前)
语法上支持6大约束,但外键约束无效果
2、表级约束(在所有添加字段之后,在结束语句;之前)
除了非空、默认,其他都支持
主键和唯一的对比:
1、都能保证数据的唯一性
2、主键不能为空,而唯一可以为空,且仅允许出现一个null
3、每个表最多只能有一个主键,但可以有多个唯一键
4、都允许组合,但不推荐(语法:primary key(字段1,字段2);unique(字段1,字段2))
外键:
1、要求在表设置外键关系
2、从表外键列和主表列的类型应该一致或兼容
3、主表中的关联列必须是键(主键或唯一键)
4、删除的时候先删除从表,创建的时候先创建主表
列级约束表级约束的对比:
1、列级约束在列的后面,用于限制前面的列;表级约束在所有列的后面,需要在约束后面缀要约束的列
2、列级约束语法上支持5种约束(cheak不支持),但外键约束没效果;表级约束不支持默认和非空,其他支持(cheak不支持)
3、列级约束不可以起约束名,表级约束可以,但外键约束名没效果
*/
CREATE DATABASE IF NOT EXISTS students;
-- -----------------------------------------------------*****
#一、创建表时添加约束条件
#通用写法
CREATE TABLE IF NOT EXISTS stuinfo(
id INT PRIMARY KEY,
stuname VARCHAR(20) NOT NULL,
sex CHAR(1),
seat INT UNIQUE,
majorid INT,
CONSTRAINT fk_strinfor_major FOREIGN KEY(majorid)