这是我的桌子

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


我想将数据一对一地插入到这三个表中,以便在test1中生成的id将在test2中引用,依此类推。但我的问题是多个用户可能一次访问同一页面。当时,一个同伴的ID正在引用另一个同伴的记录。我的数据库具有autocommit = 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的值,则工作正常。其他一切工作正常。

最佳答案

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

10-08 10:48