mysql學習筆記(二:中的auto_increment 理解


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()獲取剛剛自增過的值。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM