MySQL中的自动获取时间通常是指在创建表时为某些字段设置默认值或触发器,以便在插入或更新记录时自动填充当前时间。这些字段通常用于记录数据的创建时间和最后修改时间。
created_at
):记录数据插入的时间。updated_at
):记录数据最后更新的时间。可以在创建表时为字段设置默认值为当前时间:
CREATE TABLE example_table (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
在这个例子中:
created_at
字段在插入记录时自动设置为当前时间。updated_at
字段在插入和更新记录时自动设置为当前时间。如果需要更复杂的逻辑,可以使用触发器:
DELIMITER //
CREATE TRIGGER before_example_table_insert
BEFORE INSERT ON example_table
FOR EACH ROW
BEGIN
SET NEW.created_at = NOW();
SET NEW.updated_at = NOW();
END;
CREATE TRIGGER before_example_table_update
BEFORE UPDATE ON example_table
FOR EACH ROW
BEGIN
SET NEW.updated_at = NOW();
END;
DELIMITER ;
在这个例子中:
before_example_table_insert
触发器在插入记录前设置 created_at
和 updated_at
为当前时间。before_example_table_update
触发器在更新记录前设置 updated_at
为当前时间。updated_at
没有自动更新?原因:
ON UPDATE CURRENT_TIMESTAMP
。解决方法:
ON UPDATE CURRENT_TIMESTAMP
:CREATE TABLE example_table (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
DELIMITER //
CREATE TRIGGER before_example_table_update
BEFORE UPDATE ON example_table
FOR EACH ROW
BEGIN
SET NEW.updated_at = NOW();
END;
DELIMITER ;
希望这些信息对你有所帮助!如果有更多问题,请随时提问。
腾讯云数据库TDSQL(PostgreSQL版)训练营
云+社区沙龙online [技术应变力]
腾讯云数据库TDSQL训练营
云+社区沙龙online [国产数据库]
DBTalk技术分享会
腾讯云GAME-TECH游戏开发者技术沙龙
serverless days
Elastic 中国开发者大会
领取专属 10元无门槛券
手把手带您无忧上云