当前位置: 首页 > news >正文

Mysql-约束

概念:

约束是作用于表中字段上的规则,用于限制存储在表中的数据。

目的:

保存数据库中数据的正确,有效性和完整性。

分类:

注意事项:约束是作用在数据表中的字段上的,可以在创建表或修改表的时候添加约束。

案例一:根据要求,完成表结构的创建

外键约束

概念:

外键用来让两张表的数据之间建立连接,从而保持数据的一致性和完整性。

表示例:

添加外键的两种方式

在新增数据表时进行新增:

create table 表名(
        字段名 数据类型,

        ....

        constaraint [外键名称] foreign key (外键字段名) references 主表(主表列名)

)

数据表已存在,添加字段外键:

alter table 表名 add constraint 外键名称 foreign key (外键字段名) references 主表 (主表列名)

注意:父表与子表如果已经提前存在,外键还没创建,那么在创建外建时,如果要创建外键的那个字段,子表该字段已存在的所有数据与父表该字段已存在的所有数据如果有差集,那么就会出现如下错误:

删除外键,测试外键的功能,数据完整性功能

案例一:

案例二:

删除外键语句

alter table 表名 drop foreign key 外键名称;

外键约束

删除/更新行为

注意:如果修改已存在的外键约束的策略,你需要先删除旧的外键约束,然后重新创建它,并在创建时指定具体你想要的行为。

指定行为的语句为:

alter table 表名 add constraint 外键名称 foreign key (外键字段名) references 主表 (主表列名)  on delete restrict on update restrict

测试 NO ACTION

新增外键为NO ACTION 行为

alter table emp add constraint fk_dept_id foreign key (dept_id)  references dept(id) on delete no action on update no action;

结果:

注意:
历史原因:RESTRICT 和 NO ACTION 的不同关键字源于 SQL 标准,但 MySQL 实现中它们的行为相同。

兼容性:MySQL 支持这两个关键字是为了与其他数据库系统的兼容性。

内部实现:在 MySQL 中,RESTRICT 和 NO ACTION 没有区别,都表示相同的行为。


当指定外键为 no action 时,数据库会显示RESTRICT,因为 no action 与 RESTRICT是相等的行为;且将no action 显示为 RESTRICT ,只不过是mysql的一种内部处理方式而已。

删除子表数据时:

删除父表数据时

由于父表不存在11这个id,所以修改失败了

新增外键为RESTRICT 行为

alter table emp add constraint fk_dept_id foreign key (dept_id)  references dept(id) on delete RESTRICT on update RESTRICT;

修改:

删除:

新增外键为cascade行为

alter table emp add constraint fk_dept_id foreign key (dept_id)  references dept(id) on delete cascade on update cascad

更新

删除

新增外键为set null行为

alter table emp add constraint fk_dept_id foreign key (dept_id)  references dept(id) on delete set null on update set null

删除:

新增外键为set null行为

alter table emp add constraint fk_dept_id foreign key (dept_id)  references dept(id) on delete set default on update set default


http://www.mrgr.cn/news/761.html

相关文章:

  • Unity的UI设计
  • 使用旧笔记本电脑搭建私人NAS
  • JVM -垃圾回收器
  • vue 后台管理 指定项目别名
  • [LitCTF 2024]浏览器也能套娃?
  • CentOS7安装Docker教程(含最新镜像地址)
  • 国内无法更新linux,无法使用sudo yum update
  • 实现弹弹球小游戏
  • Vue中<style scoped>与<style module>的深入解析与应用
  • LeetCode.22。括号生成
  • 下载 kotlin compiler embeddable 巨慢的问题
  • 数据驱动增长,实时监控商品信息是关键 —— 淘宝API的实战应用“
  • Go语言基础---运算符
  • tcpdump入门——四次挥手
  • 【大模型从入门到精通19】开源库框架LangChain LangChain文档加载器1
  • 对外提供开放式数据查询存储服务的成本考量
  • 网络丢包深度解析:影响、原因及优化策略
  • MySQL InnoDB中一个update语句从执行到提交的全过程(1)
  • 【242. 有效的字母异位词 简单】
  • 微服务:网关路由和登录校验