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;