MySQL使用AUTO_INCREMENT列的表注意事項之delete資料篇

來源:互聯網
上載者:User

標籤:delete自增列資料   mysql   auto_increment   

1. 說明

在對帶有AUTO_INCREMENT列的表delete掉所有資料時:

(1)對於MyISAM表,在delete表中所有資料時沒有任何風險,隨意折騰;

(2)對於InnoDB表,在delete表中所有資料時,是可能有風險的,可能會引入一個大坑,具體看後面的實驗。

環境描述:RHEL 6.4 x86_64 + MySQL 5.6.19

blog地址:http://blog.csdn.net/hw_libo/article/details/40149173

在維護有AUTO_INCREMENT列的表時,另外一個注意點,參考:

MySQL使用AUTO_INCREMENT列的表注意事項之delete資料篇

http://blog.csdn.net/hw_libo/article/details/40097125


2. MyISAM表

MySQL [bosco]> CREATE TABLE `t7` (    ->   `id` int(10) unsigned NOT NULL AUTO_INCREMENT,    ->   `name` varchar(20) NOT NULL DEFAULT '',    ->   PRIMARY KEY (`id`)    -> ) ENGINE=MyISAM;Query OK, 0 rows affected (0.05 sec)MySQL [bosco]> insert into t7(name) values('GZ'),('SH'),('BJ'),('SZ'),('HZ');Query OK, 5 rows affected (0.03 sec)Records: 5  Duplicates: 0  Warnings: 0MySQL [bosco]> select * from t7;+----+------+| id | name |+----+------+|  1 | GZ   ||  2 | SH   ||  3 | BJ   ||  4 | SZ   ||  5 | HZ   |+----+------+5 rows in set (0.00 sec)MySQL [bosco]> delete from t7;Query OK, 5 rows affected (0.03 sec)MySQL [bosco]> show create table t7\G*************************** 1. row ***************************       Table: t7Create Table: CREATE TABLE `t7` (  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,  `name` varchar(20) NOT NULL DEFAULT '',  PRIMARY KEY (`id`)) ENGINE=MyISAM AUTO_INCREMENT=6 DEFAULT CHARSET=utf81 row in set (0.00 sec)MySQL [bosco]> insert into t7(name) values('NJ');Query OK, 1 row affected (0.07 sec)MySQL [bosco]> select * from t7;+----+------+| id | name |+----+------+|  6 | NJ   |+----+------+1 row in set (0.00 sec)如果在delete from t2後,重啟了mysqld,AUTO_INCREMENT並不會被重設:MySQL [bosco]> show create table t7\G*************************** 1. row ***************************       Table: t7Create Table: CREATE TABLE `t7` (  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,  `name` varchar(20) NOT NULL DEFAULT '',  PRIMARY KEY (`id`)) ENGINE=MyISAM AUTO_INCREMENT=6 DEFAULT CHARSET=utf81 row in set (0.00 sec)


3. InnoDB表


MySQL [bosco]> show create table t2\G*************************** 1. row ***************************       Table: t2Create Table: CREATE TABLE `t2` (  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,  `name` varchar(20) NOT NULL DEFAULT '',  PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf81 row in set (0.00 sec)MySQL [bosco]> insert into t2(name) values('GZ'),('SH'),('BJ'),('SZ'),('HZ');Query OK, 5 rows affected (0.04 sec)Records: 5  Duplicates: 0  Warnings: 0MySQL [bosco1]> select * from t2;+----+------+| id | name |+----+------+|  1 | GZ   ||  2 | SH   ||  3 | BJ   ||  4 | SZ   ||  5 | HZ   |+----+------+5 rows in set (0.00 sec)MySQL [bosco]> delete from t2;    ## 直接將t2表中的資料全部刪除,使用的是delete而非truncateQuery OK, 5 rows affected (0.04 sec)MySQL [bosco]> insert into t2(name) values('NJ');   ## 再次插入資料時,自增id會自動為下一編號Query OK, 1 row affected (0.02 sec)MySQL [bosco]> select * from t2;+----+------+| id | name |+----+------+|  6 | NJ   |+----+------+1 row in set (0.00 sec)但是,如果在delete from t2後,重啟了mysqld,那麼情況完全不一樣了,這個重啟會重設id。MySQL [bosco]> insert into t2(name) values('FJ');   ## 再次插入資料時,自增id會被重設編號Query OK, 1 row affected (0.02 sec)MySQL [bosco]> select * from t2;+----+------+| id | name |+----+------+|  1 | FJ   |  ## 再次插入新值時,id編號會重新從頭開始+----+------+1 row in set (0.00 sec)

blog地址:http://blog.csdn.net/hw_libo/article/details/40149173

-- Bosco  QQ:375612082

---- END ----
-------------------------------------------------------------------------------------------------------
著作權,文章允許轉載,但必須以連結方式註明源地址,否則追究法律責任!

MySQL使用AUTO_INCREMENT列的表注意事項之delete資料篇

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.