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.
InformationsquelleAutor user2787266 | 2013-09-17
Schreibe einen Kommentar