MySQL 시퀀스 사용

시퀀스는 특정 요구에 따라 순서대로 생성되는 정수 1, 2, 3, ...의 집합입니다. 많은 애플리케이션이 고유 한 값을 포함하기 위해 테이블의 각 행을 요구하고 시퀀스를 생성하는 쉬운 방법을 제공하기 때문에 시퀀스는 데이터베이스에서 자주 사용됩니다.

이 장에서는 MySQL에서 시퀀스를 사용하는 방법을 설명합니다.

AUTO_INCREMENT 컬럼 사용

MySQL에서 시퀀스를 사용하는 가장 간단한 방법은 열을 다음과 같이 정의하는 것입니다. AUTO_INCREMENT 나머지는 MySQL에 맡기십시오.

다음 예제를 시도해보십시오. 이것은 테이블을 생성하고 그 후에는 MySQL에 의해 자동 증분되기 때문에 레코드 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 값 얻기

그만큼 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 컬럼의 재 배열이 불가피하다고 판단되는 경우이를 수행하는 방법은 테이블에서 컬럼을 삭제 한 다음 다시 추가하는 것입니다.

다음 예는 번호를 다시 매기는 방법을 보여줍니다. id values 이 기술을 사용하여 표에서.

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;