我想写的是什么
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”?
请让我知道-通常,对于大的/危险的更新,我将首先执行SELECT
或EXPLAIN
-为确保返回的SCOPE是合理的-这部分代码,我只是更改了cust_id-但是-我不小心删除了“ =”-并且当我重新键入它时-我(显然)输入了错误...任何帮助/建议将不胜感激!!!
谢谢!
答案 0 :(得分:3)
假设您所有的cust_id
客户ID值都比整数11656165
少 或更大,然后通过强制转换以下表达式将是一个正数/负数,也将计算为真,例如
ords.cust_id - '11656165'
例如:
SELECT 11650000 - '11656165'; -- returns -6165
和:
SELECT
IF(11650000 - '11656165', 'TRUE', 'FALSE') -- returns TRUE
这里的课程是在运行代码之前检查代码。在这种情况下,输入错误仍然会导致有效的更新查询,这可能已损坏您的数据。