栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

在安全模式下删除mysql

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

在安全模式下删除mysql

到处搜寻,最流行的答案似乎是“只关闭安全模式”:

SET SQL_SAFE_UPDATeS = 0;DELETE FROM instructor WHERe salary BETWEEN 13000 AND 15000;SET SQL_SAFE_UPDATeS = 1;

老实说,我不能说我曾经养成以安全模式运行的习惯。不过,我对这个答案并不完全满意,因为它只是假设您每次遇到问题时都应该更改数据库配置。

因此,您的第二个查询离标记更近了,但是又遇到了另一个问题:MySQL对子查询施加了一些限制,其中之一是,您不能在从子查询中选择表时修改表。

引用MySQL手册《子查询限制》:

通常,您不能修改表并在子查询中从同一表中选择。例如,此限制适用于以下形式的语句:

DELETE FROM t WHERe ... (SELECt ... FROM t ...);UPDATe t ... WHERe col = (SELECT ... FROM t ...);{INSERT|REPLACe} INTO t (SELECT ... FROM t ...);

例外:如果对FROM子句中的已修改表使用子查询,则上述禁止条件不适用。例子:

UPDATe t ... WHERe col = (SELECT * FROM (SELECt ... FROM t...) AS _t

…);

此处,FROM子句中子查询的结果存储为临时表,因此,在更新到t时,已经选择了t中的相关行。

最后一点就是您的答案。在临时表中选择目标ID,然后通过引用该表中的ID进行删除:

DELETe FROM instructor WHERe id IN (  SELECt temp.id FROM (    SELECt id FROM instructor WHERe salary BETWEEN 13000 AND 15000  ) AS temp);

SQLFiddle演示。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/670120.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号