位置:首頁 > 數據庫 > SQL教學 > SQL使用序列(自動遞增)

SQL使用序列(自動遞增)

序列是一組整數1,2,3,...,以便在需要時生成。 序列經常使用在數據庫中,因為很多應用都需要在一個表中的每一行包含一個唯一的值,序列提供了一種簡單的方法來生成它們。

本章介紹了如何使用序列在MySQL中。

使用自動遞增(AUTO_INCREMENT)列:

在MySQL中最簡單的方法來使用順序是定義一個列AUTOINCREMENT並保留其餘的事情由MySQL處理。

實例:

嘗試下麵的例子。這將創建表,之後將插入幾行該表中,其中它不要求,得到的記錄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)

獲得自動遞增(AUTO_INCREMENT)的值:

LAST_INSERT_ID( ) 是SQL的函數,這樣就可以從發出SQL語句的任何客戶端中使用它。否則,Perl和PHP腳本提供專門函數來獲取最後一條記錄的自動遞增值。

PERL示例:

使用mysql_insert_id屬性來獲得由查詢生成的AUTO_INCREMENT值。此屬性是通過一個數據庫句柄或語句句柄訪問,這取決於發出查詢。下麵的例子中引用它通過數據庫句柄:

$dbh->do ("INSERT INTO INSECT (name,date,origin)
VALUES('moth','2001-09-14','windowsill')");
my $seq = $dbh->{mysql_insertid};

PHP示例:

發出產生的AUTO_INCREMENT值的查詢後,通過mysql_insert_id( )調用檢索值:

mysql_query ("INSERT INTO INSECT (name,date,origin)
VALUES('moth','2001-09-14','windowsill')", $conn_id);
$seq = mysql_insert_id ($conn_id);

重編一個現有的序列:

有可能出現一種情況,當從表中已刪除多條記錄,並且希望所有的記錄重新排序。這可以通過使用一個簡單的技巧來完成,但這樣做要非常小心,如果你的表連接使用其他表。

如果確定重新排序AUTO_INCREMENT列是不可避免的,這樣做的方式是從表中刪除列,然後重新添加這個刪除的列。下麵的例子演示了如何使用這種技術在 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開始順序,但可以在創建表時指定的任何其他數字也是可以的。以下為例子,MySQL順序將從100開始。

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
);

或者,您可以創建表,然後設置初始序列值ALTER TABLE。

mysql> ALTER TABLE t AUTO_INCREMENT = 100;