在Mysql中锁定问题。我需要从我获得锁的表中读取数据

时间:2013-01-21 13:58:19

标签: mysql locking database

这是我的表格

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

我想在一个事务中逐个将数据插入到这三个表中,以便test1中生成的id将在test2中引用,依此类推。但我的问题是多个用户可能会同时访问同一页面。那个时候,一个人的身份正在另一个人的记录中提到。我的db有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的值,它工作正常。其他一切都很好。

1 个答案:

答案 0 :(得分:1)

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