首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用current_timestamp更新SQLite

用current_timestamp更新SQLite
EN

Stack Overflow用户
提问于 2011-07-05 05:57:33
回答 4查看 40.7K关注 0票数 38

每当行被更新时,我想用当前时间戳更新一个字段。

在MySQL中,当声明表时,我会这样做

代码语言:javascript
运行
复制
LastUpdate TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL ON UPDATE CURRENT_TIMESTAMP

但是“”部分不适用于SQLite。我找不到自动的方法,我需要声明一个触发器吗?

编辑:为了记录,下面是我当前的触发器:

代码语言:javascript
运行
复制
CREATE TRIGGER [UpdateLastTime]
AFTER UPDATE
ON Package
FOR EACH ROW
BEGIN
UPDATE Package SET LastUpdate = CURRENT_TIMESTAMP WHERE ActionId = old.ActionId;
END

谢谢

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-07-05 16:02:10

是的,你需要用扳机。(只是检查一下:你发布的触发器是否正常工作?)乍一看,我觉得很好。)

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、SQLite、PostgreSQL和Oracle上完成这一任务。

给过路人的最后一张便条:

这不应与涉及外键约束的ON UPDATE子句混淆。这是完全不同的,可能所有支持外键约束的RDBMS都有(包括MySQL和SQLite)。

票数 27
EN

Stack Overflow用户

发布于 2015-03-17 09:11:30

对于默认的SQLite设置,John是正确的,此触发器将导致无限循环。若要避免递归,请使用WHEN子句。

即使recursive_triggers设置是打开的,也可以执行以下操作:

代码语言:javascript
运行
复制
PRAGMA recursive_triggers=1;     --- test

CREATE TRIGGER [UpdateLastTime]
    AFTER UPDATE
    ON package
    FOR EACH ROW
    WHEN NEW.LastUpdate < OLD.LastUpdate    --- this avoid infinite loop
BEGIN
    UPDATE Package SET LastUpdate=CURRENT_TIMESTAMP WHERE ActionId=OLD.ActionId;
END;
票数 14
EN

Stack Overflow用户

发布于 2018-05-19 21:58:46

有更有效、更好和更干净的方法来做到这一点,例如:

代码语言:javascript
运行
复制
-- List all required fields after 'OF' except the LastUpdate field to prevent infinite loop
CREATE TRIGGER UpdateLastTime UPDATE OF field1, field2, fieldN ON Package
BEGIN
  UPDATE Package SET LastUpdate=CURRENT_TIMESTAMP WHERE ActionId=ActionId;
END;

这样的代码已经在我的项目中测试过了。在这里可以找到https://www.sqlite.org/lang_createtrigger.html的深层sqlite触发器解释

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6578439

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档