存储过程中的更新表更新所有行

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列。

Gor*_*off 5

变量的名称与列的名称相同。根据 MySQL 的作用域规则,该列将与其自身进行比较。

在存储过程中使用的所有变量前面加上诸如v_. 所以查询应该如下所示:

UPDATE `imthreadmember`
   SET `lastUpdate`=CURRENT_TIMESTAMP
 WHERE `threadId` = v_threadId;
Run Code Online (Sandbox Code Playgroud)

并且,作为推论,永远不要命名以 开头的列v_