A.G*_*ndt 1 mysql sql stored-procedures
我在存储过程的末尾有以下简单的三行:
UPDATE `imthreadmember`
SET `lastUpdate`=CURRENT_TIMESTAMP
WHERE `threadId` = threadId;
Run Code Online (Sandbox Code Playgroud)
但是,在过程中运行此命令会更新imthreadmember. 在控制台中运行相同的三行,仅更新带有该 的行threadId。在此语句之前插入 aselect threadId;会返回正确的 id。
我已经结束了,想知道如何解决这个问题。
中的行imthreadmember是在同一过程中较早创建的,但由于CURRENT_TIMESTAMP每个表只能用作默认值一次,因此我必须单独更新此列,因此默认值将转到该created列。
变量的名称与列的名称相同。根据 MySQL 的作用域规则,该列将与其自身进行比较。
在存储过程中使用的所有变量前面加上诸如v_. 所以查询应该如下所示:
UPDATE `imthreadmember`
SET `lastUpdate`=CURRENT_TIMESTAMP
WHERE `threadId` = v_threadId;
Run Code Online (Sandbox Code Playgroud)
并且,作为推论,永远不要命名以 开头的列v_。