2016-11-17 73 views
2

当前日期我有以下结构的表:插入在插入

+----+-------------+----------------+------------+------------+ 
| id | some column | another column | inserted | edited | 
+----+-------------+----------------+------------+------------+ 
| 1 | ...   | ...   | 2014-08-15 | 2016-03-04 | 
| 2 | ...   | ...   | 2015-09-16 | 2016-10-07 | 
| 3 | ...   | ...   | 2016-10-17 | 2016-11-16 | 
+----+-------------+----------------+------------+------------+ 

当一个新条目被插入,当前日期是否应添加入列inserted。它不应该改变。
编辑条目时,应将当前日期添加到列edited中,每次编辑该条目时都应更新。

我的方法是在两种情况下定义数据类型date并将标准值更改为CURDATE()。相反,只是将CURDATE()作为字符串插入。

更新 这是一个例子查询:

CREATE TABLE `test`.`testtab` 
    ( 
    `id`    INT NOT NULL auto_increment, 
    `some column` VARCHAR(100) NULL, 
    `another column` VARCHAR(100) NULL, 
    `inserted`  VARCHAR(100) NULL DEFAULT 'CURDATE()', 
    `edited`   VARCHAR(100) NULL DEFAULT 'CURDATE()', 
    PRIMARY KEY (`id`) 
) 
engine = innodb; 

虽然,我不知道的数据类型。

+1

什么是查询? –

+0

“插入”的类型是什么? –

+1

hu?!?文本/字符串''CURDATE()'是否允许插入日期数据类型列?这似乎不太可能,除非你的数据库真的被洗净了。我所能想到的是在你的陈述中删除curdate()周围的抽动。并验证插入和编辑都是“日期”数据类型。 – xQbert

回答

2

根据您的需求,这会为你工作:

CREATE TABLE `test`.`testtab` 
    ( 
    `id`    INT NOT NULL auto_increment, 
    `some column` VARCHAR(100) NULL, 
    `another column` VARCHAR(100) NULL, 
    `inserted`  DATETIME DEFAULT CURRENT_TIMESTAMP, 
    `edited`   DATETIME ON UPDATE CURRENT_TIMESTAMP, 
    PRIMARY KEY (`id`) 
) 
engine = innodb; 

然后同时处理只提取日期部分:

DATE_FORMAT(datetime, '%Y-%m-%d') 

您可以使用触发器作为一种变通方法来设置日期时间字段NOW()适用于新插页:

CREATE TRIGGER `triggername` BEFORE INSERT ON `tablename` 
FOR EACH ROW 
SET NEW.datetimefield = NOW() 

它应该也适用于更新

+0

有没有机会,只是存储日期,没有时间? – user1170330

+0

DEFAULT子句指定列的默认值。有一个例外,默认值必须是常数;它不能是一个函数或表达式。这意味着,例如,您不能将日期列的默认值设置为NOW()或CURRENT_DATE等函数的值。例外是您可以指定CURRENT_TIMESTAMP作为TIMESTAMP列的默认值 –

3

尝试修改您的架构如下图所示

`inserted` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, 
`edited` timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP 

希望这会帮助你的。

+0

有没有机会,只是显示日期,没有时间? – user1170330

+0

当你抓取时,你可以将时间修剪为'日期(插入)'和'日期(编辑)'。 – Viki888

+0

使用'DATE'字段而不是'TIMESTAMP' –

-1

1)我们需要查看当前查询,了解如何插入新行。

2)插入行后,您可以将列edited更改为“在phpMyAdmin中更新CURRENT TIMESTAMP”。为此,请转到您的表格,单击表格上方的“结构”选项卡,找到“已编辑”列并单击该列上的“更改”。然后,在“属性”设置下,您应该可以选择“更新CURRENT TIMESTAMP”。然后保存更改并进行测试。

0

不幸的是,您不能将MySQL DATE字段默认为curdate()。以下选项可用于mysql:

  1. 从MySQL 5.6.5开始,您可以使用具有动态默认值的DATETIME类型。对于例如插入DATETIME DEFAULT CURRENT_TIMESTAMP

  2. 在5.6.5 TIMESTAMP之前(每个表只有一个自动更新可以退出)会在字段被修改时更新字段。

参考: http://dev.mysql.com/doc/refman/5.7/en/timestamp-initialization.html