时间戳默认值与current_timestamp不同

时间:2015-07-27 09:54:08

标签: mysql timestamp default-value

我正在尝试为此表添加时间戳列:

CREATE TABLE `task` (
   `id` int(11) NOT NULL AUTO_INCREMENT,
   `name` varchar(45) NOT NULL,
   `timecreated` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
   `session` varchar(45) NOT NULL,
   PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

然后我尝试执行此代码以添加另一个具有不同默认值的时间戳列:

ADD COLUMN `timeexpiration` TIMESTAMP NOT NULL DEFAULT TIMESTAMPADD(MINUTE, 15, CURRENT_TIMESTAMP)
ERROR 1064: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'TIMESTAMPADD(MINUTE, 15, CURRENT_TIMESTAMP) AFTER `timecreated`,'

ADD COLUMN `timeexpiration` TIMESTAMP NOT NULL DEFAULT (CURRENT_TIMESTAMP + INTERVAL 15 MINUTE) AFTER `timecreated`'
ERROR 1064: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(CURRENT_TIMESTAMP + INTERVAL 15 MINUTE) AFTER `timecreated`,

但是没有这些人工作。

3 个答案:

答案 0 :(得分:1)

5.6.1之前的MySQL版本不会在同一个表中放置两个TIMESTAMP列,除非你正确地注意到默认值并允许空值。

MySQL 5.6。+允许表中的两个或多个TIMESTAMP列。

答案 1 :(得分:1)

Aman如何说,不可能在同一个表中使用两个时间戳。你可以改用DATETIME。试试这样的事情,

ALTER TABLE task ADD COLUMN `timeexpiration` DATETIME DEFAULT NULL AFTER timecreated;

也许这有帮助。

提示:您必须删除PRIMARY KEY(id)之后的最后一个字段的结尾,

答案 2 :(得分:1)

您不能拥有两个使用CURRENT_TIMESTAMP的默认值的时间戳列,但是您可以在插入之前使用触发器:

ALTER TABLE task
ADD COLUMN `timeexpiration` TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00';

DELIMITER //
CREATE TRIGGER task_timeexpiration_default BEFORE INSERT ON task FOR EACH ROW
BEGIN
    SET NEW.`timeexpiration` = TIMESTAMPADD(MINUTE, 15, CURRENT_TIMESTAMP);
END;//