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

时间:2014-02-03 15:17:05

标签: mysql sql stored-procedures

我在存储过程结束时有以下简单的三行:

UPDATE `imthreadmember`
   SET `lastUpdate`=CURRENT_TIMESTAMP
 WHERE `threadId` = threadId;

但是在proc中运行它,更新imthreadmember中的所有行。 在控制台中运行相同的三行,仅更新具有threadId的行。 在此语句之前插入select threadId;将返回正确的id。

我正在努力弄清楚如何解决这个问题。

imthreadmember中的行是在同一个proc中创建的,但由于CURRENT_TIMESTAMP每个表只能用作默认值,我必须单独更新此列,默认值为{{ 1}}列。

1 个答案:

答案 0 :(得分:4)

您的变量名称与列名称相同。根据MySQL的范围规则,该列正在与自身进行比较。

将{em>存储过程中使用的所有变量添加到v_之类的习惯是一个好习惯。因此查询应如下所示:

UPDATE `imthreadmember`
   SET `lastUpdate`=CURRENT_TIMESTAMP
 WHERE `threadId` = v_threadId;

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