我有一个具有以下结构的表:
+----+-------------+----------------+------------+------------+
| 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()
作为字符串。
Update这是一个示例查询:
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;
不过,我不确定数据类型。
根据您的需求,这将适合您:
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()
它也应该适用于更新
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)