本文目录
一、SQL注释
- 单行注释
-- 注释说明 或 # 注释说明
- 多行注释
/* */
二、数据完整性
- 实体完整性:
- 主键约束
- 唯一约束
- 标识列
- 域完整性:
- 数据类型约束
- 非空约束
- 默认值约束
- 引用完整性
- 主外键约束
- 自定义完整性
- 存储过程
- 触发器
三、主表和从表
- 主表中没有的,从表不允许插入。
- 从表中有的,主表中不允许删除。
- 删除主表中,先删从表。
四、外键
外键只有在nnodb引擎才能支持外键。外键是从表中的公共字段。
-
创建主表:
-
创建从表:
主表中没有的,从表不允许插入:
先插入主表的数据,再插入从表数据:
从表中有的,主表中不允许删除(要先删从表再删主表):
通过修改表的时候添加外键:
alter table 从表名 add foreign key(公共字段) references 主表名(公共字段)
。删除外键,通过外键的名字删除外键:
4.1 三种外键操作
4.1.1 严格限制
- 主表中没有的,从表不允许插入。
- 从表中有的,主表中不允许删除。
- 删除主表中,先删从表。
4.1.2 置空操作(set null)
如果主表记录删除,或关联字段更新,则从表外键字段被设置为null。
4.1.3 级联操作(cascade)
如果主表记录删除,则从表记录也被删除,主表更新,从表外键字段也更新。
语法: foreign key(外键字段) references 主表名 (关联字段) [主表记录删除时的动作] [主表记录更新时的动作]
一般说删除时置空,更新时级联。
4.1.4 例题与小结
-
例题
现在来试试主表删除和更新,从表是否也会删除和更新:
更新:
删除:
-
小结
置空级联操作中外键不能是从表的主键。
4.2 解决插入数据时主键冲突
创建表:
create table ct(
id char(4) primary key,
name varchar(20)
) engine=innodb;
插入数据:
insert into ct values ('ct01', 'jack');
当再次插入数据:
如果插入的主键重复就会报错。
- 解决方法一:如果插入的主键重复就执行替换。
语法:replace into 表名 values ()
使用此语法如果数据不存在,可以直接插入:
- 解决方法二:
语法:on duplicate key update
当插入的值与主键或唯一键有冲突执行update的操作:
推荐使用方法二。
在学习的MySQL的路上,如果你觉得本文对你有所帮助的话,那就请关注点赞评论三连吧,谢谢,你的肯定是我写博的另一个支持。