Mysql
 sql >> база данни >  >> RDS >> Mysql

Поведение на MySQL при АКТУАЛИЗИРАНЕ НА ДУБЛИРАН КЛЮЧ за множество УНИКАЛНИ полета

Помислете за

INSERT INTO table (a,b,c) VALUES (1,2,3)
    -> ON DUPLICATE KEY UPDATE c=c+1;

Ако a и b са UNIQUE полета, UPDATE се случва на a = 1 OR b = 2 . Също така, когато условие a = 1 OR b = 2 се среща от два или повече записа, актуализирането се извършва само веднъж.

Ето тук таблица с идентификатор и име UNIQUE полета

Id     Name     Value 
1      P        2 
2      C        3 
3      D        29 
4      A        6

Ако заявката е

INSERT INTO table (Id, Name, Value)
VALUES (1, C, 7);

тогава получаваме

Id     Name     Value 
1      P        2 
2      C        3 
3      D        29 
4      A        6
1      C        7

което нарушава уникалността на Id и Name. Сега с

INSERT INTO table (Id, Name, Value)
VALUES (1, C, 7)
ON DUPLICATE KEY UPDATE Value = 7;

получаваме

Id     Name     Value 
1      P        7 
2      C        7 
3      D        29 
4      A        6

Поведението на няколко клавиша е следното

UPDATE в ON DUPLICATE KEY UPDATE се изпълнява, ако един от UNIQUE поле е равно на стойността, която трябва да се вмъкне. Тук UPDATE се изпълнява на Id = 1 OR Name = C . Това е еквивалентно на

UPDATE table 
SET Value = 7
WHERE Id = 1 OR Name = C;

Ами ако искам само една актуализация за всеки ключ

Може да използва UPDATE изявление с LIMIT ключова дума

UPDATE table 
SET Value = 7
WHERE Id = 1 OR Name = C
LIMIT 1;

което ще даде

Id     Name     Value 
1      P        7 
2      C        3 
3      D        29 
4      A        6

Ами ако искам една актуализация само ако стойностите и за двата ключа съвпадат

Едно решение е ALTER TABLE и направете PRIMARY KEY (или уникалност) работят и в двете полета.

ALTER TABLE table 
DROP PRIMARY KEY,
ADD PRIMARY KEY (Id, Name);

Сега, на

INSERT INTO table (Id, Name, Value)
VALUES (1, C, 7)
ON DUPLICATE KEY UPDATE Value = 7;

получаваме

Id     Name     Value 
1      P        2 
2      C        3 
3      D        29 
4      A        6
1      C        7

тъй като не е намерен дубликат (и на двата ключа).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Друга UnicodeEncodeError при използване на метода pandas to_sql с MySQL

  2. как да изтриете дублиращи се редове от таблица в mysql

  3. MySQL:ГРЕШКА 1215 (HY000):Не може да се добави ограничение за външен ключ

  4. MySQL - Как да търся точно съвпадение на думи с LIKE?

  5. Функция MySQL LOG2() – Връщане на логаритъм на база 2 на стойност