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スクリプトでも、最終的に挿入されたテーブルの自增カラムの値を取得するための関数が提供されています。
mysql_insertid属性を使用してAUTO_INCREMENTの値を取得します。 以下の例を示します:
$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(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;