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の例

mysql_insertid属性を使用してAUTO_INCREMENTの値を取得します。 以下の例を示します:

$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(3) NOT NULL, 
    -> date DATE NOT NULL,
    -> origin VARCHAR(3) NOT NULL
)engine=innodb auto_increment=100 charset=utf8;

またはテーブルの作成が完了した後、以下の文を実行することもできます:

mysql> ALTER TABLE t AUTO_INCREMENT = 100;