Запрос массового обновления в Mysql
Рассмотрим следующую таблицу (T) в MySQL.
id c1 c2
1 10 100
2 20 200
3 30 300
Предположим, я хочу обновить "c1" строки с id=2. Я могу сделать следующее.
UPDATE T set col1=20 where id=1;
Предположим, я хочу массовое обновление.
INSERT INTO T(id,c1) VALUES (1,20),(2,40) ON DUPLICATE KEY UPDATE c1=VALUES(c1);
Но это даст вам ошибку, если значение по умолчанию для "c2" не установлено в SCHEMA.
Есть ли другой способ решить задачу?
1 ответ
Ошибка происходит, когда вы INSERT
значение в первый раз, что означает отсутствие дублирующего ключа для обновления. Ваш столбец c2 не обнуляется и не имеет значения по умолчанию. Чтобы исправить это либо
- сделать C2 обнуляемым или
- укажите значение по умолчанию для c2 или
- укажите значение для c2 в вашем операторе вставки
Если вы не хотите вставлять в таблицу, вставьте значения во временную таблицу, затем используйте оператор обновления и объедините две таблицы.