首页 数据库 mysql教程 MySQL的外键约束级联删除

MySQL的外键约束级联删除

Jun 07, 2016 pm 03:08 PM
linux mysql 删除 外键 约束 级联 进入

欢迎进入Linux社区论坛,与200万技术人员互动交流 >>进入 在更新数据库时使用外键约束 第一个表存储一些简单博客数据,而第二个表则存放这些博客的有关评论。这例子的巧妙之处在于,它给子表定义了一个外键约束,从而允许我们在博客文章被删除时自动地删除有

欢迎进入Linux社区论坛,与200万技术人员互动交流 >>进入

  在更新数据库时使用外键约束

  第一个表存储一些简单博客数据,而第二个表则存放这些博客的有关评论。这例子的巧妙之处在于,它给子表定义了一个外键约束,从而允许我们在博客文章被删除时自动地删除有关的所有评论。下面给出这两个表的定义,它们建立了一个一对多的关系:

  01

  DROP   TABLE   IF   EXISTS  `test`.`blogs`;

  02

  03

  CREATE   TABLE  `test`.`blogs` (

  04

  05

  `id`  INT ( 10 ) UNSIGNED AUTO_INCREMENT,

  06

  07

  `title`  TEXT ,

  08

  09

  `content`  TEXT ,

  10

  11

  `author`  VARCHAR ( 45 )  DEFAULT   NULL ,

  12

  13

  PRIMARY   KEY  (`id`)

  14

  15

  ) ENGINE = InnoDB  DEFAULT  CHARSET = utf8;

  16

  17

  18

  19

  DROP   TABLE   IF   EXISTS  `test`.`comments`;

  20

  21

  CREATE   TABLE  `test`.`comments` (

  22

  23

  `id`  INT ( 10 ) UNSIGNED AUTO_INCREMENT,

  24

  25

  `blog_id`  INT ( 10 ) UNSIGNED  DEFAULT   NULL ,

  26

  27

  `comment`  TEXT ,

  28

  29

  `author`  VARCHAR ( 45 )  DEFAULT   NULL ,

  30

  31

  PRIMARY   KEY  (`id`),

  32

  33

  KEY  `blog_ind` (`blog_id`),

  34

  35

  CONSTRAINT  `comments_ibfk_1`  FOREIGN   KEY  (`blog_id`)  REFERENCES  `blogs` (`id`)  ON   UPDATE   CASCADE

  36

  37

  ) ENGINE = InnoDB  DEFAULT  CHARSET = utf8;

  除了给以上两个InnoDB表定义一些简单字段外,上述的代码还使用了一个外键约束,使得每当父表的“id”键更新时,表comments的相应内容也会级联更新。给父字段“id”定义约束的代码如下所示:

  1

  CONSTRAINT  `comments_ibfk_1`  FOREIGN   KEY  (`blog_id`)  REFERENCES  `blogs` (`id`)  ON   UPDATE   CASCADE

  InnoDB引擎除了可以规定根据父表完成的操作对子表进行的级联更新以外,还可以执行其他的操作,包括“NO ACTION”和“RESTRICT”,这样即使父表发生更新或者删除操作,也不会引起对子表的任何操作。

  现在,根据上面的MySQL表的定义,填充如下所示的数据:

  1

  INSERT   INTO  blogs (id, title, content, author)  VALUES  ( NULL , ' Title of the first blog entry ' ,  ' Content of the first blog entry ' ,  ' Tom ' )

  2

  3

  INSERT   INTO  comments (id, blog_id, comment, author)  VALUES  ( NULL ,  1 ,  ' Commenting first blog entry ' ,  ' Susan Norton ' ), ( NULL ,  1 ,  ' Commenting first blog entry ' ,  ' Rose ' )

  然后,由于某种原因,我们更新了第一个博客数据,那么只要运行下列SQL语句,与该博客文章有关的所有评论也会随之自动更新:

  UPDATE  blogs  SET  id  =   2 , title  =   ' Title of the first blog entry ' , content  =   ' Content of the first blog entry ' , author  =   ' John Doe '   WHERE  id  =   1

  这看起来非常不错,对吧?前面讲过,外键约束容许您将表之间的关系的维护工作委托给数据库层,这意味着编写与数据层交互的应用程序时可以省去不少的代码。

[1] [2] [3] 

MySQL的外键约束级联删除

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解锁Myrise中的所有内容
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

navicat premium怎么创建 navicat premium怎么创建 Apr 09, 2025 am 07:09 AM

使用 Navicat Premium 创建数据库:连接到数据库服务器并输入连接参数。右键单击服务器并选择“创建数据库”。输入新数据库的名称和指定字符集和排序规则。连接到新数据库并在“对象浏览器”中创建表。右键单击表并选择“插入数据”来插入数据。

navicat怎么新建连接mysql navicat怎么新建连接mysql Apr 09, 2025 am 07:21 AM

可在 Navicat 中通过以下步骤新建 MySQL 连接:打开应用程序并选择“新建连接”(Ctrl N)。选择“MySQL”作为连接类型。输入主机名/IP 地址、端口、用户名和密码。(可选)配置高级选项。保存连接并输入连接名称。

navicat怎么连接本地mysql navicat怎么连接本地mysql Apr 09, 2025 am 07:45 AM

使用 Navicat 连接本地 MySQL 数据库的步骤:创建连接,并设置连接名称、主机、端口、用户名、密码。测试连接,确保参数正确。保存连接。从连接列表中选择新连接。双击要连接的数据库。

不同数据库系统添加列的语法有什么区别 不同数据库系统添加列的语法有什么区别 Apr 09, 2025 pm 02:15 PM

不同数据库系统添加列的语法为:mysql:alter table table_name add column_name data_type; postgresql:alter table table_name添加column_name data_type; oracle; oracle:alter table table_name add(column_name data_type)

navicat如何连接数据库 navicat如何连接数据库 Apr 09, 2025 am 06:45 AM

要使用 Navicat 连接数据库,请依序执行以下步骤:在 Navicat 中创建连接。输入主机名、端口、用户名、密码和数据库名称。调整高级设置(可选)。保存连接。测试连接。连接到数据库。查看数据库对象。

如何在SQL图形化工具中添加列? 如何在SQL图形化工具中添加列? Apr 09, 2025 pm 12:54 PM

在SQL图形化工具中添加列:选择要添加列的表。右键单击并选择“Alter Table”或类似选项。定义新列的属性(名称、数据类型、长度、是否为空)。指定新列的默认值(如果适用)。选择适当的数据类型以避免数据错误。使用有意义的列名。考虑对大表执行添加列操作时的性能影响。在操作前始终备份数据库,以防止数据丢失。

navicat如何导入数据库 navicat如何导入数据库 Apr 09, 2025 am 06:27 AM

在 Navicat 中导入数据库的步骤包括:连接到数据库服务器。右键单击数据库名称,选择“导入向导”。选择数据源类型。指定数据源设置。选择数据文件格式。浏览并选择数据文件。配置导入选项(表映射、字符集、数据类型)。执行导入并监控进度。

navicat怎么复制数据库 navicat怎么复制数据库 Apr 09, 2025 am 06:54 AM

Navicat 提供了两种复制数据库的方法:使用“复制数据库”向导:选择目标服务器,输入数据库名称,指定复制选项。手动复制:导出数据库,再在目标服务器上导入导出的文件。

See all articles