玩转MySQL中的外键约束之更新和删除

上传人:小*** 文档编号:180678156 上传时间:2023-01-07 格式:DOC 页数:4 大小:27KB
收藏 版权申诉 举报 下载
玩转MySQL中的外键约束之更新和删除_第1页
第1页 / 共4页
玩转MySQL中的外键约束之更新和删除_第2页
第2页 / 共4页
玩转MySQL中的外键约束之更新和删除_第3页
第3页 / 共4页
资源描述:

《玩转MySQL中的外键约束之更新和删除》由会员分享,可在线阅读,更多相关《玩转MySQL中的外键约束之更新和删除(4页珍藏版)》请在装配图网上搜索。

1、玩转MySQL中的外键约束之更新和删除发布日期:10-01-1111:06:11点击次数:3在本文中,我们将向读者详细介绍如何在更新和删除父表数据的同时,触发有关子表数据的级联更新和删除操作。您将看到当使用DB表的时候,借助于外键约束就可以轻松搞定这一过程。一、利用外键约束更新并删除MySQL中的数据我们知道,幵发能够维护多个表的完整性的数据库驱动的应用程序是一件非常复杂的事情即使应用程序所面对的是当前最流行的幵源关系型数据库管理系统MySQL服务器时也不例外。如果一个应用程序必须处理多个数据库表,而这些表之间有存在着某些预定义的关系,这时一旦父表中的数据被更新或者删除,那么这些变化必须正确反

2、映到子表中,否则就会引发许多问题。具体就MySQL来说,在大多数情况下类似这样的数据库完整性问题都可以通过使用程序库)RM加以解决,不过这并非解决问题的唯一出路。另一种解决方案是使用MySQL的InnoDB存储引擎的外键约束。在使用这个引擎的时候,我们可以在父表执行诸如更新和删除等操作时,让子表执行指定的动作来进行响应。在前一篇文章中,我们演示了从父表中删除一篇博客的数据时,如何触发对存放该博客有关评论的表中相应数据的级联删除操作。下面我们还是以前面的示例来诠释如何在数据库层来维护有关的表的完整性,而不是将这项任务让推给处理数据层的应用程序。前面我们在介绍在MySQL的InnoDB表中应用外键

3、约束的时候,都是单独触发级联更新或级联删除操作,实际上,当父表的键发生同时更新和删除时,我们还可以同时触发对有关子表的相应操作,这样更易于维护数据库的一致性。下面我们将对此展开详细的介绍。二、以级联方式删除数据为了保持连续性,我们在介绍如何以级联方式对子表数据进行更新和删除操作的时候,仍将使用前面所用的示例。在学习新内容之前,让我们先来回顾一下当特定的博客文章给删掉时,如何使用外键约束删除存储评论的数据表中的有关数据,注意,这里只涉及到删除操作。下面是我们示例中用到的两个表的定义:DROPTABLEIFEXISTStest.blogs;CREATETABLEtest.blogs(idINT(1

4、0)UNSIGNEDAUTO_INCREMENT,titleTEXT,contentTEXT,authorVARCHAR(45)DEFAULTNULL,PRIMARYKEY(id)ENGINE=InnoDBDEFAULTCHARSET=utf8;DROPTABLEIFEXISTSments;CREATETABLEments(idINT(10)UNSIGNEDAUTO_INCREMENT,blog_idINT(10)UNSIGNEDDEFAULTNULL,commentTEXT,authorVARCHAR(45)DEFAULTNULL,PRIMARYKEY(id),KEYblog_ind(blo

5、g_id),CONSTRAINTcomments_ibfk_1FOREIGNKEY(blog_id)REFERENCESblogs(id)ONDELETECASCADE)ENGINE=InnoDBDEFAULTCHARSET=utf8;上面的代码中,我们定义了两个简单的InnoDB表,第一个用于存储博客数据,第二个用来保存博客的有关评论。很明显,这两个表之间存在着一对多的关系,这正好可以用来演示外键约束的好处。现在,给我们的表填充如下所示的数据:INSERTINTOblogs(id,title,content,author)VALUES(NULL,Titleofthefirstblogentr

6、y,Contentofthefirstblogentry,Tom)INSERTINTOcomments(id,blog_id,comment,author)VALUES(NULL,1,Commentingfirstblogentry,SusanNorton),(NULL,1,Commentingfirstblogentry,Rose)好了,现在表中已经有数据了。但是,如何在应用程序层次之外删除gs表的第一个数据项呢?实际上这很简单,如下所示的命令即可办到:DELETEFROMblogsWHEREid=1如果我们定义一个简单的外键约束,那么上述的DELETE命令不仅会删除第一篇博客,而且与之相关

7、的所有评论也会随之清空,并且这一过程只需一步即可搞定,呵呵,听起来不错吧。然而,就像本文前面所说过的那样,InnoDB存储引擎还允许同时执行级联更新和删除这两种操作,下面我们会为读者详细介绍。三、扩展外键约束的用途现在是介绍在父表数据删除时如何对子表中的有关数据进行级联更新和删除的时候了,这能够有效简化处理这些表的应用程序的逻辑实现。为了帮您更好地理解InnoDB存储引擎提供的这一特性,我们将通过示例加以说明。现在,我们重新定义之前见过的那两个表,并规定特定博客被更新和删除时,(要对ments执行相应的级联动作。下面给出这两个表的定义:DROPTABLEIFEXISTStest.blogs;C

8、REATETABLEtest.blogs(idINT(10)UNSIGNEDAUTO_INCREMENT,titleTEXT,contentTEXT,authorVARCHAR(45)DEFAULTNULL,PRIMARYKEY(id)ENGINE=InnoDBDEFAULTCHARSET=utf8;DROPTABLEIFEXISTSments;CREATETABLEments(idINT(10)UNSIGNEDAUTO_INCREMENT,blog_idINT(10)UNSIGNEDDEFAULTNULL,commentTEXT,authorVARCHAR(45)DEFAULTNULL,PR

9、IMARYKEY(id),KEYblog_ind(blog_id),CONSTRAINTcomments_ibfk_1FOREIGNKEY(blog_id)REFERENCESblogs(id)ONDELETECASCADEONUPDATECASCADE)ENGINE=InnoDBDEFAULTCHARSET=utf8;如上所示,定义的第一个表blog与前面的相同,我们只需注意一下第二个表就行了。本例中,表comments的字段保持不变,不同之处在于,这次它包含了如下所示的SQL语句:CONSTRAINTcomments_ibfk_1FOREIGNKEY(blog_id)REFERENCESb

10、logs(id)ONDELETECASCADEONUPDATECASCADE当然,这是负责博客更新和删除时,对其有关的评论进行级联更新和删除的。我们已经给外键blog_id指定了约束,现在上述的两个表之间的关系的完整性就可以完全在数据库级别来处理了,当然,在一些应用程序的性能方面可能会有些损失。下面我们将介绍如何轻松完成此项任务。四、外键约束的实际例子前面,我们已经定义了两个IndoDB表,并将其作为博客应用程序的构造块。现在,我们要做的是,每当有博客更新和删除时,同时更新和删除博客对应的所有评论。我们将通过具体的代码加以演示。因此,假设存储在blogs表中的唯一的博客数据需要更新,那么有关评

11、论也得同时更新,这时我们可以通过-UPDATE语句来完成这一任务,代码如下所示:UPDATEblogsSETid=2,title=Titleofthefirstblogentry,content=Contentofthefirstblogentry,author=JohnDoeWHEREid=1您可能猜到了,对第一个博客数据项的更新将自动地引起与该博客有关的评论的更新。现在,让我们利用如下所示的SQL查询来删除博客:DELETEFROMblogsWHEREid=2这时,MySQL会替我们删除有关的评论。现在,我们已经看到了外键约束在维护多个表的关系的一致性方面给我们带来的帮助。是不是很方便?还等什么,您也动手试一试吧五、小结在本文中,我们为向读者详细介绍了如何在更新和删除父表数据的同时,触发有关子表数据的级联更新和删除操作。如您所见,当使用InnoDB表的时候,借助于外键约束就可以轻松搞定这一过程。需要说明的是,到目前为止,对示例数据库表的操作,他们都是手工通过L命令进行的,然而,在基于web的环境中,则需要利用某勰务器端语言来艮MySQL打交道。其中,PHP就是一个不错的选择,所以,我们将在下-篇文章中讨论如何通过PHP5使用外键约束。

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!