sqlite - SQLite 3.8时间戳更新触发问题

标签 sqlite python-3.x sqlitestudio

我刚开始使用SQLite Studio 3.0.5,只是为了进行尝试,我使用SQLiteSPY 1.9.6已有一段时间了,几乎没有任何问题。

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

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中执行更新时...我得到:'触发器递归的级别太多'

因此,我进行了搜索,找到了一些有关更改触发器代码的建议,...例如添加...:WHEN NEW.lm_datetime
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 lm_datetime = datetime('now', 'localtime') 




SET lm_datetime = CURRENT_TIMESTAMP;


我注意到通过添加前提条件语句,我能够停止递归错误,因此发生了更新……但是时间戳字段未得到更新……就好像触发器不存在一样。

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

SQLite Studio向我显示我的数据库版本是:3.8.7.4
SQLiteSPY向我显示我的数据库版本是:3.8.0.2

我什至不参与其中...但是,如果有人对这个UPDATE TRIGGER有任何想法,我会非常高兴。

我可以简单地说...如果没有损坏,请不要修复...因为它可以在SQLiteSPY中正常工作....但是解决这个问题会很不错。

谢谢。

最佳答案

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

CREATE TRIGGER ...
AFTER UPDATE OF word, definition, notes ON tbl_english_dictionary
BEGIN ...

关于sqlite - SQLite 3.8时间戳更新触发问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29693627/

相关文章:

python - sqlite3.操作错误: near ",": syntax error

sql - 缺少某些日子时,获取每日平均公关月?

java - 使用 'where' 条件将值从一个表复制到另一个表

python - 从函数返回数组索引

sql - 为什么 SQLiteStudio(和其他)默认情况下不以人类可读的格式显示日期时间?

android - 如何序列化自定义 arraylist 对象并将其保存到 sqlite 数据库?

python - 使用 fileConfig 在 Python 中配置自定义处理程序

sqlite - 在sqlite studio中批量添加列的方法?

sqlite - sqlite studio中引用数据库名称

Python 使用 timedelta 数据的 .seconds 属性给出错误结果