首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQLite 3.8时间戳更新触发器问题

SQLite 3.8时间戳更新触发器问题
EN

Stack Overflow用户
提问于 2015-04-17 16:04:57
回答 1查看 355关注 0票数 1

我最近刚刚开始使用SQLite Studio3.0.5,只是为了尝试一下,我已经使用SQLiteSPY 1.9.6有一段时间了,几乎没有任何问题。

下面是一个简单的字典表,其中包含两个完美执行的触发器。

代码语言:javascript
复制
CREATE TABLE IF NOT EXISTS tbl_english_dictionary (
word_id INTEGER PRIMARY KEY AUTOINCREMENT,
word VARCHAR(50),
definition TEXT,
notes TEXT,
lm_datetime TEXT);

CREATE TRIGGER insert_tbl_english_dictionary AFTER INSERT ON tbl_english_dictionary
BEGIN
    UPDATE tbl_english_dictionary SET lm_datetime = datetime('now', 'localtime')
    WHERE rowid = new.rowid;
END;

CREATE TRIGGER update_tbl_english_dictionary BEFORE UPDATE ON tbl_english_dictionary
BEGIN
    UPDATE tbl_english_dictionary SET lm_datetime = datetime('now', 'localtime')
    WHERE rowid = new.rowid;
END; 

当在SQLiteSPY中执行更新时,它工作得很好,我看到了新数据和更新后的时间戳。

在SQLiteStudio中执行更新时...我得到:“触发器递归的级别太多”

所以我去搜索,找到了一些关于修改触发器的代码的建议,...such as添加...:WHEN NEW.lm_datetime < OLD.lm_datetime in the suggestions in the condition as:

代码语言:javascript
复制
CREATE TRIGGER update_tbl_system_messages
    BEFORE UPDATE
        ON tbl_system_messages
  FOR EACH ROW
      WHEN NEW.lm_datetime < OLD.lm_datetime
BEGIN
   UPDATE tbl_system_messages
      SET lm_datetime = datetime('now', 'localtime') 
    WHERE message_id = OLD.message_id;
END;

我已尝试从编辑SET语句

代码语言:javascript
复制
SET lm_datetime = datetime('now', 'localtime') 

代码语言:javascript
复制
SET lm_datetime = CURRENT_TIMESTAMP;

我注意到,通过添加前置条件语句,我能够停止递归错误,如果触发器不存在,我的更新将获取place...but时间戳字段不会获取updated...as。

数据库文件实际上是由python脚本创建的,我正在运行python 3.4

SQLite Studio告诉我我的DB版本是: 3.8.7.4 SQLiteSPY告诉我我的DB版本是: 3.8.0.2

我甚至不会进入one...but,如果有人对这个更新触发器有想法,我洗耳恭听。

我可以简单地say...if,它没有坏,不用修复it...because,它在SQLiteSPY中工作没有问题……但如果能解决这个问题,那就太好了。

谢谢。

EN

回答 1

Stack Overflow用户

发布于 2015-04-17 17:10:04

您不希望在更新时间戳列时运行UPDATE触发器,因此应将触发器限制为其他列:

代码语言:javascript
复制
CREATE TRIGGER ...
AFTER UPDATE OF word, definition, notes ON tbl_english_dictionary
BEGIN ...
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29693627

复制
相关文章

相似问题

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