Mysql中Identity 詳細(xì)介紹

假如表中包含一列為auto_increment,

如果是Myisam類型的引擎,那么在刪除了最新一筆數(shù)據(jù),無論是否重啟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(chǎn)‘;  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(chǎn)‘;  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)

? ?

可以看到在mysql數(shù)據(jù)庫沒有重啟時,innodb的表新插入數(shù)據(jù)會是之前被刪除的數(shù)據(jù)再加1.

但是當(dāng)Mysql服務(wù)被重啟后,再向InnodB的自增表表里插入數(shù)據(jù),那么會使用當(dāng)前Innodb表里的最大的自增列再加1.

原因:

Myisam類型存儲引擎的表將最大的ID值是記錄到數(shù)據(jù)文件中,不管是否重啟最大的ID值都不會丟失。但是InnoDB表的最大的ID值是存在內(nèi)存中的,若不重啟Mysql服務(wù),新加入數(shù)據(jù)會使用內(nèi)存中最大的數(shù)據(jù)+1.但是重啟之后,會使用當(dāng)前表中最大的值再+1

感謝閱讀此文,以上就是Mysql中Identity 詳細(xì)介紹的內(nèi)容,希望能幫助到大家,更多相關(guān)文章請關(guān)注PHP中文網(wǎng)(www.php.cn)!

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點贊12 分享