1

これは現実の問題ではないかもしれませんが、学習トピックのようなものです。

PHP、MySQL、および PDO を使用して、auto_increment と lastInsertId() についてすべて知っています。主キーには auto_incerment 属性がなくSELECT MAX(id) FROM table、最後の ID を取得し、手動でインクリメントしてからINSERT INTO table (id) VALUES (:lastIdPlusOne). コード全体をbeginTransactionandで囲みますcommit

このアプローチは安全ですか?ユーザー A と B が同時にこのスクリプトをロードすると、最後はどうなりますか? 両方のトランザクションが失敗しますか? それとも両方とも成功しますか (たとえば、最後の ID が 10 の場合、A は 11 を挿入し、B は 12 を挿入します)?

私は PHP と MySQL の開発者であるため、この場合の MySQL の動作に関心があることに注意してください。

4

2 に答える 2