Rozważmy
INSERT INTO table (a,b,c) VALUES (1,2,3)
-> ON DUPLICATE KEY UPDATE c=c+1;
jeśli aib są UNIQUE
pola, UPDATE
występuje na a = 1 OR b = 2
. Również gdy warunek a = 1 OR b = 2
jest spełniony przez dwie lub więcej pozycji, aktualizacja jest wykonywana tylko raz.
Ex tutaj stół z Identyfikator i nazwisko UNIQUE
pól
Id Name Value
1 P 2
2 C 3
3 D 29
4 A 6
Jeśli zapytanie jest
INSERT INTO table (Id, Name, Value)
VALUES (1, C, 7)
wtedy otrzymujemy
Id Name Value
1 P 2
2 C 3
3 D 29
4 A 6
1 C 7
które naruszają wyjątkowość Identyfikator i nazwisko. Teraz z
INSERT INTO table (Id, Name, Value)
VALUES (1, C, 7)
ON DUPLICATE KEY UPDATE Value = 7
otrzymujemy
Id Name Value
1 P 7
2 C 7
3 D 29
4 A 6
Zachowanie na wielu klawiszy jest następujące
UPDATE
w ON DUPLICATE KEY UPDATE
przeprowadza się, jeżeli jeden z pola UNIQUE
równa wartości do wstawienia. Tutaj UPDATE
jest wykonywane na Id = 1 OR Name = C
.Jest to odpowiednik
UPDATE table
SET Value = 7
WHERE Id = 1 OR Name = C
Co jeśli chcę jedną aktualizację tylko dla zarówno klucz
można użyć UPDATE
oświadczenie z LIMIT
hasła
UPDATE table
SET Value = 7
WHERE Id = 1 OR Name = C
LIMIT 1;
które dadzą
Id Name Value
1 P 7
2 C 3
3 D 29
4 A 6
Co jeśli chcę jedną aktualizację tylko wtedy, gdy wartości dla obu klawiszy są dopasowane
Jednym z rozwiązań jest ALTER TABLE
i uczynić PRIMARY KEY
(lub wyjątkowość) działa na obu polach.
ALTER TABLE table
DROP PRIMARY KEY
ADD PRIMARY KEY (Id, Name);
Teraz na
INSERT INTO table (Id, Name, Value)
VALUES (1, C, 7)
ON DUPLICATE KEY UPDATE Value = 7
otrzymujemy
Id Name Value
1 P 2
2 C 3
3 D 29
4 A 6
1 C 7
ponieważ bez dwóch egzemplarzach (po obu klawiszy) została znaleziona.
Jeśli masz tabelę z dwoma kolumnami jako klucz podstawowy, a chcą pracować z ON duplikat KEY, należy unikać dodać unikatowy indeks na kolumnie PK, ponieważ jeśli będzie aktualizować pk1 lub pk2 są obecne w wartościach. – jloria
Czy istnieje sposób na unikalne ograniczenie w drugiej kolumnie, ale czy ma to wpływ na tę duplikat operacji aktualizacji klucza? Oznacza to, że wstawienie lub aktualizacja zakończy się niepowodzeniem, jeśli nie zostanie spełnione ograniczenie unikalności. – CMCDragonkai