teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

間違ったこと書いてた

2017/03/12 13:17

投稿

mpyw
mpyw

スコア5223

answer CHANGED
@@ -1,7 +1,10 @@
1
1
  いいえ,トランザクション無しでも正しい値が取得されます。**複数のクライアントから同時接続されていても正しい値をとれます。**
2
2
 
3
- - [MySQLの LAST_INSERT_ID の挙動について少し調べてみる - まるまるこふこふ](http://sairoutine.hatenablog.com/entry/2015/01/25/010557)
4
3
  - [MySQL :: MySQL 5.6 リファレンスマニュアル :: 23.8.7.37 mysql_insert_id()](https://dev.mysql.com/doc/refman/5.6/ja/mysql-insert-id.html)
5
4
  - [php-src/mysql_driver.c at 8bc2155bf955eb388e1197a6f5987105aecf5742 · php/php-src](https://github.com/php/php-src/blob/8bc2155bf955eb388e1197a6f5987105aecf5742/ext/pdo_mysql/mysql_driver.c#L289)
6
5
 
7
- `PDO::lastInsertId`は内部的にMySQLのAPIである`mysql_insert_id`関数を使っていますが,これはSQLレベで使う`LAST_INSERT_ID`関数からの呼び出しでも同じです。ゆえ**「LAST_INSERT_ID の挙動について少し調べてみる」**に書かれていることは`PDO::lastInsertId`についても言えます。
6
+ `PDO::lastInsertId`は内部的にMySQLのAPIである`mysql_insert_id`関数を使っていますが,マニュアルに
7
+
8
+ > `mysql_insert_id()` の値は、現在のクライアント接続内で発行されたステートメントによってのみ影響を受けます。それは、ほかのクライアントによって発行されたステートメントに影響を受けません。
9
+
10
+ との記述があり,これによりトランザクションを張らずとも他クライアントの影響を受けないことがわかります。