在插入时插入当前日期

时间:2016-11-17 13:42:38

标签: mysql sql

我有一个具有以下结构的表:

+----+-------------+----------------+------------+------------+
| 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; 

虽然,我不确定数据类型。

4 个答案:

答案 0 :(得分:3)

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

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

希望这可以帮助你。

答案 1 :(得分:3)

根据您的需要,这将对您有用:

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()

它也适用于更新

答案 2 :(得分:1)

很遗憾,您无法将MySQL DATE字段默认为curdate()。以下选项可用于mysql:

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

  2. 在5.6.5 TIMESTAMP(每个表只能退出一个自动更新)之前,只要修改了字段,就会更新字段。

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

答案 3 :(得分:-1)

1)我们需要查看您当前查询的新行。

2)插入行后,您可以在更新CURRENT TIMESTAMP"上将列edited更改为"在phpmyadmin内。要执行此操作,请转到您的表格,单击"结构"表格上方的标签,找到列"编辑"然后点击"更改"在那一栏上。然后,根据"属性"设置,您应该能够在更新CURRENT TIMESTAMP"时选择"。然后只需保存更改并进行测试。