每当更新行时,我想更新具有当前时间戳的字段。
在MysqL中,我会在声明表时做
LastUpdate TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL ON UPDATE CURRENT_TIMESTAMP
但是,“on update”部分与sqlite不起作用。
我找不到一个自动执行的方法,我需要声明一个触发器吗?
编辑:为了记录,这里是我当前的触发器:
CREATE TRIGGER [UpdateLastTime] AFTER UPDATE ON Package FOR EACH ROW BEGIN UPDATE Package SET LastUpdate = CURRENT_TIMESTAMP WHERE ActionId = old.ActionId; END
谢谢
是的,你需要使用触发器。 (只是检查:你的帖子触发器是否正常工作?乍一看,对我来说看起来不错)
MysqL的ON UPDATE CURRENT_TIMESTAMP是一个非常独特的单用途快捷方式。就是这样;对于任何其他值或除TIMESTAMP之外的任何列类型,此构造不能类似使用。 (注意,这个功能是在TIMESTAMP
type page而不是CREATE TABLE
page定义的,因为这个功能特定于TIMESTAMP列而不是CREATE TABLE语句)。另外值得一提的是,它特定于TIMESTAMP类型,SQLite doesn’t even have distinct date/time types。
据我所知,没有其他RDBMS提供这个捷径代替使用实际的触发器。从我读过的内容中,必须使用触发器在MS sql,sqlite,Postgresql和Oracle上完成此操作。
路人最后一句话:
这不是与ON UPDATE子句相关的外键约束混淆。这是完全不同的,可能所有支持外键限制的RDBMS(包括MysqL和sqlite)都可以。