Mysql之 约束 & 数据库的模式
一、约束
详情见: https://blog.csdn.net/w_linux/article/details/79655073
Mysql不支持第五种检查约束CHECK
(一)非空约束(not null)
(二)唯一性约束(unique)
1、表级约束:email varchar(128) unique
- 使用表级约束,给多个字段联合约束:unique(name,email)
- 给约束起名:constraint t_user_email_unique unique(email)
2、可同非空约束一起使用,既不能为空,也不能重复:name varchar(32) not null unique
(三)主键约束(primary key) PK
主键约束除了可以做到"not null unique"之外,还会默认添加"索引——index"0
- 单一主键(列级定义)
- (表级定义)constraint t_user_id_pk primary key(id)
- 复合主键(表级定义)primary key(id,name)
(四)外键约束(foreign key) FK
1.注意点
- 外键值可以为null
- 外键字段去引用一张表的某个字段的时候,被引用的字段必须具有unique约束
- 有了外键引用之后,表分为父表和子表
- 班级表:父表 <id是primary key的是父表>
- 学生表:子表 <id是foreign key的是子表>
- 创表先创有primary key 父表
- 插表先插有primary key 父表
- 删除先删foreign key子表
2.CONSTRAINT fk_PerOrders FOREIGN KEY (P_Id) REFERENCES .. 和
FOREIGN KEY (P_Id) REFERENCES ..两种区别?
>>> 区别仅限外键的命名。一般使用单独增加外键的方式。
二、模式
1.外模式
- 用户编程时的对象或属性
2.模式/逻辑模式/概念模式
- 表或关系,如:存储过程/视图/触发器
3.内模式
- 存储如表在哪个表空间在哪里有索引,表空间的数据文件放在哪里,在哪个磁盘。
三、约束是一种模式吗?
约束依附于表,不是模式。
灭表自动灭约束,但模式如函数并不消失。