跳转到主内容
新派编程网 - 新潮编程理念,全新技术课堂!

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 Trae linux Trae Linux 官方版本现已全面上线,开发者可直接访问 Trae 官网(trae.cn 国内版或 trae.ai 国际版)获取专属安装包。该版本完美适配主流 Linux 发行版,提供 .deb(适配 Ubuntu/Debian)、.rpm(适配 RHEL/Fedora)以及通用 .tar.gz 格式,并全面支持 x64 与 ARM64 架构。

下载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]

相关文章