W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
序列是根據(jù)需要產(chǎn)生的一組有序整數(shù):1, 2, 3 ... 序列在數(shù)據(jù)庫中經(jīng)常用到,因為許多應(yīng)用要求數(shù)據(jù)表中的的每一行都有一個唯一的值,序列為此提供了一種簡單的方法。
本節(jié)闡述在 MySQL 中如何使用序列。
在 MySQL 中使用序列最簡單的方式是,把某列定義為 AUTO_INCREMENT,然后將剩下的事情交由 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ù),可以用在任何能夠執(zhí)行 SQL 語句地方。另外,Perl 和 PHP 各自提供了其獨有的函數(shù),用于獲得最后一條記錄的 AUTO_INCREMENT 值。
使用 mysql_insertid 屬性來獲取 SQL 查詢產(chǎn)生的 AUTO_INCREMENT 值。根據(jù)執(zhí)行查詢的方式不同,該屬性可以通過數(shù)據(jù)庫句柄或者語句句柄來訪問。下面的示例通過數(shù)據(jù)庫句柄取得自增值:
$dbh->do ("INSERT INTO INSECT (name,date,origin)
VALUES('moth','2001-09-14','windowsill')");
my $seq = $dbh->{mysql_insertid};
在執(zhí)行完會產(chǎn)生自增值的查詢后,可以通過調(diào)用 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);
當(dāng)你從表中刪除了很多記錄后,可能會想要對所有的記錄重新定序。只要略施小計就能達到此目的,不過如果你的表與其他表之間存在連接的話,請千萬小心。
當(dāng)你覺得不得不對 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,不過你可以在創(chuàng)建數(shù)據(jù)表的時候,指定任意其他值。下面的示例中,MySQL 將序列的起始值設(shè)為 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
);
或者,你也可以先創(chuàng)建數(shù)據(jù)表,然后使用 ALTER TABLE 來設(shè)置序列的起始值:
mysql> ALTER TABLE t AUTO_INCREMENT = 100;
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: