DB登録時のuser_idの競合について教えて頂きたいです。
$stmt = $pdo->prepare("INSERT INTO user_data(・・・・) VALUES (・・・・)"); $stmt->execute([・・・・]); $user_id = $pdo->lastInsertId(); $programs1 = $_SESSION['join2']['programs1_']; $year1 = $_SESSION['join2']['programs_year1_']; for($i=0;$i<count($programs1);$i++) { $stmt = $pdo->prepare("INSERT INTO user_skill(・・・) VALUES (・・・)"); $stmt->execute([ $user_id, $programs1[$i], $year1[$i] ]); }
プログラムの処理の流れはこうですが、
- user_dataへ登録(ユーザーAによる登録)
- user_skill を作成(ユーザーAによる登録)
例えば銀行のようにミリ秒でDBへのアクセスが頻繁なサービスがあったとします。
- user_dataへ登録(ユーザーAによる登録)
- user_dataへ登録(ユーザーBによる登録)
- user_skill を作成(ユーザーAによる登録)
- user_skillへ登録(ユーザーBによる登録)
lastInsertId()は最後の追加された行のIDを返すとのことですが、この場合、
- user_skill を作成(ユーザーAによる登録)
のuser_idは
2. user_dataへ登録(ユーザーBによる登録)
のIDにならない理由を教えてください。
順序的には
最後に追加された行(lastInsertId()の直近に記述しているテーブル)のIDを返すはずなので
競合しないのは何故かと不思議に思っています。

回答4件
あなたの回答
tips
プレビュー