SQL - 使列值类型为final - 不可更改的时间戳编辑

时间:2014-08-24 11:55:42

标签: sql final

我想保留一个显示用户创建时间的列。永远不应该编辑该值。 JPA和SQL中是否存在任何机制,因为除非完全删除该行,否则不允许任何更改。我可能过于担心这个。我在java中使用了最终值,所以我认为在SQL中可能有类似的东西

@Temporal(TemporalType.TIME)
@Column(name = "created_date")
private Date      creationDate = new Date();

1 个答案:

答案 0 :(得分:0)

虽然可以做到,但SQL中并没有这种机制。通常,创建日期只是在创建行时自动分配,您不必担心以后更新它。只是不要更新它。您可以通过在存储过程中执行所有更新来进一步强制执行此操作,这就是我通常编写此类代码的方式。

当然,您仍然可以担心此类更新。 “内置”解决方案是使用更新触发器来阻止新值进入字段。另一种解决方案是在表上创建一个视图,并且只允许通过视图访问该表。然后,视图可以使列不可更新,如:

create view v_table as
    select col1, col2, . . ., (CreatedAt + interval 0 second) as CreatedAt
    from table t;

应用函数应该使列不可更新。当然,特定的语法取决于数据库。

并且,特定数据库可能具有执行此操作的特定机制。当我看到这个问题时,它没有数据库标签。

编辑:

在Oracle中,您可以在列级GRANTREVOKE执行此操作。