Ich versuche, ein Skript zu erstellen, um eine bestimmte Menge von Testdaten in meine Datenbank zu schreiben. Zu Beginn möchte ich die betreffenden Tabellen löschen, ohne Einschränkungen fallen zu lassen (weil die Testdaten nicht der richtige Ort sind) Construction Constraints) und setzen Sie AUTO_INCREMENT für jede Tabelle zurück, da das Einrichten der Testdaten sehr viel einfacher ist, wenn ich viele der IDs fest codieren kann.
Zum Beispiel habe ich zwei Anweisungen wie diese (es gibt ein Paar für fast jeden Tisch):
%Vor%und während die Datensätze gelöscht werden, wird der Autoinkrementwert nicht auf 1 zurückgesetzt, obwohl alle gefundenen Dokumentations- und SO-Antworten anzeigen, dass dies funktionieren sollte.
Wenn ich dieselbe Anweisung in MySQL Workbench mache, wird sie auch nicht zurückgesetzt.
Dies ist in einer INNODB-Datenbank.
Was vermisse ich?
(Hinweis: Ich kann TRUNCATE nicht verwenden, weil Einschränkungen vorliegen).
MySQL erlaubt Ihnen nicht, den AUTO_INCREMENT-Wert wie hier angegeben zu verringern: Ссылка
Sie können den Zähler nicht auf einen Wert zurücksetzen, der kleiner oder gleich dem aktuell verwendeten Wert ist. Wenn der Wert für InnoDB und MyISAM kleiner oder gleich dem Maximalwert ist, der sich derzeit in der Spalte AUTO_INCREMENT befindet, wird der Wert auf den aktuellen Wert der maximalen AUTO_INCREMENT-Spalte plus eins zurückgesetzt.
Auch bei Ihren Einschränkungen würde ich eine der folgenden Möglichkeiten ausprobieren:
Anmerkung von OP: Es war (1) das war was ich brauchte.
Was ich über die alter table-Anweisung sehen kann.
Sie können den Autoinkrementwert mithilfe der ALTER TABLE-Anweisung zurücksetzen. Die Syntax der ALTER TABLE-Anweisung zum Zurücksetzen des Autoinkrementwerts lautet wie folgt:
%Vor%Sie geben den Tabellennamen nach der ALTER TABLE-Klausel und den Wert, auf den wir zurücksetzen möchten, im Ausdruck AUTO_INCREMENT = value an.
Beachten Sie, dass der Wert größer oder gleich dem aktuellen Maximalwert der Spalte für automatische Erhöhung sein muss.
Wo liegt Ihr Problem, vermute ich? Also im Grunde sind Sie mit ein paar Optionen wie folgt übrig:
ALTER auto number column: Ich habe das nicht versucht, aber Sie könnten theoretisch die Primärschlüsselspalte von der Auto-Nummer zu einem int ändern und dann wieder eine Auto-Nummer machen. Etwas wie:
%Vor%Hoffen Sie, dass diese ein wenig helfen.
Können Sie die entsprechende Spalte für die automatische Erhöhung nicht löschen und neu erstellen? ? Beispiel folgt:
%Vor%Dieses sollte funktionieren, aber ich verwende kein MySQL, sondern entferne nur die Dokumente. Wenn Sie weitere Hilfe benötigen, hinterlassen Sie einen Kommentar und ich werde mein Bestes tun, um Ihnen zu helfen.
Ich habe auf dieses Problem gestoßen, als ich die mittleren Zeilen aus meiner Tabelle gelöscht habe. Meine Antwort wäre, NEUE DATEN IN NICHT VORHANDENE ID EINZUFÜGEN. Ich erwarte, dass meine Antwort immer noch nützlich ist, auch wenn es PHP nicht MYSQL ist.
sonst, wenn nicht in der ganzen Schleife gefunden, dann Einfügen für den Standardwert;
%Vor%Ich hoffe, es wird irgendwie helfen.
ALTER TABLEin deinem phpMyAdmintbl
DROP COLUMN id; ALTER TABLEtbl
ADDid
INT NOT NULL AUTO_INCREMENT FIRST, ADD PRIMARY KEY (id
);
Tags und Links mysql