我有一张桌子,我需要firstmod和lastmod
firstmod需要是创建行的时间戳。 lastmod需要将自己更新为当前时间。
这是我到目前为止所拥有的......
CREATE TABLE IF NOT EXISTS `SiteGen_JamesM_Live`.`PAGES` (
`ID` INT(11) NOT NULL AUTO_INCREMENT ,
`USER_ID` INT(11) NOT NULL ,
`TITLE` VARCHAR(100) NOT NULL ,
`HTML` LONGTEXT NOT NULL ,
`FIRSTMOD` TIMESTAMP NOT NULL DEFAULT 0 ,
`LASTMOD` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ,
PRIMARY KEY (`ID`) )
ENGINE = InnoDB
AUTO_INCREMENT = 5
DEFAULT CHARACTER SET = latin1
这就是我得到的回报:
Executing SQL script in server
ERROR: Error 1067: Invalid default value for 'FIRSTMOD'
答案 0 :(得分:0)
即使我不熟悉MySQL,我也会冒回答的风险。
我假设应该定义lastmod列:
`LASTMOD` TIMESTAMP NOT NULL ON UPDATE CURRENT_TIMESTAMP ,
没有指定DEFAULT。它的默认值将来自ON UPDATE子句。
编辑:
哎呀,不应冒这些风险。从手册:不可能有 当前时间戳是默认值 一列和自动更新 另一列的价值。
答案 1 :(得分:0)
表格中只能有一列CURRENT_TIMESTAMP
。你必须选择,它是DEFAULT(插入时)还是ON UPDATE(或者你可以有两个修饰符,但是在一列中)。
有一个技巧可以同时拥有,但由于它没有文档,它也是不可靠的(实际上我不确定它是否仍然有效)。
在此处查看更多内容:http://dev.mysql.com/doc/refman/5.5/en/timestamp.html
对于表中的一个TIMESTAMP列, 您可以分配当前时间戳 作为默认值和 自动更新值。有可能 将当前时间戳设为 初始化的默认值 列,用于自动更新值,或 都。这是不可能的 当前时间戳是默认值 一列和自动更新 另一栏的价值
作为一种变通方法,您可以使用BEFORE INSERT或BEFORE UPDATE触发器来设置其中一个值。
答案 2 :(得分:0)
试试这个:
`FIRSTMOD` TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00' ,
`LASTMOD` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ,
然后在你的插页中
INSERT INTO PAGES (FIRSTMOD, LASTMOD) VALUES (NULL, NULL)
FIRSTMOD列应该在插入时获得有效的时间戳,LASTMOD应该在此后自动更新。
答案 3 :(得分:0)
试试这个
CREATE TABLE IF NOT EXISTS `PAGES` (
`ID` INT(11) NOT NULL AUTO_INCREMENT ,
`USER_ID` INT(11) NOT NULL ,
`TITLE` VARCHAR(100) NOT NULL ,
`HTML` LONGTEXT NOT NULL ,
`FIRSTMOD` datetime NOT NULL,
`LASTMOD` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ,
PRIMARY KEY (`ID`) )
ENGINE = InnoDB
AUTO_INCREMENT = 5
DEFAULT CHARACTER SET = latin1
并设置触发器以更新插入
上的FIRSTMODCreate Trigger Insert_PAGES
After INSERT On PAGES
For Each Row
Begin
set new.FIRSTMOD = now();
End
这将在创建记录时设置 firstmod = now()的时间 并且 lastmod 会将其自身更新为当对记录进行更改时的当前时间