这是我的 table
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
。
关于mysql - Mysql中的锁问题。我需要从我获取锁的表中读取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14440237/