[ MySQL ] 最新の auto_increment の値を取得する ( last_insert_id )

Pocket

ここでは、auto_increment 列で自動採番された最新の値を取得するサンプルを掲載しています。

スポンサーリンク

MySQL には Oracle のようにシーケンスが存在しないので一意な値を扱う場合には、auto_increment 列を定義して、自動で数字を採番することが多いです。というよりも、Oracle に auto_increment の機能がないといったほうが正確でしょうか。

Oracle 12c から Oracle でも auto_increment に対応しようようです。

テーブル定義

ここでは、以下のテーブルが定義されているものとします。

create table `db`.`table1` (
  `id`   int(11) not null auto_increment,
  `str` char(1), 
  PRIMARY KEY (`id`) 
)ENGINE=INNODB;
最新の auto_increment 値の取得

自動採番された値を取得するには、last_insert_id を使用します。

-- レコードを挿入
insert into table1(str) values('0');

-- 自動採番されたid列を取得
select last_insert_id();

なお、select last_insert_id() from table1 のようにテーブル名を SQL に入れてもエラーが発生します。テーブル名は必要ありません。

SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax;
check the manual that corresponds to your MySQL server version for the right syntax to use near ・・・

AUTO_INCREMENT 列の定義はプライマリキーにする

備忘録用の参考情報となりますがテーブル作成時に AUTO_INCREMENT 列はプライマリキーとする必要があります。プライマリキーとしない場合には下記のようにテーブルの作成でエラーとなります。

mysql> create table sample_table (
    ->    id         int unsigned not null auto_increment,
    ->    name       varchar(256)
    -> );
ERROR 1075 (42000): Incorrect table definition; there can be only one auto column 
and it must be defined as a key
スポンサーリンク


Pocket

Leave a Comment

Your email address will not be published. Required fields are marked *