MySQLi-시퀀스 사용

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

AUTO_INCREMENT 컬럼 사용

MySQLi에서 Sequences를 사용하는 가장 간단한 방법은 열을 AUTO_INCREMENT로 정의하고 나머지는 MySQLi에 맡기는 것입니다.

다음 예제를 시도해보십시오. 그러면 테이블이 생성되고 그 후에는 MySQLi에 의해 자동 증분되기 때문에 레코드 ID를 제공 할 필요가없는이 테이블에 몇 개의 행이 삽입됩니다.

mysql>CREATE TABLE tutorials_auto(
   id INT UNSIGNED NOT NULL AUTO_INCREMENT, name VARCHAR(30) NOT NULL,PRIMARY KEY(id));
Query OK, 0 rows affected (0.28 sec)

mysql>INSERT INTO tutorials_auto(id,name) VALUES(NULL,'sai'),(NULL,'ram');
Query OK, 2 rows affected (0.12 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> SELECT * FROM insect ORDER BY id;
+----+------+
| id | name |
+----+------+
|  1 | sai  |
|  2 | ram  |
+----+------+
2 rows in set (0.05 sec)

AUTO_INCREMENT 값 얻기

LAST_INSERT_ID ()는 SQL 함수이므로 SQL 문을 실행하는 방법을 이해하는 모든 클라이언트 내에서 사용할 수 있습니다. 그렇지 않으면 PERL 및 PHP 스크립트는 마지막 레코드의 자동 증가 값을 검색하는 독점 기능을 제공합니다.

PERL 예

mysql_insertid 속성을 사용하여 쿼리에 의해 생성 된 AUTO_INCREMENT 값을 가져옵니다. 이 속성은 쿼리를 실행하는 방법에 따라 데이터베이스 핸들 또는 명령문 핸들을 통해 액세스됩니다. 다음 예제는 데이터베이스 핸들을 통해이를 참조합니다.

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

PHP 예

AUTO_INCREMENT 값을 생성하는 쿼리를 실행 한 후 mysql_insert_id ()를 호출하여 값을 검색합니다.

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

기존 시퀀스 번호 다시 매기기

테이블에서 많은 레코드를 삭제하고 모든 레코드를 다시 정렬하려는 경우가있을 수 있습니다. 이것은 간단한 트릭을 사용하여 수행 할 수 있지만 테이블이 다른 테이블과 조인하는 경우 매우주의해야합니다.

AUTO_INCREMENT 열을 다시 시퀀싱하는 것이 불가피하다고 판단되면이를 수행하는 방법은 테이블에서 열을 삭제 한 다음 다시 추가하는 것입니다. 다음 예제는이 기술을 사용하여 곤충 테이블에서 ID 값을 다시 번호를 매기는 방법을 보여줍니다.

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

특정 값에서 시퀀스 시작

기본적으로 MySQLi는 1부터 시퀀스를 시작하지만 테이블 생성시 다른 숫자도 지정할 수 있습니다. 다음은 MySQLi가 100부터 시퀀스를 시작하는 예입니다.

mysql> CREATE TABLE tutorials_auto
   -> (
   -> id INT UNSIGNED NOT NULL AUTO_INCREMENT = 100,
   -> PRIMARY KEY (id),
   -> name VARCHAR(30) NOT NULL, 
   -> );

또는 테이블을 만든 다음 ALTER TABLE을 사용하여 초기 시퀀스 값을 설정할 수 있습니다.

mysql> ALTER TABLE tutorials_auto AUTO_INCREMENT = 100;