Якщо я вставляю дані в таблицю з наступними полями:
serialNumber активна країна
Мені потрібно лише вставити повторювані серійні номери, якщо активний немає.
Так, наприклад: я хочу вставити запис із serialNumber 1234.
Якщо серійний номер не існує вСтіл йти вперед і додати його. Якщо він вже існує, перевірте, чи є значення "активним" активним, "так", тоді не додавайте нову записку, якщо вона ніколи не додаватимете запис.
Будь-які ідеї, як це досягти в MYSQL?
Відповіді:
1 для відповіді № 1Ви можете використовувати оператор ON DUPLICATE KEY після запиту INSERT INTO, щоб оновити рядок, якщо він вже існує. Документація: https://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html
INSERT INTO table (serialNumber , active, country) VALUES (1010, "no", "FR")
ON DUPLICATE KEY UPDATE active="yes";
2 для відповіді № 2
Якщо у таблиці відсутні необхідні унікальні ключі, і у вас немає дозволу або не потрібно встановлювати потрібні вам ключі, ви можете скористатися цією альтернативою:
INSERT INTO `table1`
(`field1`,
`field2`)
SELECT value1,
value2
FROM (SELECT 1) t_1
WHERE NOT EXISTS (SELECT 1
FROM `table1`
WHERE `field1` = value1
AND `field2` = value2);
Для запитання можна написати як
INSERT INTO `activity`
(`serialNumbers`,
`active`)
SELECT 1234,
"yes"
FROM (SELECT 1) t_1
WHERE EXISTS (SELECT 1
FROM `activity`
WHERE `serialNumbers` = 1234
AND `active` = "no");
0 для відповіді № 3
Ви можете скористатись insert ... on duplicate key update
в MySQL. Це схоже на MERGE, що використовується в інших базах даних SQL, але MySQL не забезпечує випис MERGE, тому це найкраще наступне.
INSERT INTO TABLE (serialNumber, active, country)
VALUES (1234, "active", "GB") ON DUPLICATE KEY UPDATE country = "ND";
Також використовуйте INSERT IGNORE
якщо ви не хочете створювати помилки.