Mysql过程:SELECT和UPDATE
问题描述:
我正在尝试添加此过程。它给我错误1064(42000)SQL语法。但我不知道在哪里。Mysql过程:SELECT和UPDATE
DELIMITER //
CREATE PROCEDURE disable_expired_users
BEGIN
DECLARE @disable_this INT;
SET @disable_this = SELECT id FROM my_users WHERE TIMESTAMPDIFF(SECOND, NOW(), expire_date) <= 0;
IF NOT @disable_this IS NULL THEN
UPDATE my_users SET is_active = 0 WHERE id IN @disable_this;
END IF;
END; //
答
为什么不干脆
DELIMITER //
CREATE PROCEDURE disable_expired_users
BEGIN
UPDATE my_users
SET is_active = 0
WHERE expire_date < NOW();
END; //
更妙的是 - 不存储冗余数据(is_active=0
VS expire_date<NOW()
) - 简单每当需要检查过期时,请使用expire_date<NOW()
。
如果您是通过工作台反对UPDATE
限制无负担等等等等,做这样的事情:
...
BEGIN
SET @su = @@sql_safe_updates;
SET sql_safe_updates = OFF;
... UPDATEs, etc ...
SET sql_safe_updates = @su;
END //
答
SET @disable_this = SELECT id FROM my_users WHERE TIMESTAMPDIFF(SECOND,
NOW(), expire_date) <= 0;
我觉得问题就在这里。
尝试
SET @disable_this = (SELECT id FROM my_users WHERE
TIMESTAMPDIFF(SECOND, NOW(), expire_date) <= 0);
答
添加括号:
SET @disable_this = (SELECT id FROM my_users WHERE
TIMESTAMPDIFF(SECOND, NOW(), expire_date) <= 0);
错误应包括字符位置。 – user5226582