Heim >Datenbank >MySQL-Tutorial >Detaillierte Einführung in Identität in MySQL

Detaillierte Einführung in Identität in MySQL

黄舟
黄舟Original
2016-12-15 16:32:232589Durchsuche

Wenn die Tabelle eine Spalte auto_increment enthält,

Wenn es sich um eine Engine vom Typ Myisam handelt, wird nach dem Löschen der neuesten Daten unabhängig davon, ob MySQL neu gestartet wird, das zuletzt gelöschte Maximum weiterhin nach dem nächsten verwendet Einfügung. ID+1.

mysql> create table test_myisam (id int not null auto_increment primary key, name char(5)) engine=myisam;
Query OK, 0 rows affected (0.04 sec)
  
mysql> insert into test_myisam (name) select ‘a‘;
Query OK, 1 row affected (0.00 sec)
Records: 1 Duplicates: 0 Warnings: 0
  
mysql> insert into test_myisam (name) select ‘b‘;
Query OK, 1 row affected (0.00 sec)
Records: 1 Duplicates: 0 Warnings: 0
  
mysql> insert into test_myisam (name) select ‘c‘;
Query OK, 1 row affected (0.00 sec)
Records: 1 Duplicates: 0 Warnings: 0
  
mysql> insert into test_myisam (name) select name from test_myisam;
Query OK, 3 rows affected (0.00 sec)
Records: 3 Duplicates: 0 Warnings: 0
  
mysql> select * from test_myisam;
+----+------+
| id | name |
+----+------+
| 1 | a  |
| 2 | b  |
| 3 | c  |
| 4 | a  |
| 5 | b  |
| 6 | c  |
+----+------+
6 rows in set (0.00 sec)
  
mysql> delete from test_myisam where id=6;
Query OK, 1 row affected (0.00 sec)

mysql> insert into test_myisam(name) select ‘d‘;
Query OK, 1 row affected (0.00 sec)
Records: 1 Duplicates: 0 Warnings: 0
  
mysql> select * from test_myisam;
+----+------+
| id | name |
+----+------+
| 1 | a  |
| 2 | b  |
| 3 | c  |
| 4 | a  |
| 5 | b  |
| 7 | d  |
+----+------+
6 rows in set (0.00 sec)

Das Folgende ist ein Test der Innodb-Tabelle.

mysql> create table test_innodb(id int not null auto_increment primary key, name char(5)) engine=innodb;
Query OK, 0 rows affected (0.26 sec)
  
mysql> insert into test_innodb (name)select ‘a‘;
Query OK, 1 row affected (0.06 sec)
Records: 1 Duplicates: 0 Warnings: 0
  
mysql> insert into test_innodb (name)select ‘b‘;
Query OK, 1 row affected (0.06 sec)
Records: 1 Duplicates: 0 Warnings: 0
  
mysql> insert into test_innodb (name)select ‘c‘;
Query OK, 1 row affected (0.07 sec)
Records: 1 Duplicates: 0 Warnings: 0
  
mysql> select * from test_innodb;
+----+------+
| id | name |
+----+------+
| 1 | a  |
| 2 | b  |
| 3 | c  |
+----+------+
3 rows in set (0.00 sec)
  
mysql> delete from test_innodb where id=3;
Query OK, 1 row affected (0.05 sec)
  
mysql> insert into test_innodb (name)select ‘d‘;
Query OK, 1 row affected (0.20 sec)
Records: 1 Duplicates: 0 Warnings: 0
  
mysql> select * from test_innodb;
+----+------+
| id | name |
+----+------+
| 1 | a  |
| 2 | b  |
| 4 | d  |
+----+------+
3 rows in set (0.00 sec)
  
mysql> exit
Bye
[2@a data]$ mysql -uroot -pwsdad
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 5
Server version: 5.5.37-log Source distribution
  
Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.
  
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
  
Type ‘help;‘ or ‘\h‘ for help. Type ‘\c‘ to clear the current input statement.
  
mysql> use wison
Database changed
mysql> delete from test_innodb where id=4;
Query OK, 1 row affected (0.07 sec)
  
mysql> exit
Bye
[2@a data]$ sudo service mysql restart
Shutting down MySQL... SUCCESS!
Starting MySQL.. SUCCESS!
[2@a data]$ mysql -uroot -pwison
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.5.37-log Source distribution
  
Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.
  
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
  
Type ‘help;‘ or ‘\h‘ for help. Type ‘\c‘ to clear the current input statement.
  
mysql> use wison
Database changed
mysql> insert into test_innodb (name) select ‘z‘;
Query OK, 1 row affected (0.07 sec)
Records: 1 Duplicates: 0 Warnings: 0
  
mysql> select * from test_innodb;
+----+------+
| id | name |
+----+------+
| 1 | a  |
| 2 | b  |
| 3 | z  |
+----+------+
3 rows in set (0.00 sec)

Sie können sehen, dass die neu eingefügten Daten in der Innodb-Tabelle die zuvor gelöschten Daten plus 1 sind, wenn die MySQL-Datenbank nicht neu gestartet wird.

Wenn jedoch nach dem Neustart des MySQL-Dienstes Daten in die Auto-Inkrement-Tabelle von InnodB eingefügt werden, wird die größte Auto-Inkrement-Spalte in der aktuellen Innodb-Tabelle verwendet und 1 hinzugefügt

Grund:

Myisam Die Tabelle vom Typ Speicher-Engine zeichnet den maximalen ID-Wert in der Datendatei auf, und der maximale ID-Wert geht nicht verloren, unabhängig davon, ob sie neu gestartet wird oder nicht. Der maximale ID-Wert der InnoDB-Tabelle wird jedoch im Speicher gespeichert. Wenn der MySQL-Dienst nicht neu gestartet wird, verwenden die neu hinzugefügten Daten die maximalen Daten im Speicher + 1. Nach dem Neustart jedoch den maximalen Wert in der aktuellen Tabelle wird verwendet und +1

Vielen Dank für das Lesen dieses Artikels. Ich hoffe, dass er allen weiterhelfen kann. Weitere verwandte Artikel finden Sie auf der chinesischen PHP-Website (www.php.cn)!


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn