關於mysql自增id的擷取和重設,mysql增id擷取
轉載請註明出處:簾卷西風的專欄(http://blog.csdn.net/ljxfblog)
mysql擷取自增id的幾種方法
- 使用max函數:select max(id) from tablename
- 優點:使用方便快捷。
- 缺點:擷取的不是真正的自增id,是表中最大的Id,如果有刪除資料的話,那麼該值和自增id相差比較大。如果有連表資料,有可能導致資料錯亂。
- 使用LAST_INSERT_ID函數:select LAST_INSERT_ID()
- 優點:擷取到的是真正的自增id。
- 缺點:該函數是與table無關的,永遠保留最新插入的自增列的id。如果多用戶端操作,而且不能保證原子性,這個值可能會出現錯誤。所以需要在插入之後調用。
- 使用@@IDENTITY變數:select @@IDENTITY
- 此方法和LAST_INSERT_ID()功能差不多,優缺點也一致。需要在插入後調用。
- 使用mysql查詢函數:SHOW TABLE STATUS;
- 優點:能夠準確的查到自增id。而且可以在語句後面加上where語句或者like語句來過濾。
- 缺點:該語句返回的是一個記錄集,不能單獨的返回自增值。所以需要額外的操作來擷取。
- 使用自訂查詢方法:mysql表相關的資訊是放在information_schema表裡。所以我們參考 SHOW TABLE STATUS來構建查詢語句。如:
- select Auto_increment into autoId from information_schema.tables where Table_Schema = ‘dbname’ and table_name = ‘tablename’;
- 優點:高度自訂,能夠準確的得到想得到的任何資訊。
- 確定:不容易記住。呵呵。
mysql自增id的重設
- 使用truncate:truncate table;
- 說明:使用truncate會刪除表的資料釋放空間,並且重設字自增id,但不會刪除表的定義。
- 用處:需要清空表的時候才能使用。
- 使用修改標識:dbcc checkident (‘table_name’ , reseed, new_reseed_value) ;
- 說明:new_reseed_value是設定的當前標識,下次插入則從new_reseed_value+1開始。如果new_reseed_value小於表中當前標識的值,有可能會產生重複key,會產生 2627 號錯誤資訊。
- 用處:此方法不會清空已有資料。適用於大量刪除後修改新的標識,但不能比當前表中最大值小。
- 使用修改表的方法:alter table tablename auto_increment=new
- 說明:此方法和上面的二方法類似。也不會清空資料,有可能會出現重複key的可能,所以此方法也只適用於清空表之後重設自增id或者大量刪除後修改自增id。
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。