为什么在存储过程中失败时锁定表?

时间:2017-01-13 07:11:50

标签: mysql stored-procedures

我使用存储过程并在mysql v5.1中使用autocommit ON。

 UPDATE client
 SET `status` = '0', withdraw_date = NOW()
 WHERE auth_token = p_auth_token;

 UPDATE order
 SET modate = NOW()
 WHERE client_auth_token = p_auth_token AND `status` = '0'; 
 //raise error no column client_auth_token 

 COMMIT;

调用存储过程时,引发错误,因为订单表中不存在client_auth_token。顺便说一句,记录锁定到客户端表。为什么把锁定到客户端表而不是命令表?

1 个答案:

答案 0 :(得分:0)

我认为这个问题与保留字order有关。见the list of reserved words in mysql 5.1。 您需要在order周围使用引号,就像您对status所做的那样。根据文档:

  

关键字和保留字需要特殊处理才能用作表格和列名称等标识符。

UPDATE `order`
SET modate = NOW()
WHERE client_auth_token = p_auth_token AND `status` = '0';