SQL 使用序列


SQL 使用序列

序列是根據需要產生的一組有序整數: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','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 各自提供了其獨有的函數,用於獲得最后一條記錄的 AUTO_INCREMENT 值。

Perl 示例:

使用 mysql_insertid 屬性來獲取 SQL 查詢產生的 AUTO_INCREMENT 值。根據執行查詢的方式不同,該屬性可以通過數據庫句柄或者語句句柄來訪問。下面的示例通過數據庫句柄取得自增值:

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

PHP 示例:

在執行完會產生自增值的查詢后,可以通過調用 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;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM