English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
MySQL 序列是一组整数:1, 2, 3, ...,由于一张数据表只能有一个字段自增主键, 如果你想实现其他字段也实现自动增加,就可以使用MySQL序列来实现。
本章我们将介绍如何使用MySQL的序列。
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)
MySQL 클라이언트에서는 다음과 같이 사용할 수 있습니다: SQL의 LAST_INSERT_ID() 함수를 통해 마지막으로 삽입된 테이블의 자동 증가 열의 값을 가져옵니다.
PHP나 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는 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;