0

这是我的桌子

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

我想在一个事务中将数据一一插入到这三个表中,以便在 test1 中生成的 id 将在 test2 中引用,依此类推。但我的问题是多个用户可能一次访问同一个页面。当时一个人的身份正在另一个人的记录中引用。我的数据库有自动提交=1。为此,我首先通过锁定这些表来锁定。然后我尝试执行上述操作,以便用户等到其以前的详细信息被存储。尽管它接受数据并将其保留在队列中。

它正在工作,但我没有在这些表中的任何一个中启用 auto_increment(我无法修改它们,因为我没有更改数据库的权限)。

我试过这样

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

如果这是将行插入表的唯一方法,您可以尝试先选择新 ID max(tno),然后锁定表READ,然后插入新行。之后解锁READ

于 2013-01-21T14:25:44.660 回答