2012-08-16 48 views
2

我试图得到这个工作,但得到一个错误t_write was not locked.表锁读写ALIAS

我更新山坳make从最高值的山坳snsn + 1

LOCK TABLES 1_makes AS t_read READ, 1_makes as t_write WRITE; 

UPDATE t_write 
SET 
    make = 'Pioneer', 
    sn = (SELECT 
      * 
     from 
      (SELECT 
       MAX(sn) 
      FROM 
       t_read 
      WHERE 
       id <> 0) as new_sn) + 1 
WHERE 
    id = 2; 

UNLOCK TABLES; 

回答

3

如何这一点:

LOCK TABLES 1_makes WRITE, 1_makes AS t_read READ; 

UPDATE 1_makes 
SET 
    make = 'Pioneer', 
    sn = (SELECT 
      * 
     from 
      (SELECT 
       MAX(sn) 
      FROM 
       1_makes AS t_read 
      WHERE 
       id <> 0) as new_sn) + 1 
WHERE 
    id = 2; 

UNLOCK TABLES; 
+0

非常感谢。作品一种享受。 – 2012-08-16 15:17:26

+0

如果答案是有帮助的,我可以建议接受它? )首先,它可能为其他一些人节省一些时间;其次,我们都得到了一些好的提振。 ) – raina77ow 2012-08-16 15:42:50

+0

是否可以“告诉” MySQL来自动执行此操作上'UPDATE'(每次不使用'trigger')?或者我将不得不在我的PHP查询中实现这个? – mdthh 2013-01-30 13:53:20