位置:首頁 > 數據庫 > MySQL教學 > MySQL序列的使用

MySQL序列的使用

序列是一組整數如1,2,3,...為了在需要時生成的。數據庫中序列是常用的,因為很多應用都需要在表的每行中,包含一個唯一的值,並且序列提供了一種簡單的方法來生成它們。本章將介紹如何在MySQL中使用序列。

使用AUTO_INCREMENT列

在MySQL中最簡單使用序列的方式是定義一個列AUTO_INCREMENT,然後其餘事情由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','2003-09-19','kitchen'),
    -> (NULL,'millipede','2004-09-11','driveway'),
    -> (NULL,'grasshopper','2015-02-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    | 2003-09-19 | kitchen    |
|  2 | millipede   | 2004-09-11 | driveway   |
|  3 | grasshopper | 2015-02-10 | front yard |
+----+-------------+------------+------------+
3 rows in set (0.00 sec)

獲取AUTO_INCREMENT值

LAST_INSERT_ID( )是一個SQL函數,這樣可以了解如何發出SQL語句,從任何客戶端中使用它。 以其他方式,Perl 和 PHP 腳本提供了獨有的函數來獲取最後一條記錄的自動遞增值。

PERL 示例

使用mysql_insertid屬性來獲得由查詢生成的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;