в INSERT ON DUPLICATE KEY UPDATE, определить, используется ли значение по умолчанию при указании значений вставки

Предположим, у меня есть этот запрос (в сочетании с PHP)

INSERT INTO table (field1, field2, field3) VALUES (a, $field2, c) ON DUPLICATE KEY UPDATE field2 = IF(VALUES(field2) [ends up using DEFAULT(field2)], field2, VALUES(field2))

где $ field2 может быть

а. допустимое нормальное значение для вставки в field2 или
б. Строка «DEFAULT (field2)», которая вставляет любое значение по умолчанию для mysql поля (предположим, по умолчанию 22)

Теперь моя цель — сделать так, чтобы в части запроса UPDATE:

если произошел случай а.), то обновите столбец, указав значение $ field2, указанное пользователем. в противном случае, если произошел случай b.), оставьте строку как есть (т.е. не изменяйте данные)

в основном мне нужно заполнить часть запроса «[заканчивается использованием DEFAULT (field2)]», чтобы выполнить вышеуказанное

Теперь мой первый импульс заключается в выполнении ON DUPLICATE KEY UPDATE field2 = IF(VALUES(field2) = DEFAULT(field2), field2, VALUES(field2))

но тогда это также приведет к тому, что строка останется такой же, как и в случае а.), в котором $ field2 = 22, поскольку 22 является значением по умолчанию для mysql, следовательно, VALUES (field2) = DEFAULT (field2) равно TRUE, несмотря на тот факт, что в случае а.) мы хотим, чтобы 22 соответственно обновлялось вместо сохранения текущего значения

другими словами, как мне изменить этот запрос, чтобы он выполнял обновление только в том случае, если в него было явно вставлено значение, но не выполнял обновление, если «DEFAULT (field2)» в конце концов используется

0

Решение

Вы можете запустить MySQL в строгом режиме и установить для этого столбца значение NOT NULL определение. Затем вместо попытки вставить значение по умолчанию в столбец, когда этот случай срабатывает, вы можете вставить NULL, Это может привести к ошибке, что приведет к сбою запроса.

Я думаю, что это немного глупо, хотя. Мне нужно было бы лучше понять ваш сценарий использования, чтобы действительно увидеть, следует ли вам использовать другой шаблон вызова в целом.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]