Wie erzwinge ich, dass MySQL 0 als gültigen Wert für die automatische Inkrementierung verwendet
Lange Geschichte kurz, ich habe eine SQL Datei, die ich importieren möchten als skel
style-Datei, so wird diese wiederholt durchgeführt werden, programmgesteuert. Ich kann Bearbeiten Sie die SQL-Datei, aber ich wollen, aber ich möchte lieber nicht berühren Sie die Anwendung selbst.
Diese Anwendung verwendet userid = 0
vertreten die anonymen Benutzer. Es hat auch einen entsprechenden (leeren) Eintrag in der Datenbank zu repräsentieren, dieser 'user'. Also, die Zeile in meiner skel.sql
sieht ungefähr so aus:
INSERT INTO `{{TABLE_PREFIX}}users` VALUES (0, '', '', '', 0, 0, 0, '', '', 0, 0, 0, 0, 0, NULL, '', '', '', NULL);
Das problem mit diesem ist, dass uid
ist ein auto_increment
Feld, für die, technisch 0
ist ein Ungültiger Wert. Oder wenigstens, wenn man es auf 0, Sie sind im Grunde sagen, "MySQL", "Bitte legen Sie die nächste id in dieses Feld ein."
Nun, ich nehme an, ich könnte INSERT
dann ein UPDATE
Abfrage in meine SQL-Datei, aber gibt es eine Möglichkeit zu sagen, MySQL im Allgemeinen, ja, eigentlich möchte ich einfügen 0
in diesem Bereich?
InformationsquelleAutor der Frage Matthew Scharley | 2009-07-17
Du musst angemeldet sein, um einen Kommentar abzugeben.
Aus der Antwort, die ich bekam hier:
Können Sie verwenden:
Welche, wie beschrieben,hierwird verhindert, dass MySQL von der Interpretation einer INSERT - /UPDATE-ID 0, wie wird die nächste Sequenz-ID. Ein solches Verhalten beschränkt sich auf NULL.
Ist es, was ich für ziemlich schlechte Verhalten von der Anwendung wenn. Du musst echt aufpassen, dass es konsequent, vor allem, wenn Sie wählen, um die Implementierung der Replikation zu einem späteren Zeitpunkt.
InformationsquelleAutor der Antwort Matthew Scharley
Überprüfen Sie Ihre sql-DB-Modus mit:
Wenn es leer oder nicht gesetzt ist, verwenden Sie:
VORSICHTIG SEIN! Wenn Sie
GLOBAL
es ist keine sofortige änderung, Sie brauchen, um starten Sie Ihre Verbindung, um die Einstellung zu übernehmen.Also, wenn Sie die Wiederherstellung von Daten von einer DB zu einer anderen, zum Beispiel, und Sie sind sich nicht sicher, ob diese Einstellung aktiviert ist, verwenden Sie
SESSION
für eine sofortige änderung (es setzt sich beim schließen der Verbindung). Wenn Sie fertig sind, legen Wert 0 und es wird sich nicht ändern, auch wenn diesql_mode
geändert wird.Zurücksetzen in diesem Modus (und andere) verwenden
Zero auto-Inkrement-Werte werden nicht empfohlen, weil Sie sind nicht als Standard in MySQL-Datenbanken.
Für mehr info check mysql-dev Seite Thema auf dieser
Update
Für MariaDB verwenden Sie den Befehl wies darauf hin, in dieser Kommentar
InformationsquelleAutor der Antwort I.G. Pascual
Wenn Sie nicht wollen, befassen sich mit mysql-Variablen, hier ist eine nützliche hack:
Dann
Natürlich, dies setzt Voraus, dass Sie eine Ganzzahl und nicht mit negativen Werten für die Tabelle-ids.
InformationsquelleAutor der Antwort emisilva
Fail-safe-Weg:
InformationsquelleAutor der Antwort Stefan Rogin