Heim  >  Fragen und Antworten  >  Hauptteil

Geben Sie beim Einfügen das aktuelle Datum ein

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粉764836448P粉764836448332 Tage vor503

Antworte allen(2)Ich werde antworten

  • 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

    希望这对您有所帮助。

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

    它也应该适用于更新

    Antwort
    0
  • StornierenAntwort