玩转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抽象类来生成对我们的示例表的级联更新。


猜你喜欢
- 栈是一种后进先出(LIFO)的数据结构,在实际生活和工作中也很常见。比如,在餐厅里的一摞盘子,总是从上面先取,也就是最后放到上面的先被取走。
- PyCharm是一款很好用很流行的python编辑器。Anaconda是专注于数据分析的Python发行版本,包含了conda、Python
- 如下: Warning at /admin/assets/add/ Incorrect string value: '\xE5\x9
- 前天由于某些原因需要利用C++调用PyTorch,于是接触到了LibTorch,配了两天最终有了一定的效果,于是记录一下。环境PyTorch
- ResNet沿用VGG完整的KaTeX parse error: Undefined control sequence: \time at
- 今天要做个搜索,用到了时间比较函数!以前多是直接比较时间,查询语句有长效率又不高~~~后来用了DateDiff函数,在调试的时候发现了一些问
- 1. IO多路复用O多路复用技术是使用一个可以同时监视多个IO阻塞的中间人去监视这些不同的IO对象,这些被监视的任何一个或多个IO对象有消息
- 一、创建配置文件在D盘建立一个配置文件,名字为:test.ini内容如下:[baseconf]host=127.0.0.1port=3306
- 1 引言一般来说MySQL分为DDL(定义)和DML(操作)。DDL:Data Definition Language,即数据定义语言,那相
- <span id="tiao">3</span><a href="javascr
- 一、使用全局变量保存单例这是最简单的实现方法function Person(){ this.createTime=new Da
- 目录一、数据库引擎1.1 查看数据库引擎1.2 修改默认数据库引擎二、数据库字符集2.1 查看字符集2.2 修改字符集一、数据库引擎1.1
- 环境Laravel 5.4原理在Laravel中,门面为应用服务容器中绑定的类提供了一个“静态”接口
- 不多说,我们直接上源码:# -*- coding:UTF-8 -*-'''实现文件打包、上传与校验Created o
- 背景基本上只要是做后台开发,都会接触到分页这个需求或者功能吧。基本上大家都是会用MySQL的LIMIT来处理,而且我现在负责的项目也是这样写
- QQ邮箱/163邮箱的邮件发送:py文件发送邮件内容相当于一个第三方的客户端,借助于QQ/163邮箱服务器来发送的邮件。主要配置:导入模块—
- 前言因为NLP作业需要用到kenlm,而kenlm在linux下更为方便。本人win10之前开启了子系统,所以就打算在子系统下进行相关作业的
- 本文实例为大家分享了vue移动端实现手指滑动效果的具体代码,供大家参考,具体内容如下滑动时候黄色块宽度跟着变化通过touch点击实现目前感觉
- 本文实例讲述了Python基于matplotlib实现绘制三维图形功能。分享给大家供大家参考,具体如下:代码一:# coding=utf-8
- MSSQL随机数 MSSQL有一个函数CHAR()是将int(0-255) ASCII代码转换为字符。那我们可以使用下面MS SQL语句,可