视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
MySQL的外键约束级联删除
2020-11-09 15:50:05 责编:小采
文档


欢迎进入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]

下载本文
显示全文
专题