Auto Increment auf 0 zurückgesetzt, kann aber nicht legen Sie den Wert mit der id=0. Nicht zufällig für Werte >0
Ich habe gerade stolperte über ein sehr seltsames Verhalten:
Sich vorstellen, wir haben eine Tabelle Kunden:
MariaDB [connections]> describe customers;
+--------------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------------+-------------+------+-----+---------+----------------+
| customerId | int(11) | NO | PRI | NULL | auto_increment |
| customerName | varchar(50) | NO | | NULL | |
+--------------+-------------+------+-----+---------+----------------+
2 rows in set (0.00 sec)
Legen Sie ein paar Werte:
insert into customers(customerName) values('Foo');
insert into customers(customerName) values('Bar');
Dann alles löschen und zurücksetzen der auto-Inkrement:
DELETE FROM customers;
ALTER TABLE customers AUTO_INCREMENT = 0;
Legen Sie nun einen neuen Wert mit customerId=0:
INSERT INTO customers(customerId,customerName) VALUES(0,'Site owner');
- Und siehe das Ergebnis:
MariaDB [connections]> select * from customers;
+------------+--------------+
| customerId | customerName |
+------------+--------------+
| 1 | Site owner |
+------------+--------------+
1 row in set (0.00 sec)
customerId auf 1 gesetzt ist!!!!
Wiederholen Sie das gleiche Verfahren, aber zurücksetzen auf die 5 und legen Sie 5, - alles ist OK:
MariaDB [connections]> delete from customers;
Query OK, 1 row affected (0.00 sec)
MariaDB [connections]> ALTER TABLE customers AUTO_INCREMENT = 5;
Query OK, 0 rows affected (0.00 sec)
Records: 0 Duplicates: 0 Warnings: 0
MariaDB [connections]> INSERT INTO customers(customerId,customerName) VALUES(5,'Site owner');
Query OK, 1 row affected (0.00 sec)
MariaDB [connections]> select * from customers;
+------------+--------------+
| customerId | customerName |
+------------+--------------+
| 5 | Site owner |
+------------+--------------+
1 row in set (0.00 sec)
Was ist hier Los? Wie kann ich das einfügen mit dem Wert '0' mit Werte einfügen? (Ja, ich editieren kann, danach aber aus verschiedenen Gründen nicht praktikabel ist, für meinen Fall).
Dank!
- Ich kann sofort sagen Sie eine Sache, Sie können mir das glauben oder werfen Sie es, vergessen Sie es und denken Sie daran was ich dir gesagt habe, wenn es darum geht, zu beißen Sie in den Arsch (und das wird es). Verlassen Sie sich NIE auf auto_increment zu bieten zahlen, die für Sie von Bedeutung sind. Auto_increment nicht gemacht, also können wir es verwenden, für eine sequenzielle Nummerierung. Es hat einen Zweck, und eine nur - zur eindeutigen Identifizierung einer Zeile. Das bedeutet, dass mysql ablegen kann einige zahlen (wenn die inserts nicht), es kann die Aufrechnung, es können auch negative Werte verwenden etc. Lass es einfach sein, wenn Sie einige "Besondere" zahlen - eine weitere Spalte hinzufügen oder so ähnlich.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Habe ich gemäß der Antwort von der link
Können Sie verwenden:
Welche, wie hier beschrieben, wird 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.
Ist dies unmöglich.
0 ist reserviert für die auto_increment-Feld. Wenn Sie einfügen, um auto-increment-Zeile 0, oder null, dann mysql Datensatz einfügen mit aktuellen auto-Inkrement-Wert.