因为"创造时间"的目的,我想创造一个TIMESTAMP领域DEFAULT CURRENT_TIMESTAMP.但是,如果有人或某种方式发生了变化,TIMESTAMP,我的数据将不一致.
有没有办法我可以确保它不会改变,除非我删除行并重新插入它,除了应用程序级别?
提供建议的答案,我可以解决这样的问题
CREATE TRIGGER consistency1 BEFORE UPDATE ON table1
FOR EACH ROW
BEGIN
IF NEW.creationtime != OLD.creationtime THEN
SET NEW.creationtime = OLD.creationtime;
END IF;
END;
Run Code Online (Sandbox Code Playgroud)
由于我的评论已被赞赏,这是扩展版本.
我个人认为不可能.
无论如何,你可以尝试一些事情:
确保只有您的应用程序可以在数据库上写入
写这样的触发器(伪代码!)
create trigger prevent_change_timestamp on tbl_name
before update
#fetch old row value
#verify if the timestamp field has been changed
#raise an error (any SQL error will do)
Run Code Online (Sandbox Code Playgroud)或者像这样
create trigger revert_change_timestamp on tbl_name
after update
#fetch pre-change row value
#update the row with the "old" value in place of the new one
Run Code Online (Sandbox Code Playgroud)如果可能的话,我个人会选择第3种选择.无论如何,第二个也很好.除非必要,否则我不会依赖第一个选项(例如:无法访问触发器功能)
更多信息:参考
有趣的是,数据库应用程序不提供此功能作为标准:不仅适用于“创建的”时间戳字段,还适用于自动增量 id 字段等内容,以及您可能希望在创建记录时设置的任何其他值,然后永远不允许改变......想知道理由是什么?