以下SQL更新语句在使用“default”关键字时起作用:
UPDATE User SET expDate = DEFAULT WHERE ID=19
但是,当我添加条件时会发出SYNTAX错误(代码1064):
UPDATE User SET expDate = IF(expDate > NOW(), DEFAULT, expDate) WHERE ID=19
DEFAULT
列DATETIME
的{{1}}值为expDate
在这种情况下,正确的语法应该是什么?
错误:
错误代码:1064。您的SQL语法有错误;检查 手册,对应右边的MySQL服务器版本 在'expDate'附近使用的语法在第1行WHERE ID = 19'
答案 0 :(得分:1)
DEFAULT
是一个关键字。不是变量。它不能用作表达式的一部分。
http://dev.mysql.com/doc/refman/5.0/en/update.html
每个值都可以作为表达式或关键字DEFAULT to给出 将列明确设置为其默认值。
在您的特定情况下,您可以在交易中执行两个更新:
START TRANSACTION
SET @n = NOW()
UPDATE User SET expDate = DEFAULT WHERE ID=19 AND expDate > @n
UPDATE User SET expDate = expDate WHERE ID=19 AND expDate <= @n
COMMIT