【问题标题】:DEFAULT syntax error默认语法错误
【发布时间】:2017-05-19 04:59:51
【问题描述】:

我想在 mySQL 表上为 datetime 列的默认值添加一个约束,就像 here,但解决问题的命令对我不起作用。

我创建了我的表:

create table `transactions`
      ( `id` int NOT NULL AUTO_INCREMENT, 
        `timeTransaction` DATETIME, 
        `montant` int, 
        `donneur` varchar(50), 
        `receveur` varchar(200), 
        primary key(`id`));

当我尝试时

ALTER TABLE transactions ADD CONSTRAINT DF_TIME_TRANS DEFAULT GETDATE() FOR timeTransactions;

它总是在 DEFAULT 上返回一个语法错误:

ERROR 1064 (42000):您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的“DEFAULT GETDATE() FOR timeTransactions”附近使用正确的语法

我尝试在创建表期间定义约束,但我仍然卡在 DEFAULT 上。知道为什么会这样吗?

【问题讨论】:

  • 不要对 MySQL 使用 SQL Server 语法
  • 在 MySQL 中你使用DEFAULT CURRENT_TIMESTAMP。

标签: mysql


【解决方案1】:

不能将GETDATE() 函数用作默认值。

使用 TIMESTAMP 和 DATETIME 列,您可以指定 DEFAULT CURRENT_TIMESTAMP,作为 CREATE TABLE 的一部分,或使用 ALTER TABLE 来修改列定义

ALTER TABLE `transactions`
  CHANGE `timeTransaction` `timeTransaction` DATETIME DEFAULT CURRENT_TIMESTAMP ;

您还可以使用CURRENT_TIMESTAMP 的有效同义词之一。 (并且GETDATE() 不是有效的同义词之一。)

在 MySQL 5.6.x 之前,只有 TIMESTAMP 列可以有 DEFAULT CURRENT_TIMESTAMP。在 MySQL 5.6 中,对它的支持扩展到 DATETIME 数据类型。

有关您正在运行的 MySQL 版本,请参阅 MySQL 参考手册。

http://dev.mysql.com/doc/refman/5.6/en/timestamp-initialization.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多