使用Now()作为MySql DateTime类型的默认值

时间:2009-09-30 13:19:15

标签: mysql datetime

如何使用DateTime列设置MySql架构,使其值始终为上次插入/更新此行的时间?

4 个答案:

答案 0 :(得分:8)

您可以改为使用TIMESTAMP并将ON UPDATE CURRENT_TIMESTAMP设置为NOT NULL,例如:

CREATE TABLE example (
lastUpdate TIMESTAMP ON UPDATE CURRENT_TIMESTAMP NOT NULL 
);

答案 1 :(得分:4)

Anax很接近,但错过了默认值。

CREATE TABLE example (
lastUpdate TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP NOT NULL
)

答案 2 :(得分:2)

与Anax一样,使用TIMESTAMP代替DATETIME会为您提供一个使用当前时间的列,而不是等待提供的日期/时间。

你有很多options with TIMESTAMP,最重要的两个是:

  • 在创建行时使用当前时间(NOW()),
  • 将列修改为修改行的当前时间。

如果您没有设置任何选项,请执行以下操作:

 CREATE TABLE stuff (ts TIMESTAMP);

它将在创建当前时间和更改该列进行修改。

因此,如果您想要一个仅在创建时显示的列,您可以使用:

 CREATE TABLE stuff (ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP);

由于您尚未指定ON UPDATE子句,因此如果更新行,它将不会执行任何操作。

如果你像我一样疯了,你会想要两个,然后去:

 CREATE TABLE stuff (create_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
                     mod_date TIMESTAMP
                    );

由于我还没有写出来,最后一个相当于写出:

 CREATE TABLE stuff (create_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
                     mod_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP
                                        ON UPDATE CURRENT_TIMESTAMP
                    );

答案 3 :(得分:1)

您可以使用触发器执行此操作:

DELIMITER $$
CREATE TRIGGER `before_update` BEFORE UPDATE ON `table_name` FOR EACH ROW BEGIN
 SET NEW.update_date = NOW();
END;
$$

CREATE TRIGGER `before_insert` BEFORE INSERT ON `table_name` FOR EACH ROW BEGIN
 SET NEW.update_date = NOW();
END;
$$

DELIMITER ;