PHP开发教程

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;


Powered by PHP二次开发 ©2008-2017