Запрос массового обновления в 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 в вашем операторе вставки

Если вы не хотите вставлять в таблицу, вставьте значения во временную таблицу, затем используйте оператор обновления и объедините две таблицы.

Другие вопросы по тегам