2013-01-21 42 views
0

这里是我的表一表读取数据在MySQL中锁定问题。我需要从我获得锁

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

我要到将数据插入到这三张表逐一在一个事务中,使生成的ID在test1中将被引用在test2中等等。但我的问题是多个用户可能一次访问同一页面。那时候,一位研究员的身份证正在引用他人的记录。我的数据库有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

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