Dupliceren en negeren op MySQL-bijlagen
MySQL-tabel primaire sleutels en unieke indexen voorkomen dat meerdere rijen met dezelfde index aan de tabel worden toegevoegd. Als u probeert een dubbele rij in te voegen met een standaard INSERT-instructie, treedt er een fout op en mislukt de invoeging.
MySQL biedt verschillende alternatieven voor de standaard INSERT-instructie en elk behandelt dubbele rijen enigszins anders: "INSERT IGNORE, " "INSERT ... OP DUPLICATE KEY UPDATE" en "REPLACE."
Primaire sleutels en unieke indexen
Primaire sleutelindexen en "UNIQUE" -indexbeperkingen vereisen dat elke rij een unieke waarde bevat in de indexkolom (men), waardoor elke rij kan worden geïdentificeerd aan de hand van zijn primaire sleutel of de waarde in de UNIQUE indexbeperkingskolom (len).
Als een normale INSERT probeert een rij in te voegen die een dubbele waarde in de primaire sleutel of de UNIQUE-beperkingsindex bevat, mislukt de invoeging, waardoor de gehele transactie mogelijk wordt teruggedraaid.
PLAATS IGNORE
INSERT IGNORE zal rijen op dezelfde manier invoegen als INSERT, maar met de uitzondering dat het rijen met dubbele waarden zal negeren en de uitvoering zal voortzetten zonder een fout te creëren. Elke rij met een dubbele waarde wordt niet ingevoegd; bijvoorbeeld:
PLAATS IGNORE IN my_table (unique_index_column, other_column) VALUES (1, 'andere waarde');
INVOEGEN ... OP DUPLICATE SLEUTEL UPDATE
INSERT ... OP DUPLICATE KEY UPDATE voegt niet-dubbele rijen als normaal in. Wanneer het echter een dubbele rij tegenkomt, voert het een UPDATE uit op de oorspronkelijke rij; bijvoorbeeld:
INSERT IN my_table (unique_index_column, other_column) VALUES (1, 'other value') OP DUPLICATE KEY UPDATE other_column = 'dubbele update-waarde';
VERVANGEN
REPLACE werkt hetzelfde als INSERT, behalve dat wanneer het een dubbele rij tegenkomt, het de oorspronkelijke rij verwijdert en vervolgens doorgaat met de invoeging. Elke rij met een dubbele unieke indexwaarde vervangt de rij die oorspronkelijk de waarde bevatte; bijvoorbeeld:
VERVANG IN my_table (unique_index_column, other_column) VALUES (1, 'andere waarde')