スポンサーリンク
本当にわからないとこがあった場合一人では解決できません。『teratail』とはエンジニア特化型のQ&Aサイトです。 すべてのエンジニアさんが抱えている悩みを共有して 解決するための質問サイトです

シーケンスの使用
シーケンスは、オンデマンドで順番に生成される整数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,debut) VALUES -> (NULL,'yamada','2001-09-10','kitchen'), -> (NULL,'tanaka','2001-09-10','driveway'), -> (NULL,'yoshida','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 | debut | +----+-------------+------------+------------+ | 1 | yamada | 2001-09-10 | kitchen | | 2 | tanaka | 2001-09-10 | driveway | | 3 | yoshida | 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;