我在mysql v5.1中使用存储过程并使用自动提交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;
调用存储过程时,引发错误,因为 order 表中不存在client_auth_token
。顺便说一下,将记录锁定到客户端表。为什么把锁锁到客户端表而不是订购表?
我认为这个问题与保留字order
有关。请参阅 mysql 5.1 中的保留字列表。你需要在order
周围使用引号,就像你对status
所做的那样。根据文档:
关键字和保留字需要特殊处理才能用作标识符,例如表名和列名。
UPDATE `order`
SET modate = NOW()
WHERE client_auth_token = p_auth_token AND `status` = '0';