Неверное условие в предложении WHERE ОБНОВЛЕНИЯ MySQL - обновлено ВСЕ - вместо НИЧЕГО - PullRequest
2 голосов
/ 17 октября 2019

Что я хотел написать:

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 '" оценивается как "ИСТИНА" ???

Пожалуйста, дайте мне знать - обычно, для больших / опасных обновлений, я сделаю SELECT илиEXPLAIN сначала - просто чтобы быть уверенным, что возвращаемая SCOPE разумна - этот небольшой кусочек кода, я просто изменяю cust_id - но - я случайно удалил "=" - и когда я его снова набрал - я (очевидно)сделал опечатку ... любая помощь / совет будет оценен !!!

Спасибо!

1 Ответ

3 голосов
/ 17 октября 2019

Если предположить, что все ваши значения идентификатора клиента cust_id будут либо меньше , либо больше , чем целое число 11656165, то при приведении правил следующее выражение будет положительным / отрицательнымчисло, которое также оценивается как истинное, например,

ords.cust_id - '11656165'

Например:

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

и:

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

Урок здесь заключается в проверке вашего кода передзапустить его. В этом случае опечатка все еще приводила к действительному запросу на обновление, который мог повредить ваши данные.

...