Durch die DUPLICATES-Klausel (duplicates_clause) kann das Verhalten beim Auftreten von Schlüsselkollisionen gesteuert werden.
<duplicates_clause> ::= REJECT DUPLICATES | IGNORE DUPLICATES | UPDATE DUPLICATES
SQL-Anweisungen, in denen die DUPLICATES-Klausel verwendet wird, sind die CREATE-TABLE-Anweisung und die INSERT-Anweisung.
REJECT DUPLICATES oder keine DUPLICATES-Klausel |
Die CREATE TABLE-Anweisung scheitert, wenn Schlüsselkollisionen auftreten. |
IGNORE DUPLICATES |
Alle Zeilen, die beim Einfügen eine Schlüsselkollision hervorrufen, werden ignoriert. |
UPDATE DUPLICATES |
Alle Zeilen, die beim Einfügen eine Schlüsselkollision hervorrufen, überschreiben die Zeilen, mit denen sie kollidieren. |
Wenn eine Zeile mit dem Schlüssel der einzufügenden Zeile in der Basistabelle bereits existiert, sind folgende Fälle zu unterscheiden:
REJECT DUPLICATES oder keine DUPLICATES-Klausel |
Die INSERT-Anweisung scheitert. |
IGNORE DUPLICATES |
Die neue Zeile wird nicht eingefügt und die Bearbeitung der INSERT-Anweisung fortgesetzt. |
UPDATE DUPLICATES |
Die existierende Zeile wird durch die neue Zeile überschrieben und die Bearbeitung der INSERT-Anweisung wird fortgesetzt. |
Wenn bei einer INSERT-Anweisung mit Angabe von UPDATE DUPLICATES und Angabe eines QUERY-Ausdrucks mehr als eine Schlüsselkollision für den gleichen Schlüssel auftritt, kann nicht vorausgesagt werden, welchen Inhalt die entsprechende Zeile der Basistabelle nach Beendigung der INSERT-Anweisung besitzt.
Wenn bei einer INSERT-Anweisung mit Angabe von IGNORE DUPLICATES und Angabe eines QUERY-Ausdrucks mehr als eine Zeile der Ergebnistabelle den gleichen Schlüssel der Basistabelle liefert und wenn dieser zuvor in der Basistabelle noch nicht existierte, kann nicht vorausgesagt werden, welche Zeile in die Tabelle eingefügt wird.
Wenn durch den in der INSERT-Anweisung angegebenen Tabellennamen eine Tabelle ohne vom Benutzer definierten Schlüssel identifiziert wird, hat die Angabe einer DUPLICATES-Klausel keine Wirkung.