玩转MySQL中的外键约束之PHP篇(2)
来源:asp之家 时间:2010-03-18 10:20:00
二、以级联方式更新和删除数据库中的数据
古人云,温故而知新,那么先让我们来回顾一下前面学过的内容吧。之前,我们介绍过如何运用外键约束级联更新和删除存放博客文章评论的InnoDB表中的数据。如果您尚未阅读前面的文章也不要紧,下面我们简单回顾这些内容。
这里是我们的示例中用到的两个表的定义,如下所示:
DROP TABLE IF EXISTS `test`.`blogs`;
CREATE TABLE `test`.`blogs` (
`id` INT(10) UNSIGNED AUTO_INCREMENT,
`title` TEXT,
`content` TEXT,
`author` VARCHAR(45) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
DROP TABLE IF EXISTS `test`.`comments`;
CREATE TABLE `test`.`comments` (
`id` INT(10) UNSIGNED AUTO_INCREMENT,
`blog_id` INT(10) UNSIGNED DEFAULT NULL,
`comment` TEXT,
`author` VARCHAR(45) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `blog_ind` (`blog_id`),
CONSTRAINT `comments_ibfk_1` FOREIGN KEY (`blog_id`) REFERENCES `blogs` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
上面的代码定义了两个表,需要注意一下第二个,因为它为“blog_id”字段规定了一个约束,所以当post表中的数据被更新和删除时,将触发相应的级联操作。
为了帮您理解这一过程,我们可以在表中填上一些数据,这时可以通过SQL语句INSERT来完成,如下:
INSERT INTO blogs (id, title, content, author) VALUES (NULL,'Title of the first blog entry', 'Content of the first blog entry', 'IAN')
INSERT INTO comments (id, blog_id, comment, author) VALUES (NULL, 1, 'Commenting first blog entry', 'Tom'), (NULL, 1, 'Commenting first blog entry', 'Rose')
现在,我们唯一的一条博客数据已经有了两条评论数据,如果由于任何原因需要更新博客及其评论数据的话,可以通过下列命令完成:
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
这看起来非常简单,但是,如果我说将博客数据连同相应的评论数据一同删除会更加简单,您能会相信吗?如果不信的话,请看下面的SQL语句:
DELETE FROM blogs WHERE id = 2
如您所见,这就是删除指定博客及其评论所需的全部SQL代码,这足以证明通过外键约束维护两个InnoDB表的完整性到底有多么的方便。
迄今为止,我们已经简单回顾之前所学的内容,接下来,我们将继续探索这些表的约束的各种优点。 就像本文开头部分介绍的那样,我们将开始讲解如何通过PHP 5内置的MySQL抽象类来生成对我们的示例表的级联更新。