Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Automatische Inkrementierung bei doppelter MySQL-Einfügung verhindern

Sie könnten Ihr INSERT so ändern:

INSERT INTO tablename (tag)
SELECT $tag
FROM tablename
WHERE NOT EXISTS(
    SELECT tag
    FROM tablename
    WHERE tag = $tag
)
LIMIT 1

Wobei $tag ist das Tag (richtig in Anführungszeichen oder natürlich als Platzhalter), das Sie hinzufügen möchten, falls es noch nicht vorhanden ist. Dieser Ansatz löst nicht einmal ein INSERT (und die anschließende Verschwendung von Autoinkrementen) aus, wenn das Tag bereits vorhanden ist. Sie könnten sich wahrscheinlich schöneres SQL einfallen lassen, aber das obige sollte ausreichen.

Wenn Ihre Tabelle richtig indiziert ist, ist das zusätzliche SELECT für die Existenzprüfung schnell und die Datenbank muss diese Prüfung sowieso durchführen.

Dieser Ansatz funktioniert jedoch nicht für das erste Tag. Sie könnten Ihre Tag-Tabelle mit einem Tag versehen, von dem Sie glauben, dass es immer verwendet wird, oder Sie könnten eine separate Prüfung auf eine leere Tabelle durchführen.