English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

MySQL 시퀀스 사용

MySQL 序列是一组整数:1, 2, 3, ...,由于一张数据表只能有一个字段自增主键, 如果你想实现其他字段也实现自动增加,就可以使用MySQL序列来实现。

本章我们将介绍如何使用MySQL的序列。

使用 AUTO_INCREMENT

MySQL 中最简单使用序列的方法就是使用 MySQL AUTO_INCREMENT 来定义序列。

在线示例

以下示例中创建了数据表 insect, insect 表中 id 无需指定值可实现自动增长。

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 값 가져오기

MySQL 클라이언트에서는 다음과 같이 사용할 수 있습니다: SQL의 LAST_INSERT_ID() 함수를 통해 마지막으로 삽입된 테이블의 자동 증가 열의 값을 가져옵니다.

PHP나 PERL 스크립트에서도 마지막으로 삽입된 테이블의 자동 증가 열의 값을 가져오기 위한 함수가 제공됩니다.

PERL 예제

AUTO_INCREMENT의 값을 가져오기 위해 mysql_insertid 속성을 사용합니다. 다음은 예제입니다:

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

PHP 예제

PHP는 mysql_insert_id() 함수를 통해 실행된 INSERT SQL 문의 AUTO_INCREMENT 열의 값을 가져옵니다.

mysql_query("INSERT INTO insect (name,date,origin)
VALUES('moth','2001-09-14','windowsill')", $conn_id);
$seq = mysql_insert_id($conn_id);

시퀀스 초기화

데이터 테이블에서 여러 개의 레코드를 삭제하고 AUTO_INCREMENT 열을 재정렬하고자 한다면, 자동 증가 열을 제거한 후 다시 추가하여 实现 할 수 있습니다. 하지만 이 작업은 매우 조심스럽게 수행해야 합니다. 새로운 레코드가 추가되는 동시에 데이터가 삭제되면 데이터 혼란이 발생할 수 있습니다. 다음과 같이 작업합니다:

mysql> ALTER TABLE insect DROP id;
mysql> ALTER TABLE insect
    -> ADD id INT UNSIGNED NOT NULL AUTO_INCREMENT FIRST,
    -> ADD PRIMARY KEY (id);

시퀀스 시작 값을 설정하려면,

시퀀스의 시작 값은 일반적으로 다음과 같습니다:1하지만 시작 값을 지정해야 한다면,100, 그런 다음 다음 명령어로 구현할 수 있습니다:

mysql> CREATE TABLE insect
    -> (
    -> id INT UNSIGNED NOT NULL AUTO_INCREMENT,
    -> PRIMARY KEY (id),
    -> name VARCHAR(30) NOT NULL, 
    -> date DATE NOT NULL,
    -> origin VARCHAR(30) NOT NULL
)engine=innodb auto_increment=100 charset=utf8;

또는 테이블 생성 후 다음 명령어로 구현할 수 있습니다:

mysql> ALTER TABLE t AUTO_INCREMENT = 100;