关联表记录的删除操作_第1页
关联表记录的删除操作_第2页
关联表记录的删除操作_第3页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1. 关联表记录的删除操作关联型数据表通过外键关系表示相互关联,比如会员等级和会员、会员和会员积分、积分日志、地区表(自关联)、文章分类和文章、商品分类和商品等,因此在系统中关联型数据表是非常常见的形式,掌握好对关联型数据表的处理至关重要。根据业务需求的不同,对于关联型数据表的数据删除也采用不同的策略,通常有3种方式:级联删除、限制删除、置空或重置为缺省值。级联删除以会员和会员积分日志为例,会员积分日志通常需要选定一个会员,查看该会员的日志信息,当该会员记录被删除时,积分日志就没有查看的入口,称之为“垃圾”数据。因此在删除会员时,同时也把该会员的积分日志也删除。限制删除以会员等级和会员为例,在

2、本系统中,会员等级包含了根据积分自动计算会员等级的非特殊会员组,非特殊会员组与会员不是关联关系,此处会员等级仅指代特殊会员组。当会员等级被删除时,可以删除属于该会员等级的会员吗?显示不能,而且是相当危险的一种行为,会员信息的丢失,属于网站的重大工作事故。如何解决会员等级的删除呢?解决思路是:如果没有属于此会员等级的会员,那么删除该会员等级对系统就没有任何影响了,所以在删除会员等级时,需要检查会员表是否有属于此会员等级的数据,如果没有,则允许删除,否则限制删除。直接提示不能删除,显然对用户不是很友好,如何能提高友好性呢?做为课外题,大家可以思考一下。置空setnull/重置为缺省值setdefa

3、ult置空是删除数据时,将关联数据表的外键设置为null或者为缺省值。置空也是保留关联数据的一种方法,通常用于外键可以不设置或者对于未设置的数据有相关处理,比如QQ的好友和组,好友可以分配到特定组里,未分组的好友都在“我的好友”里,当删除组时,并不会删除组里的好友,好友会在“我的好友”里显示。了解了关联数据的删除逻辑后,怎样实现呢?方法有很多,这里介绍2种方式:通过外键约束和删除关联表的SQL语句。外键约束:大部分DBMS都支持外键约束,Mysql中只有Innodb类型的数据表才支持,创建表时通过建立外键,并设置约束方法。MySQL创建关联表可以理解为是两个表之间有个外键关系,但这两个表必须满

4、足三个条件:1 .两个表必须是InnoDB数据引擎2 .使用在外键关系的域必须为索引型(Index)3 .使用在外键关系的域必须与数据类型相似Mysql创建关键表的示例(图书馆借书和成员):CreateTABLEIFNOTEXISTS'books'('book_id'smallint(6)NOTNULLauto_incrementCOMMENT'书籍编号','book_name'char(20)NOTNULLCOMMENT'书名','book_borrower'char(7)defaultNULLC

5、OMMENT'借阅者','book_borrower_time'datedefaultNULLCOMMENT'借阅时间,PRIMARYKEY('book_id'),INDEX(book_borrower)ENGINE=InnoDB;CreateTABLEIFNOTEXISTS'parts'('part_id'smallint(6)NOTNULLCOMMENT'成员编号','part_name'varchar(6)NOTNULLCOMMENT'成员名','

6、;part_mail'varchar(50)NOTNULLCOMMENT'邮箱','part_pass'varchar(20)NOTNULLCOMMENT'密码',PRIMARYKEY('part_id'),FOREIGNKEY(part_name)REFERENCES00ks(book_borrower)ondeletecascadeonupdatecascade)ENGINE=InnoDB分析一下books表和parts表,选择InnoDB为表引擎。而parts表的part_name字段为外键,关联到books表的bo

7、ok_borrower字段.注意两个字段分别是char和varchar都是字符串类型。ondeletecascade意思为当books表有相关记录删除时,那parts表也会跟着删除相关联的记录.理论上parts表的part_name字段也应该要创建索引才对,但实验证创建关联后自动索引了.不同DBMS支持的约束不同,Mysql5.0支持cascade(级联操作)、restrict(限制操作),不写约束条件表示不进行任何操作(垃圾数据)。与ondelete(删除操作)对应的还有onupdate(当关联主表的关联字段内容更新时)的处理,请大家思考其中的业务逻辑。Sql语句删除多表数据1、通过多条SQ

8、L语句删除先删除子表数据,再删除主表数据,为保证数据完整性,通常启动事务来处理,如果要支持事务,也需要InnoDb的数据表类型。2、在一条SQL语句中删除delete语法:DELETELOW_PRIORITYQUICKFROMtable_nameWHEREwhere_definitionORDERBYLIMITrowsorDELETELOW_PRIORITYQUICKtable_name.*,table_name.*FROMtable-referencesWHEREwhere_definitionorDELETELOW_PRIORITYQUICKFROMtable_name.*,table_n

9、ame.*USINGtable-referencesWHEREwhere_definition示例代码:1 .删除一个表中的数据deletefromdepartmentwherename='AssetManagement'2 .删除两个表中的数据deleteemployee,employeeSkillsfromemployee,employeeSkills,departmentwhereemployee.employeeID=employeeSki11s.employeeIDandemployee.departmentID=department.departmentID='Finance'3 .删除两个表中的数据,用using语法deletefromemployee,employeeSkillsusingemployee,employeeSkil

温馨提示

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

评论

0/150

提交评论