我有一個具有以下結構的表:
+----+-------------+----------------+------------+------------+ | 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()
它也應該適用於更新