Mysql 简明教程

MySQL - Sequences

序列是一系列整数,从 1 开始,每个连续数值递增 1。这些序列通常用于数据库,因为许多应用程序要求表中的每一行具有一个唯一标识符,而序列提供了生成此类值的简便方法。

Sequences in MySQL

MySQL 没有内置的序列功能,但提供了以 AUTO_INCREMENT 列的形式作为替代,它具有类似的目的。

在 MySQL 中,AUTO_INCREMENT 属性用于为某一列自动生成唯一整数值(序列)。默认情况下,此序列以 1 为初始值,并随着所添加的每一新行而递增 1。

Syntax

以下是 MySQL 中 AUTO_INCREMENT 属性的语法:

CREATE TABLE table_name (
   column1 datatype AUTO_INCREMENT,
   column2 datatype,
   column3 datatype,
   ...
   columnN datatype
);

Example

在以下示例中,我们将创建一个名为“CUSTOMERS”的表,此外,为该表的“ID”列定义 AUTO_INCREMENT 属性 -

CREATE TABLE CUSTOMERS (
   ID INT AUTO_INCREMENT,
   NAME VARCHAR (20) NOT NULL,
   AGE INT NOT NULL,
   ADDRESS CHAR (25),
   SALARY DECIMAL (18, 2),
   PRIMARY KEY (ID)
);

现在,让我们将一些记录插入到上面创建的表中 −

INSERT INTO CUSTOMERS VALUES
(NULL, 'Ramesh', 32, 'Ahmedabad', 2000.00),
(NULL, 'Khilan', 25, 'Delhi', 1500.00),
(NULL, 'Kaushik', 23, 'Kota', 2000.00),
(NULL, 'Chaitali', 25, 'Mumbai', 6500.00),
(NULL, 'Hardik', 27, 'Bhopal', 8500.00),
(NULL, 'Komal', 22, 'Hyderabad', 4500.00),
(NULL, 'Muffy', 24, 'Indore', 10000.00);

Output

我们可以从下方显示的表中看到,自动增量“ID”列中的值 -

Retrieving AUTO_INCREMENT Values

若要获取 MySQL 中的值,可以使用 LAST_INSERT_ID() SQL 函数。可以在任何可以发布 SQL 语句的客户端中使用此函数。或者,在 PERL 和 PHP 脚本中,提供了特定的函数来检索最后一条记录的自动增量值。

PERL Example

可以使用 mysql_insertid 属性访问查询生成的 AUTO_INCREMENT 值。可以根据执行查询的方式,通过数据库句柄或语句句柄访问此属性。

以下示例通过数据库句柄引用它 -

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

PHP Example

执行生成 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);

Renumbering an Existing Sequence

在某些情况下,您可能需要对表中的记录重新排序,特别是如果您已删除了许多记录。如果您表的表通过联接与其他表相关联,请在重新排序时小心。

如果您确定 AUTO_INCREMENT 列的重新排序是不可避免的,那么执行此操作的方法是从表中删除 AUTO_INCREMENT 列,然后再次将其添加进去。

Example

以下示例显示了使用此技术如何重新编号表中的 id values

ALTER TABLE CUSTOMERS DROP id;
ALTER TABLE CUSTOMERS
ADD id INT UNSIGNED NOT NULL AUTO_INCREMENT FIRST,
ADD PRIMARY KEY (id);

Output

以下是所获得的输出 −

Query OK, 0 rows affected (0.10 sec)
Records: 0  Duplicates: 0  Warnings: 0

Starting a Sequence at a Specific Value

默认情况下,MySQL 从 1 开始序列,但您可以在创建表时指定不同的初始值。

Example

以下示例演示了在创建表期间如何从 100 开始序列 -

CREATE TABLE CUSTOMERS (
   ID INT UNSIGNED NOT NULL AUTO_INCREMENT,
   PRIMARY KEY (ID),
   NAME VARCHAR(20) NOT NULL,
   AGE INT NOT NULL,
   ADDRESS CHAR (25),
   SALARY DECIMAL (18, 2)
)AUTO_INCREMENT = 100;

Output

以上代码的输出如下所示 −

Query OK, 0 rows affected (0.04 sec)

或者,您可以先创建表,然后使用 ALTER TABLE 命令设置初始序列值,如下所示 -

ALTER TABLE CUSTOMERS AUTO_INCREMENT = 100;

Sequence Using a Client Program

我们还可以使用客户端程序创建一个序列。

Syntax

Example

以下是这些程序 −