鍍金池/ 教程/ 數(shù)據(jù)庫/ SQL 使用序列
SQL AND 和 OR 連接運算符
SQL 刪除數(shù)據(jù)庫
SQL 使用序列
SQL CONCAT 函數(shù)
SQL 使用視圖
SQL SELECT 語句
SQL 別名
SQL MAX 函數(shù)
SQL 創(chuàng)建表
SQL NULL 值
SQL 數(shù)據(jù)類型
SQL RAND 函數(shù)
SQL 臨時表
SQL INSERT 語句
SQL ALTER TABLE 命令
SQL 關(guān)系型數(shù)據(jù)庫管理系統(tǒng)
SQL SUM 函數(shù)
SQL 子查詢
SQL UPDATE 語句
SQL 表達式
SQL 操作符
SQL ORDER BY 子句
SQL WHERE 子句
SQL 對結(jié)果進行排序
SQL 注入
SQL AVG 函數(shù)
SQL 選擇數(shù)據(jù)庫,USE 語句
SQL 克隆數(shù)據(jù)表
SQL COUNT 函數(shù)
SQL 語法
SQL DELETE 語句
SQL 約束
SQL 刪除表
SQL TOP、LIMIT 和 ROWNUM 子句
SQL 日期函數(shù)
SQL TRUNCATE TABLE 命令
SQL DISTINCT 關(guān)鍵字
SQL 處理重復(fù)數(shù)據(jù)
SQL 使用連接
SQL 索引
SQL 事務(wù)
SQL GROUP BY 子句
SQL HAVING 子句
SQL MIN 函數(shù)
SQL 概覽
SQL SQRT 函數(shù)
SQL LIKE 子句
SQL 通配符
SQL UNION 子句
SQL 數(shù)據(jù)庫
SQL 創(chuàng)建數(shù)據(jù)庫

SQL 使用序列

序列是根據(jù)需要產(chǎn)生的一組有序整數(shù):1, 2, 3 ... 序列在數(shù)據(jù)庫中經(jīng)常用到,因為許多應(yīng)用要求數(shù)據(jù)表中的的每一行都有一個唯一的值,序列為此提供了一種簡單的方法。

本節(jié)闡述在 MySQL 中如何使用序列。

使用 AUTO_INCREMENT 列:

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

獲取 AUTO_INCREMENT 值:

LAST_INSERT_ID() 是一個 SQL 函數(shù),可以用在任何能夠執(zhí)行 SQL 語句地方。另外,Perl 和 PHP 各自提供了其獨有的函數(shù),用于獲得最后一條記錄的 AUTO_INCREMENT 值。

Perl 示例:

使用 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};

PHP 示例:

在執(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);

重新編號現(xiàn)有序列:

當(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;
上一篇:SQL 事務(wù)下一篇:SQL 操作符