Hatena::Groupnysql

MySQL初心者日記

カテゴリー
 | 

2008-12-09

select last_insert_id()

| 04:55 | select last_insert_id() - MySQL初心者日記 を含むブックマーク はてなブックマーク - select last_insert_id() - MySQL初心者日記

auto_incrementなテーブルのレコードを自動採番でinsertした後、select last_insert_id()を実行すると、最後にinsertしたauto_incrementなカラムの値が返ってくる。

※ 注意:自動採番で、というところがポイント。自働採番しないで、auto_incrementに値を指定してinsertした場合は取得することができない。

実験してみる。


ターミナルターミナルAとします)を開いて、以下の作業を実施。

mysql> create table hoge (id int auto_increment, name text, primary key(id));
Query OK, 0 rows affected (0.00 sec)

mysql> desc hoge;
+-------+---------+------+-----+---------+----------------+
| Field | Type    | Null | Key | Default | Extra          |
+-------+---------+------+-----+---------+----------------+
| id    | int(11) | NO   | PRI | NULL    | auto_increment |
| name  | text    | YES  |     | NULL    |                |
+-------+---------+------+-----+---------+----------------+
2 rows in set (0.01 sec)

mysql> insert into hoge (name) values('aaa');
Query OK, 1 row affected (0.00 sec)

mysql> insert into hoge (name) values('bbb');
Query OK, 1 row affected (0.00 sec)

mysql> insert into hoge (name) values('ccc');
Query OK, 1 row affected (0.01 sec)

mysql> select * from hoge;
+----+------+
| id | name |
+----+------+
|  1 | aaa  |
|  2 | bbb  |
|  3 | ccc  |
+----+------+
3 rows in set (0.00 sec)

別のターミナルターミナルB)を開いて以下の作業を実施。

mysql> insert into hoge (name) values('ddd');
Query OK, 1 row affected (0.00 sec)

mysql> select last_insert_id();
+------------------+
| last_insert_id() |
+------------------+
|                4 |
+------------------+
1 row in set (0.00 sec)

最初のターミナルAで以下の作業を実施。

mysql> select last_insert_id();
+------------------+
| last_insert_id() |
+------------------+
|                3 |
+------------------+
1 row in set (0.00 sec)

結論。

select last_insert_id()は今接続されているセッションにおいて最後にinsertされたidを取ってくるらしい。

次のauto_increment値を知る方法は以下のとおり(Auto_incrementの箇所を確認する)

mysql> show table status like 'hogehoge'\G;
*************************** 1. row ***************************
           Name: hogehoge
         Engine: MyISAM
        Version: 10
     Row_format: Dynamic
           Rows: 5
 Avg_row_length: 20
    Data_length: 100
Max_data_length: 281474976710655
   Index_length: 2048
      Data_free: 0
 Auto_increment: 6
    Create_time: 2008-12-25 00:41:03
    Update_time: 2008-12-25 00:54:29
     Check_time: NULL
      Collation: latin1_swedish_ci
       Checksum: NULL
 Create_options:
        Comment:
1 row in set (0.00 sec)

ERROR:
No query specified

※ 現在の値ではないので要注意!