SQL-시퀀스 사용

시퀀스는 요청시 순서대로 생성되는 정수 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 값의 번호를 다시 매기는 방법을 보여줍니다.

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;