|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
“MySQL实际上是一个数据库家族,你可以从选择一个并将其配置成可以满足你的大多数情况,”开源顾问公司Ethiqa的总裁如此表示,“因此,你可以在开始的时候选择一个小巧的版本产品,以后再根据需要来对其进行性能或大小上的扩展。”数据在这篇文章里我要形貌一下怎样从表格里删除列,要删除的这些列同时还要依附于其他表格的尺度。要办理这个成绩就必要一个很伶俐并且完整恪守SQL92子查询声明的使用程序。
我必需提示读者的是,只管查询大概会恪守SQL的尺度,可是浩瀚的数据库临盆商会以分歧的句法撑持完成SQL。以下这个办理计划应当合适于年夜多半数据库;可是,假如你的了局有收支,就仍是应当检察一下文档。同时,因为这个查询要处置DELETE声明,以是你应当在将其使用于实在的临盆情况之前在实行数据长进行测试。
必要更多的背景信息?
检察这些文章就可以疾速上路:
《SQL基本I查数据查询》触及到了DELETE查询的利用。
《利用SQL子选项来兼并查询》申明子选项查询可以削减对数据库哀求的数目,并供应了例子。
《SQL基本:查询多个表》供应了更多关于子选项的信息,还讲到了利用单个查询就可以会见多个表格的多种其他办法。
宠物店的例子
要注释怎样举行这类范例的列删除,我会利用以下这个数据库的表格,该数据库叫做PetStore,并包括有清单(inventory)信息。在叫做“种类(breed)”的表A里,我存储有每种植物的信息和宠物店库存的信息。在叫做“清单”的表B里,包括有商铺里特定植物的信息。
在这个例子里,我们先假定商铺把整窝Shitzu小狗都卖完了。我可使用breed表格里的breed_id字段来删除Shitzu清单里的一切项目,就像如许:
DELETEFROMinventoryWHEREbreed_idIN
(SELECTbreed_idFROMbreedWHEREbreed_name=‘Shitzu’);
起首,我要指定必要删除纪录的表格,在这里是清单表格。然后再将辨认字段breed_id同子选项子句的了局重复比对。我晓得要找的是Shitzus,以是就可以间接删失落他们,而不必再在独自的哀求里查询breed_id。
我必需要告诫你的是,以这类体例利用DELETE声明是伤害的,只要在你对数据库的布局很熟习的情形下才干利用这些声明。DELETE查询会从受影响的表格里删撤除全体列,你应当晓得这对你所办理着的数据意味着甚么。有个好举措是利用SELETE*这个短语替换DELETE关头字来对DELETE声明的子查询了局举行测试,如许就可以包管了局里含有你要删除的一切器材,就像如许:
SELECT*FROMinventoryWHEREbreed_idIN
(SELECTbreed_idFROMbreedWHEREbreed_name=‘Shitzu’);
DELETE和JOIN联用
有人问到懂得决这个成绩另外一个大概的举措:把JOIN子句和DELETE声明团结利用。因为之前没有利用过这类办法,我就研讨了一下,发明SQLServer的文档声明撑持这个办法,只管它不切合SQL92。在经由测试和扣问各类数据库平台的内行以后,我发明把DELETE和JOIN声明团结利用在我测试过的任何平台上都行欠亨。
从多个表格里一次删除
以上的办理计划还没有注释怎样利用父表从多个子内外删除信息。可是SQL92标准里没有供应完成这项义务的尺度办理计划。
DELETE的声明不克不及把多个表格作为一个参数承受。作为一个具有损坏性的查询,这能包管在命令要被实行的中央不会呈现歧义。别的,这个限定避免了在单个声明内将AND和多个子查询联用。假如测试SELECT声明的了局用以反省DELETE查询将要影响到的是哪些数据,你会发明SELECT会前往多个表格的清单,DELETE不会影响到的多个子查询不在个中。
有良多大概的办法可以满意你的需求,比方在表格里创立一个字段,用以指明该项目是不是为举动的。大概,你可使用一些数据库里的预存程序在每一个所需的DELETE查询里迭代。
DBaaS向客户提供了许多与其他云服务相类似的优势:一个灵活的、可扩展的MySQL学习教程、按需服务的平台,它以自助服务和便捷管理为导向,可以对环境中的资源进行调配。 |
|