我有一个具有以下结构的表:
+----+-------------+----------------+------------+------------+ | 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;
不过,我不确定数据类型。
P粉2773052122023-10-25 09:21:57
尝试如下修改您的架构
`inserted` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, `edited` timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
希望这对您有所帮助。
P粉0098287882023-10-25 00:36:08
根据您的需求,这将适合您:
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()
它也应该适用于更新