Duplikowanie i ignorowanie na wstawkach MySQL

Klucze podstawowe tabeli MySQL i unikalne indeksy zapobiegają dodawaniu do tabeli wielu wierszy z tym samym indeksem. Jeśli spróbujesz wstawić zduplikowany wiersz ze standardową instrukcją INSERT, napotkasz błąd i wstawienie się nie powiedzie.

MySQL zapewnia kilka alternatyw dla standardowej instrukcji INSERT, a każda z nich obsługuje nieco inne wiersze: "INSERT IGNORE", "INSERT ... ON DUPLICATE KEY UPDATE" i "REPLACE."

Klucze podstawowe i unikalne indeksy

Podstawowe indeksy kluczy i ograniczenia indeksu "UNIQUE" wymagają, aby każdy wiersz zawierał unikalną wartość w kolumnach indeksu, umożliwiając identyfikację każdego wiersza za pomocą klucza podstawowego lub wartości w kolumnie (kolumnach) indeksu UNIQUE.

Jeśli normalny INSERT spróbuje wstawić wiersz zawierający zduplikowaną wartość w kluczu podstawowym lub indeksu ograniczenia UNIQUE, wstawienie nie powiedzie się, prawdopodobnie wycofując całą transakcję.

INSERT IGNORE

INSERT IGNORE wstawi wiersze w taki sam sposób, jak INSERT, ale z tym wyjątkiem, że zignoruje wiersze ze zduplikowanymi wartościami i będzie kontynuował wykonywanie bez tworzenia błędu. Każdy wiersz zawierający zduplikowaną wartość nie zostanie wstawiony; na przykład:

WSTAW IGNORE IN my_table (unique_index_column, other_column) VALUES (1, "inna wartość");

INSERT ... ON DUPLICATE KEY UPDATE

INSERT ... ON DUPLICATE KEY UPDATE spowoduje wstawienie dowolnych wierszy, które nie są duplikatami. Jednakże, gdy napotka duplikat wiersza, wykona aktualizację w oryginalnym wierszu; na przykład:

INSERT INTO my_table (unique_index_column, other_column) VALUES (1, "inna wartość") ON DUPLICATE KEY UPDATE inna_kolumn = "duplikowana wartość aktualizacji";

ZASTĄPIĆ

REPLACE działa tak samo jak INSERT, z tym że po napotkaniu zduplikowanego wiersza usuwa oryginalny wiersz, a następnie kontynuuje wstawianie. Każdy wiersz z duplikatem unikalnej wartości indeksu zastąpi wiersz, który pierwotnie zawierał wartość; na przykład:

REPLACE INTO my_table (unikalny_indeks_kolumn, inny_kolumn) WARTOŚCI (1, "inna wartość")

Popularne Wiadomości