2

mysql中是否可以有一个必须来自系统的时间戳约束,并且不能在插入或更新查询中提供?

是否可以使用约束来防止表被更新?我了解如何防止 mysql 用户使用 GRANT 更新表,但在我的情况下,可能首选约束,因为我的目标是保证记录的时间戳,而不管用户包括 root。

4

2 回答 2

0

试试这个: MYSQL 有一个约束,表中的单个字段具有默认的 CURRENT_TIMESTAMP 对于插入查询,这将起作用

Create table foo
(

logged_date  TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

但是对于更新,您需要通过triggers或在您的应用程序代码中以不同的方式处理它

于 2012-11-28T17:47:37.147 回答
0

您可以做的是覆盖INSERTUPDATE使用触发器的值

因此,无论查询设置什么,您所需的时间戳字段的值将始终是系统时间。

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;;
于 2012-11-28T17:53:09.870 回答