1、auto_increment
理解1
auto_increment是用於主鍵自動增長的,從1開始增長,當你把第一條記錄刪除時,再插入第二跳數據時,主鍵值是2,不是1。
例如:
create table `test` ( `id` int(10) not null auto_increment, -- 表示自增列 `name` varchar(20) not null, primary key(`id`) )
auto_increment = 1; -- 表示自增起始大小-- 這樣就可以創建一個表`test`,id為自增列
-- 執行語句 insert into test (`name`) values ('名字');
-- 就可以插入一行數據為: 1 '名字'
擴展資料:
在使用AUTO_INCREMENT時,應注意以下幾點:
1、AUTO_INCREMENT是數據列的一種屬性,只適用於整數類型數據列。
2、設置AUTO_INCREMENT屬性的數據列應該是一個正數序列,所以應該把該數據列聲明為UNSIGNED,這樣序列的編號個可增加一倍。
3、AUTO_INCREMENT數據列必須有唯一索引,以避免序號重復(即是主鍵或者主鍵的一部分)。AUTO_INCREMENT數據列必須具備NOT NULL屬性。
4、AUTO_INCREMENT數據列序號的最大值受該列的數據類型約束,如TINYINT數據列的最大編號是127,如加上UNSIGNED,則最大為255。一旦達到上限,AUTO_INCREMENT就會失效。
5、當進行全表刪除時,MySQL AUTO_INCREMENT會從1重新開始編號。
這是因為進行全表操作時,MySQL(和PHP搭配之最佳組合)實際是做了這樣的優化操作:先把數據表里的所有數據和索引刪除,然后重建數據表。
如果想刪除所有的數據行又想保留序列編號信息,可這樣用一個帶where的delete命令以抑制MySQL(和PHP搭配之最佳組合)的優化:delete from table_name where 1;
可用last_insert_id()獲取剛剛自增過的值。
理解2
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時,應注意以下幾點:
1、AUTO_INCREMENT是數據列的一種屬性,只適用於整數類型數據列。
2、設置AUTO_INCREMENT屬性的數據列應該是一個正數序列,所以應該把該數據列聲明為UNSIGNED,這樣序列的編號個可增加一倍。
3、AUTO_INCREMENT數據列必須有唯一索引,以避免序號重復(即是主鍵或者主鍵的一部分)。
4、AUTO_INCREMENT數據列必須具備NOT NULL屬性。
5、AUTO_INCREMENT數據列序號的最大值受該列的數據類型約束,如TINYINT數據列的最大編號是127,如加上UNSIGNED,則最大為255。
一旦達到上限,AUTO_INCREMENT就會失效。
6、當進行全表刪除時,MySQL AUTO_INCREMENT會從1重新開始編號。
這是因為進行全表操作時,MySQL(和PHP搭配之最佳組合)實際是做了這樣的優化操作:先把數據表里的所有數據和索引刪除,然后重建數據表。
7、如果想刪除所有的數據行又想保留序列編號信息,可這樣用一個帶where的delete命令以抑制MySQL(和PHP搭配之最佳組合)的優化:delete from table_name where 1。
也可以用last_insert_id()獲取剛剛自增過的值。