創建數據表時,經常會出現auto_increment這個詞,下面就來了解一下它吧。
MySQL的中AUTO_INCREMENT類型的屬性用於為一個表中記錄自動生成ID功能,可在一定程度上代替Oracle,PostgreSQL等數據庫中的sequence。
在數據庫應用,我們經常要用到唯一編號,以標識記錄。在MySQL中可通過數據列的AUTO_INCREMENT屬性來自動生成。
可在建表時可用“AUTO_INCREMENT=n”選項來指定一個自增的初始值。
可用alter table table_name AUTO_INCREMENT=n命令來重設自增的起始值。
當插入記錄時,如果為AUTO_INCREMENT數據列明確指定了一個數值,則會出現兩種情況,
情況一,如果插入的值與已有的編號重復,則會出現出錯信息,因為AUTO_INCREMENT數據列的值必須是唯一的;
情況二,如果插入的值大於已編號的值,則會把該插入到數據列中,並使在下一個編號將從這個新值開始遞增。也就是說,可以跳過一些編號。
如果自增序列的最大值被刪除了,則在插入新記錄時,該值被重用。
如果用UPDATE命令更新自增列,如果列值與已有的值重復,則會出錯。如果大於已有值,則下一個編號從該值開始遞增。
在使用AUTO_INCREMENT時,應注意以下幾點:
AUTO_INCREMENT是數據列的一種屬性,只適用於整數類型數據列。
設置AUTO_INCREMENT屬性的數據列應該是一個正數序列,所以應該把該數據列聲明為UNSIGNED,這樣序列的編號個可增加一倍。
AUTO_INCREMENT數據列必須有唯一索引,以避免序號重復(即是主鍵或者主鍵的一部分)。
AUTO_INCREMENT數據列必須具備NOT NULL屬性。
AUTO_INCREMENT數據列序號的最大值受該列的數據類型約束,如TINYINT數據列的最大編號是127,如加上UNSIGNED,則最大為255。一旦達到上限,AUTO_INCREMENT就會失效。
當進行全表刪除時,MySQL AUTO_INCREMENT會從1重新開始編號。
這是因為進行全表操作時,MySQL(和PHP搭配之最佳組合)實際是做了這樣的優化操作:先把數據表里的所有數據和索引刪除,然后重建數據表。
如果想刪除所有的數據行又想保留序列編號信息,可這樣用一個帶where的delete命令以抑制MySQL(和PHP搭配之最佳組合)的優化:delete from table_name where 1;
可用last_insert_id()獲取剛剛自增過的值。
