我有一个表,用作从另一个表中查找外键。该表非常简单,包含一个ID列,其中包含主键和JSON列。我想从这张表中删除被遗弃的条目。
我试着运行这个脚本:
DELETE
FROM `ate`.`test_configuration`
WHERE `ate`.`test_configuration`.`ID` NOT IN (SELECT DISTINCT `ate`.`index`.`TestID` from `ate`.`index`);但是遇到了一个错误,说明我没有使用where子句,该子句使用key列:
错误代码: 1175。您正在使用安全更新模式,并且尝试更新一个表,但没有使用键列禁用安全模式的位置,在Preferences -> SQL中切换该选项并重新连接。
这令人困惑,因为where子句确实使用了主键列。我知道,我可以disable safe mode as part of my script作为一个解决办法,但我仍然想了解为什么我要得到这个错误。如果可能,我想避免不安全的更新。
发布于 2017-03-22 14:42:36
我认为优化器只是不能有效地使用索引来进行这样的查询--所以它会进行全表扫描。
test_configuration中有多少行,其中有多少行将被删除?
(您可能会尝试使用索引提示来强制优化器在查询中使用索引,只是不确定您的mysql版本是否支持索引)。
https://stackoverflow.com/questions/42953398
复制相似问题