AUTO_INCREMENT
AUTO_INCREMENT是mysql唯一擴展的完整性約束,當為數據庫表中插入新紀錄時,字段上的值會自動生成唯一的ID,再具體設置AUTO_INCREMENT約束時,一個表中只能有一個字段使用該約束,並且該字段的數據類型必須為整數類型。還有,我們習慣上將表中的一個列同時設置為AUTO_INCREMENT和主鍵。
語法(這里是和聯合索引一起舉例講解):
使用單個索引
mysql> create table auto( -> id smallint not null auto_increment, -> name char(15), -> primary key(id) -> ); Query OK, 0 rows affected (0.04 sec)
使用組合索引
mysql> create table autoincre_demo( -> d1 smallint not null auto_increment, -> d2 smallint not null, -> name varchar(10), -> index(d1,d2) -> ); Query OK, 0 rows affected (0.06 sec)
總結:對於InnoDB表,自動增長列必須是索引,一般習慣上設置主鍵為自動增長列。如果是組合索引,自動增長列必須是組合索引的第一列。
總結auto_increment的幾種注意事項:
(1)如果把一個NULL插入到一個AUTO_INCREMENT數據列里去,MYSQL將自動生成下一個序列編號。編號從1開始,並1為基數遞增。
(2)把0插入AUTO_INCREMENT數據列的效果與插入NULL值一樣。但不建議這樣做,還是以插入NULL值為好。
(3)當插入記錄時,沒有為AUTO_INCREMENT明確指定值,則等同插入NULL值。
(4)當插入記錄時,如果為AUTO_INCREMENT數據列明確指定了一個數值,則會出現兩種情況,情況一,如果插入的值與已有的編號重復,則會出現出錯信息,因為AUTO_INCREMENT數據列的值必須是唯一的;情況二,如果插入的值大於已編號的值,則會把該插入到數據列中,並使在下一個編號將從這個新值開始遞增。也就是說,可以跳過一些編號。
(5)如果用UPDATE命令更新自增列,如果列值與已有的值重復,則會出錯。如果大於已有值,則下一個編號從該值開始遞增。