我在存储过程结束时有以下简单的三行:
UPDATE `imthreadmember`
SET `lastUpdate`=CURRENT_TIMESTAMP
WHERE `threadId` = threadId;
但是在proc中运行它,更新imthreadmember
中的所有行。
在控制台中运行相同的三行,仅更新具有threadId
的行。
在此语句之前插入select threadId;
将返回正确的id。
我正在努力弄清楚如何解决这个问题。
imthreadmember
中的行是在同一个proc中创建的,但由于CURRENT_TIMESTAMP
每个表只能用作默认值,我必须单独更新此列,默认值为{{ 1}}列。
答案 0 :(得分:4)
您的变量名称与列名称相同。根据MySQL的范围规则,该列正在与自身进行比较。
将{em>存储过程中使用的所有变量添加到v_
之类的习惯是一个好习惯。因此查询应如下所示:
UPDATE `imthreadmember`
SET `lastUpdate`=CURRENT_TIMESTAMP
WHERE `threadId` = v_threadId;
并且,作为推论,永远不要命名以v_
开头的列。