首頁  >  問答  >  主體

插入時插入目前日期

我有一個具有以下結構的表:

+----+-------------+----------------+------------+------------+
| 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粉764836448P粉764836448383 天前536

全部回覆(2)我來回復

  • P粉277305212

    P粉2773052122023-10-25 09:21:57

    嘗試如下修改您的架構

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

    希望這對您有幫助。

    回覆
    0
  • P粉009828788

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

    它也應該適用於更新

    回覆
    0
  • 取消回覆