オートインクリメントで実現できます。
https://dev.mysql.com/doc/refman/5.6/ja/example-auto-increment.html
last_insert_id()関数について
last_insert_id()
関数にFROM
句は不要です。
公式のリファレンスによると、引数なしのlast_insert_id()
の戻り値は
最近実行された INSERT ステートメントの結果として、最初に自動的に生成され、正常に AUTO_INCREMENT カラムに挿入された値を表す 64 ビット値
だからです。
https://dev.mysql.com/doc/refman/5.6/ja/information-functions.html#function_last-insert-id
なにやら難しいことを言っていますが、要するに
「最後に実行されたINSERT
文で挿入されたレコードのうち、
(レコードが複数ある場合は)最初に挿入されたレコードのオートインクリメント値」
が返却されるわけで、テーブルを指定することができないためです。
sql
1mysql> CREATE TABLE sample1 (id INT PRIMARY KEY AUTO_INCREMENT);
2Query OK, 0 rows affected (0.01 sec)
3
4# sample2テーブルはオートインクリメントを11から開始
5mysql> CREATE TABLE sample2 (id INT PRIMARY KEY AUTO_INCREMENT) AUTO_INCREMENT = 11;
6Query OK, 0 rows affected (0.01 sec)
7
8
9mysql> INSERT INTO sample1 VALUES ();
10Query OK, 1 row affected (0.01 sec)
11
12mysql> INSERT INTO sample2 VALUES ();
13Query OK, 1 row affected (0.00 sec)
14
15
16# "FROM sample1"を付けても、返却されるのは最後にインサートしたsample2テーブルのオートインクリメント値
17mysql> SELECT last_insert_id() FROM sample1;
18+------------------+
19| last_insert_id() |
20+------------------+
21| 11 |
22+------------------+
231 row in set (0.00 sec)
24
25mysql> SELECT last_insert_id();
26+------------------+
27| last_insert_id() |
28+------------------+
29| 11 |
30+------------------+
311 row in set (0.00 sec)
加えて、FROM
句を付けると、指定したテーブルに格納されているレコードの数だけ、結果セットの行が返ってしまいます。
sql
1mysql> INSERT INTO sample1 VALUES (), (), ();
2Query OK, 3 rows affected (0.00 sec)
3Records: 3 Duplicates: 0 Warnings: 0
4
5mysql> SELECT last_insert_id() FROM sample1;
6+------------------+
7| last_insert_id() |
8+------------------+
9| 2 |
10| 2 |
11| 2 |
12| 2 |
13+------------------+
144 rows in set (0.00 sec)
15
16mysql> SELECT last_insert_id();
17+------------------+
18| last_insert_id() |
19+------------------+
20| 2 |
21+------------------+
221 row in set (0.00 sec)
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/10/31 10:59
2015/10/31 11:42
2015/10/31 16:40