Heim > Fragen und Antworten > Hauptteil
Ich habe eine Tabelle mit folgendem Aufbau:
+----+-------------+----------------+------------+------------+ | 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 | +----+-------------+----------------+------------+------------+
Beim Einfügen eines neuen Eintrags sollte das aktuelle Datum in die Spalte inserted
eingefügt werden. Es sollte sich nie ändern.
Beim Bearbeiten eines Eintrags sollte das aktuelle Datum zur Spalte edited
hinzugefügt werden und das Datum sollte jedes Mal aktualisiert werden, wenn dieser Eintrag bearbeitet wird.
Mein Ansatz bestand darin, in beiden Fällen den Datentyp zu definieren date
并将标准值更改为 CURDATE()
。但相反,只是将 CURDATE()
, der als String eingefügt werden soll.
UPDATE Hier ist eine Beispielabfrage:
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;
Über den Datentyp bin ich mir allerdings nicht sicher.
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()
它也应该适用于更新