如何使用DateTime列设置MySql架构,使其值始终为上次插入/更新此行的时间?
答案 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 ;