mysql中是否可以有一个必须来自系统的时间戳约束,并且不能在插入或更新查询中提供?
是否可以使用约束来防止表被更新?我了解如何防止 mysql 用户使用 GRANT 更新表,但在我的情况下,可能首选约束,因为我的目标是保证记录的时间戳,而不管用户包括 root。
mysql中是否可以有一个必须来自系统的时间戳约束,并且不能在插入或更新查询中提供?
是否可以使用约束来防止表被更新?我了解如何防止 mysql 用户使用 GRANT 更新表,但在我的情况下,可能首选约束,因为我的目标是保证记录的时间戳,而不管用户包括 root。
试试这个: MYSQL 有一个约束,表中的单个字段具有默认的 CURRENT_TIMESTAMP 对于插入查询,这将起作用
Create table foo
(
logged_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
但是对于更新,您需要通过triggers
或在您的应用程序代码中以不同的方式处理它
您可以做的是覆盖INSERT
并UPDATE
使用触发器的值
因此,无论查询设置什么,您所需的时间戳字段的值将始终是系统时间。
DELIMITER ;;
CREATE TRIGGER before_yourtable_insert
BEFORE INSERT ON yourtable
FOR EACH ROW
BEGIN
SET NEW.datefield := CURRENT_TIMESTAMP;
END;;
CREATE TRIGGER before_yourtable_update
BEFORE UPDATE ON yourtable
FOR EACH ROW
BEGIN
SET NEW.datefield := CURRENT_TIMESTAMP;
END;;
DELIMITER ;
编辑 1: 刚刚意识到您实际上想要防止曾经设置的系统时间可以在以后更新。稍微修改您的 UPDATE 触发器以完成此工作。
SET NEW.datefield := OLD.datefield
每次更新时将值重置为旧值
CREATE TRIGGER before_yourtable_update
BEFORE UPDATE ON yourtable
FOR EACH ROW
BEGIN
SET NEW.datefield := OLD.datefield;
END;;