Я хочу создать MySql-запрос для вставки в таблицу, и когда происходит дублирование, я хочу проверить существующую запись, чтобы определить, заменять ли или IGNORE. Когда определенное поле существующей записи равно 0, тогда выполните ЗАМЕНУ, в противном случае сделайте IGNORE. Как это можно сделать качественным способом?

0
brewphone 18 Дек 2019 в 19:02

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 - базы данных /

0
Krishna Jonnalagadda 18 Дек 2019 в 16:08

Предполагая, что ваш столбец «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, что, я думаю, то, что вы хотите.

Конечно, вы можете адаптировать его к вашим потребностям, не нужно обновлять все столбцы или использовать одну и ту же проверку для каждого столбца.

1
Pepper 18 Дек 2019 в 16:19