序列是一組整數(shù)1,2,3,...,以便在需要時生成。 序列經(jīng)常使用在數(shù)據(jù)庫中,因為很多應(yīng)用都需要在一個表中的每一行包含一個唯一的值,序列提供了一種簡單的方法來生成它們。
本章介紹了如何使用序列在MySQL中。
在MySQL中最簡單的方法來使用順序是定義一個列AUTOINCREMENT并保留其余的事情由MySQL處理。
嘗試下面的例子。這將創(chuàng)建表,之后將插入幾行該表中,其中它不要求,得到的記錄ID,因為其自動遞增被MySQL。
mysql> CREATE TABLE INSECT -> ( -> id INT UNSIGNED NOT NULL AUTO_INCREMENT, -> PRIMARY KEY (id), -> name VARCHAR(30) NOT NULL, # type of insect -> date DATE NOT NULL, # date collected -> origin VARCHAR(30) NOT NULL # where collected ); Query OK, 0 rows affected (0.02 sec) mysql> INSERT INTO INSECT (id,name,date,origin) VALUES -> (NULL,'housefly','2001-09-10','kitchen'), -> (NULL,'millipede','2001-09-10','driveway'), -> (NULL,'grasshopper','2001-09-10','front yard'); Query OK, 3 rows affected (0.02 sec) Records: 3 Duplicates: 0 Warnings: 0 mysql> SELECT * FROM INSECT ORDER BY id; +----+-------------+------------+------------+ | id | name | date | origin | +----+-------------+------------+------------+ | 1 | housefly | 2001-09-10 | kitchen | | 2 | millipede | 2001-09-10 | driveway | | 3 | grasshopper | 2001-09-10 | front yard | +----+-------------+------------+------------+ 3 rows in set (0.00 sec)
LAST_INSERT_ID( ) 是SQL的函數(shù),這樣就可以從發(fā)出SQL語句的任何客戶端中使用它。否則,Perl和PHP腳本提供專門函數(shù)來獲取最后一條記錄的自動遞增值。
使用mysql_insert_id屬性來獲得由查詢生成的AUTO_INCREMENT值。此屬性是通過一個數(shù)據(jù)庫句柄或語句句柄訪問,這取決于發(fā)出查詢。下面的例子中引用它通過數(shù)據(jù)庫句柄:
$dbh->do ("INSERT INTO INSECT (name,date,origin) VALUES('moth','2001-09-14','windowsill')"); my $seq = $dbh->{mysql_insertid};
發(fā)出產(chǎn)生的AUTO_INCREMENT值的查詢后,通過mysql_insert_id( )調(diào)用檢索值:
mysql_query ("INSERT INTO INSECT (name,date,origin) VALUES('moth','2001-09-14','windowsill')", $conn_id); $seq = mysql_insert_id ($conn_id);
有可能出現(xiàn)一種情況,當從表中已刪除多條記錄,并且希望所有的記錄重新排序。這可以通過使用一個簡單的技巧來完成,但這樣做要非常小心,如果你的表連接使用其他表。
如果確定重新排序AUTO_INCREMENT列是不可避免的,這樣做的方式是從表中刪除列,然后重新添加這個刪除的列。下面的例子演示了如何使用這種技術(shù)在 insect 表重新編號ID值:
mysql> ALTER TABLE INSECT DROP id; mysql> ALTER TABLE insect -> ADD id INT UNSIGNED NOT NULL AUTO_INCREMENT FIRST, -> ADD PRIMARY KEY (id);
默認情況下,MySQL將從1開始順序,但可以在創(chuàng)建表時指定的任何其他數(shù)字也是可以的。以下為例子,MySQL順序?qū)?00開始。
mysql> CREATE TABLE INSECT -> ( -> id INT UNSIGNED NOT NULL AUTO_INCREMENT = 100, -> PRIMARY KEY (id), -> name VARCHAR(30) NOT NULL, # type of insect -> date DATE NOT NULL, # date collected -> origin VARCHAR(30) NOT NULL # where collected );
或者,您可以創(chuàng)建表,然后設(shè)置初始序列值A(chǔ)LTER TABLE。
mysql> ALTER TABLE t AUTO_INCREMENT = 100;