模式下的MySQL删除
模式下的MySQL删除
我正在使用MySql 5.7
DROP TABLE IF EXISTS `session`; CREATE TABLE `session` ( `Id` varchar(128) NOT NULL, `Browser` varchar(128) NOT NULL, `IpAddress` varchar(128) NOT NULL, `UserId` varchar(128) NOT NULL, `CreatedAt` datetime DEFAULT NULL, `ModifiedAt` datetime DEFAULT NULL, `CreatedBy` varchar(256) DEFAULT NULL, `ModifiedBy` varchar(256) DEFAULT NULL, PRIMARY KEY (`Id`) ); DELETE FROM session WHERE Id IN (SELECT * FROM (SELECT Id FROM session WHERE CreatedAt > NOW()) AS temp);
我收到了一个错误:错误码:1175。您正在使用安全更新模式,并且尝试更新一个没有使用关键列的WHERE的表。要禁用安全模式,请在首选项-> SQL Editor中切换选项并重新连接。0.000秒
我认为禁用安全更新不是一个好主意。关闭保存模式在这里找到答案 也许有其他的解决方案。有什么想法吗?
添加虚拟条件!= \'\' ,删除工作
DELETE FROM session WHERE Id !='' AND Id IN (SELECT * FROM (SELECT Id FROM session WHERE Browser = "Mozilla") AS temp);
选择*from session;
虚拟条件,例如Id IS NOT NULL或Id IN(“some_dummy_id_here”)不起作用
感谢@ tim-biegeleisen的帮助!
admin 更改状态以发布 2023年5月20日
或许您可以尝试向 WHERE
子句添加一个虚拟条件,使用主键,例如:
DELETE FROM session WHERE Id <> '' AND Id IN (SELECT * FROM (SELECT Id FROM session WHERE CreatedAt > NOW()) AS temp);
假设主键列 Id
始终不为空字符串,那么添加该条件不会影响您的删除逻辑。
正如您提到的,您还可以通过以下方式禁用会话中的安全模式:
SET SQL_SAFE_UPDATES = 0;
如果您非常谨慎,您甚至可以在执行删除查询后重新打开安全更新:
SET SQL_SAFE_UPDATES = 1;