0

2 つのクエリが同時に開始され、複数の行が挿入される場合、ID が隣接することが保証されますか? たとえば、クエリ 1 は行 a、b、c を挿入し、クエリ 2 - 行 c、d、e を挿入します。クエリ 1 が終了し、insertId が 1 であると報告されます。これは常に、行 a が ID 1、b - 2、c - 3 で挿入されたことを意味しますか、それとも a が ID 1 で c が ID 2 である可能性がありますか?

4

1 に答える 1

0

どうやらそれは InnoDB に当てはまります:

自動インクリメント カウンターにアクセスする場合、 InnoDB は、トランザクションの最後ではなく、現在の SQL ステートメントの最後まで保持する特別なテーブル レベルの AUTO-INC ロックを使用します。AUTO_INCREMENT 列を含むテーブルへの挿入の同時実行性を向上させるために、特別なロック解放戦略が導入されました。ただし、2 つのトランザクションが同じテーブルに同時に AUTO-INC ロックを設定することはできず、AUTO-INC ロックが長時間保持されるとパフォーマンスに影響を与える可能性があります。これは、INSERT INTO t1 ... SELECT ... FROM t2 など、あるテーブルのすべての行を別のテーブルに挿入するステートメントの場合に当てはまります。

http://dev.mysql.com/doc/refman/5.6/en/innodb-auto-increment-traditional.html

myisam については不明

于 2013-10-21T11:21:02.800 に答える