我正在尝试为此表添加时间戳列:
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`,
但是没有这些人工作。
答案 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;//