Я хочу создать MySql-запрос для вставки в таблицу, и когда происходит дублирование, я хочу проверить существующую запись, чтобы определить, заменять ли или IGNORE. Когда определенное поле существующей записи равно 0, тогда выполните ЗАМЕНУ, в противном случае сделайте IGNORE. Как это можно сделать качественным способом?
2 ответа
Создайте уникальный составной индекс по номеру и имени.
Alter table table1 Add unique index idx_unq(`number`,`name`);
Затем вставьте Ignore INTO table1(number,name) VALUES(num, name);
Это должно предотвратить вставку дубликата в таблицу.
Полезная ссылка для http://www.sitepoint.com/use-unique- индексирует - MySQL - базы данных /
Предполагая, что ваш столбец «check» (тот, который должен иметь значение 0 для обновления), вы можете сделать что-то вроде этого:
INSERT INTO table (id, c2, c3, c4)
VALUES
(1, 'val2', 'val3', 'val4')
ON DUPLICATE KEY UPDATE
c2 = IF(c2 = 0, VALUES(c2), c2),
c3 = IF(c2 = 0, VALUES(c3), c3),
c4 = IF(c2 = 0, VALUES(c4), c4);
Это в основном INSERT ... IGNORE
if c2 != 0
, а в остальном INSERT ... UPDATE
, что, я думаю, то, что вы хотите.
Конечно, вы можете адаптировать его к вашим потребностям, не нужно обновлять все столбцы или использовать одну и ту же проверку для каждого столбца.
Новые вопросы
mysql
MySQL - это бесплатная система управления реляционными базами данных с открытым исходным кодом (RDBMS), использующая язык структурированных запросов (SQL). НЕ ИСПОЛЬЗУЙТЕ этот тег для других БД, таких как SQL Server, SQLite и т. Д. Это разные БД, которые все используют свои собственные диалекты SQL для управления данными.