top
Loading...
3.6.9.使用AUTO_INCREMENT
3.6.9. 使用AUTO_INCREMENT

可以通過AUTO_INCREMENT屬性為新的行產生唯一的標識:

CREATE TABLE animals (
     id MEDIUMINT NOT NULL AUTO_INCREMENT,
     name CHAR(30) NOT NULL,
     PRIMARY KEY (id)
 );
 
INSERT INTO animals (name) VALUES 
    ('dog'),('cat'),('penguin'),
    ('lax'),('whale'),('ostrich');
 
SELECT * FROM animals;

將返回:

+----+---------+
| id | name    |
+----+---------+
|  1 | dog     |
|  2 | cat     |
|  3 | penguin |
|  4 | lax     |
|  5 | whale   |
|  6 | ostrich |
+----+---------+

你可以使用LAST_INSERT_ID()SQL函數或mysql_insert_id() C API函數來查詢最新的AUTO_INCREMENT值。這些函數與具體連接有關,因此其返回值不會被其它執行插入功能的連接影響。

注釋:對于多行插入,LAST_INSERT_ID()mysql_insert_id()從插入的第一行實際返回AUTO_INCREMENT關鍵字。在復制設置中,通過該函數可以在其它服務器上正確復制多行插入。

對于MyISAMBDB表,你可以在第二欄指定AUTO_INCREMENT以及多列索引。此時,AUTO_INCREMENT列生成的值的計算方法為:MAX(auto_increment_column) + 1 WHERE prefix=given-prefix。如果想要將數據放入到排序的組中可以使用該方法。

CREATE TABLE animals (
    grp ENUM('fish','mammal','bird') NOT NULL,
    id MEDIUMINT NOT NULL AUTO_INCREMENT,
    name CHAR(30) NOT NULL,
    PRIMARY KEY (grp,id)
);
 
INSERT INTO animals (grp,name) VALUES 
    ('mammal','dog'),('mammal','cat'),
    ('bird','penguin'),('fish','lax'),('mammal','whale'),
    ('bird','ostrich');
 
SELECT * FROM animals ORDER BY grp,id;

將返回:

+--------+----+---------+
| grp    | id | name    |
+--------+----+---------+
| fish   |  1 | lax     |
| mammal |  1 | dog     |
| mammal |  2 | cat     |
| mammal |  3 | whale   |
| bird   |  1 | penguin |
| bird   |  2 | ostrich |
+--------+----+---------+

請注意在這種情況下(AUTO_INCREMENT列是多列索引的一部分),如果你在任何組中刪除有最大AUTO_INCREMENT值的行,將會重新用到AUTO_INCREMENT值。對于MyISAM表也如此,對于該表一般不重復使用AUTO_INCREMENT值。

如果AUTO_INCREMENT列是多索引的一部分,MySQL將使用該索引生成以AUTO_INCREMENT列開始的序列值。。例如,如果animals表含有索引PRIMARY KEY (grp, id)INDEX(id)MySQL生成序列值時將忽略PRIMARY KEY。結果是,該表包含一個單個的序列,而不是符合grp值的序列。

要想以AUTO_INCREMENT值開始而不是1,你可以通過CREATE TABLEALTER TABLE來設置該值,如下所示:

mysql> ALTER TABLE tbl AUTO_INCREMENT = 100;

關于AUTO_INCREMENT的詳細信息:

·         如何為列指定AUTO_INCREMENT屬性:13.1.5節,“CREATE TABLE語法”和 13.1.2節,“ALTER TABLE語法”。

·         AUTO_INCREMENT的動作取決于SQL模式:5.3.2節,“SQL服務器模式”。

·         找出含有最新AUTO_INCREMENT值的行:12.1.3節,“比較函數和操作符”。

·         設置將用到的AUTO_INCREMENT: 13.5.3節,“SET語法”

·         AUTO_INCREMENT和復制:6.7節,“復制特性和已知問題”.

·         AUTO_INCREMENT相關的可用于復制的Server-system變量(auto_increment_incrementauto_increment_offset):5.3.3節,“服務器系統變量”。

作者:mysql.com
來源:http://dev.mysql.com/doc/refman/5.1/zh/tutorial.html
北斗有巢氏 有巢氏北斗