MySQL UPDATE的WHERE子句中的条件无效-更新了所有内容-而不是NOTHING

时间:2019-10-17 01:55:32

标签: mysql mariadb where-clause

我想写的是什么

UPDATE items_ordered_list ords
    SET ords.last_ordered='2019-10-16 10:49:23'
    WHERE ords.cust_id='11656165';

实际上写道:

UPDATE items_ordered_list ords
    SET ords.last_ordered='2019-10-16 10:49:23'
    WHERE ords.cust_id-'11656165';

WHERE子句不是逻辑表达式,没有给我带来某种错误,它只是很高兴地更新了所有内容。我有一个备份-并且有一种恢复先前值的方法-但是-“-”与键盘上的“ =”相邻-我花了一段时间才看到它。

我使用SELECT / LIMIT语句进行了尝试-的确足够-它返回了与我在LIMIT中设置的记录一样多的记录...

这是缺陷还是“设计”?有什么方法可以将“ ords.cust_id-'11656165'”评估为“ TRUE”?

请让我知道-通常,对于大的/危险的更新,我将首先执行SELECTEXPLAIN-为确保返回的SCOPE是合理的-这部分代码,我只是更改了cust_id-但是-我不小心删除了“ =”-并且当我重新键入它时-我(显然)输入了错误...任何帮助/建议将不胜感激!!!

谢谢!

1 个答案:

答案 0 :(得分:3)

假设您所有的cust_id客户ID值都比整数11656165 更大,然后通过强制转换以下表达式将是一个正数/负数,也将计算为真,例如

ords.cust_id - '11656165'

例如:

SELECT 11650000 - '11656165'; -- returns -6165

和:

SELECT
    IF(11650000 - '11656165', 'TRUE', 'FALSE') -- returns TRUE

这里的课程是在运行代码之前检查代码。在这种情况下,输入错误仍然会导致有效的更新查询,这可能已损坏您的数据。