未加星标

Mysql中Identity 详细介绍

字体大小 | |
[数据库(mysql) 所属分类 数据库(mysql) | 发布者 店小二03 | 时间 | 作者 红领巾 ] 0人收藏点击收藏

假如表中包含一列为auto_increment,

如果是Myisam类型的引擎,那么在删除了最新一笔数据,无论是否重启mysql,下一次插入之后仍然会使用上次删除的最大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)

下面是对Innodb表的测试。

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
[[email protected] 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
[[email protected] data]$ sudo service mysql restart
Shutting down MySQL... SUCCESS!
Starting MySQL.. SUCCESS!
[[email protected] 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)

可以看到在mysql数据库没有重启时,innodb的表新插入数据会是之前被删除的数据再加1.

但是当Mysql服务被重启后,再向InnodB的自增表表里插入数据,那么会使用当前Innodb表里的最大的自增列再加1.

原因:

Myisam类型存储引擎的表将最大的ID值是记录到数据文件中,不管是否重启最大的ID值都不会丢失。但是InnoDB表的最大的ID值是存在内存中的,若不重启Mysql服务,新加入数据会使用内存中最大的数据+1.但是重启之后,会使用当前表中最大的值再+1

感谢阅读此文,希望能帮助到大家,谢谢大家对本站的支持!

本文数据库(mysql)相关术语:navicat for mysql mysql workbench mysql数据库 mysql 存储过程 mysql安装图解 mysql教程 mysql 管理工具

主题: SQLMySQL数据InnoDBUCSU删除谢大数据库
分页:12
转载请注明
本文标题:Mysql中Identity 详细介绍
本站链接:http://www.codesec.net/view/484190.html
分享请点击:


1.凡CodeSecTeam转载的文章,均出自其它媒体或其他官网介绍,目的在于传递更多的信息,并不代表本站赞同其观点和其真实性负责;
2.转载的文章仅代表原创作者观点,与本站无关。其原创性以及文中陈述文字和内容未经本站证实,本站对该文以及其中全部或者部分内容、文字的真实性、完整性、及时性,不作出任何保证或承若;
3.如本站转载稿涉及版权等问题,请作者及时联系本站,我们会及时处理。
登录后可拥有收藏文章、关注作者等权限...
技术大类 技术大类 | 数据库(mysql) | 评论(0) | 阅读(22)