0

ここに私のテーブルがあります

test(tno,tname),
test2(t2no,tno,...);
test3(t3no,t2no,y,...);

これらの 3 つのテーブルに 1 つのトランザクションで 1 つずつデータを挿入して、test1 で生成された ID が test2 で参照されるようにしたいと考えています。しかし、私の問題は、複数のユーザーが一度に同じページにアクセスできることです。その時点で、あるフェローの ID が別のフェローのレコードで参照されています。私のデータベースにはautocommit = 1があります。このために、最初にこれらのテーブルをロックしてロックします。次に、ユーザーが以前の詳細が保存されるまで待機するように、上記のことを試みました。ただし、データを受け入れてキューに保持します。

動作していますが、これらのテーブルで auto_increment を有効にしていません (DB を変更する権限がないため、変更できません)。

私はこのようにしてみました

lock table test write,test2 write,test3 write;
mysql> insert into test(tno) select max(tno) from test;
ERROR 1100 (HY000): Table 'test' was not locked with LOCK TABLES.

そのIDの値を静的に指定すると、正常に機能します。他のすべては正常に機能しています。

4

1 に答える 1

1

これが行をテーブルに挿入する唯一の方法である場合は、最初に新しいIDmax(tno)を選択してから、テーブルをロックしてREADから新しい行を挿入してみてください。その後、ロックを解除しREADます。

于 2013-01-21T14:25:44.660 に答える