0

当使用“default”关键字时,以下 SQL 更新语句有效:

UPDATE User SET expDate = DEFAULT WHERE ID=19

但是,当我添加条件时会发出 SYNTAX 错误(代码 1064):

UPDATE User SET expDate = IF(expDate > NOW(), DEFAULT, expDate) WHERE ID=19

列的DEFAULT值为_DATETIMEexpDate"0000-00-00 00:00:00"

在这种情况下,正确的语法应该是什么?

错误:

错误代码:1064。您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的 'expDate) WHERE ID=19' 附近使用正确的语法

4

1 回答 1

1

DEFAULT是一个关键字。不是变量。它不能用作表达式的一部分。

http://dev.mysql.com/doc/refman/5.0/en/update.html

每个值都可以作为表达式给出,也可以使用关键字 DEFAULT 将列显式设置为其默认值。

在您的特定情况下,您可能会在事务中执行两次更新:

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
于 2013-08-22T13:53:11.273 回答