Zvažte
INSERT INTO table (a,b,c) VALUES (1,2,3)
-> ON DUPLICATE KEY UPDATE c=c+1;
Pokud a a b jsou UNIQUE pole, UPDATE vyskytuje se na a = 1 OR b = 2 . Také když podmínka a = 1 OR b = 2 je splněna dvěma nebo více položkami, aktualizace se provede pouze jednou.
Příklad zde tabulka tabulky s ID a názvem UNIQUE pole
Id Name Value
1 P 2
2 C 3
3 D 29
4 A 6
Pokud je dotaz
INSERT INTO table (Id, Name, Value)
VALUES (1, C, 7);
pak dostaneme
Id Name Value
1 P 2
2 C 3
3 D 29
4 A 6
1 C 7
což porušuje jedinečnost Id a Name. Nyní s
INSERT INTO table (Id, Name, Value)
VALUES (1, C, 7)
ON DUPLICATE KEY UPDATE Value = 7;
dostáváme
Id Name Value
1 P 7
2 C 7
3 D 29
4 A 6
Chování na více klávesách je následující
UPDATE v ON DUPLICATE KEY UPDATE se provede, pokud jeden z UNIQUE pole se rovná hodnotě, která má být vložena. Zde UPDATE se provádí na Id = 1 OR Name = C . Je ekvivalentní k
UPDATE table
SET Value = 7
WHERE Id = 1 OR Name = C;
Co když chci pouze jednu aktualizaci pro kterýkoli klíč
Lze použít UPDATE příkaz s LIMIT klíčové slovo
UPDATE table
SET Value = 7
WHERE Id = 1 OR Name = C
LIMIT 1;
který dá
Id Name Value
1 P 7
2 C 3
3 D 29
4 A 6
Co když chci jednu aktualizaci, pouze pokud se hodnoty pro oba klíče shodují
Jedním z řešení je ALTER TABLE a vytvořte PRIMARY KEY (nebo jedinečnost) práce na obou polích.
ALTER TABLE table
DROP PRIMARY KEY,
ADD PRIMARY KEY (Id, Name);
Nyní, na
INSERT INTO table (Id, Name, Value)
VALUES (1, C, 7)
ON DUPLICATE KEY UPDATE Value = 7;
dostáváme
Id Name Value
1 P 2
2 C 3
3 D 29
4 A 6
1 C 7
protože nebyl nalezen žádný duplikát (na obou klíčích).