我最近才开始使用 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 < OLD.lm_datetime 在 Pre-condition as such 中:
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 语句
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
我什至不会进入那个......但如果有人对这个更新触发器有想法,我会全神贯注。
我可以简单地说...如果它没有损坏,请不要修复它...因为它在 SQLiteSPY 中工作没问题....但是解决这个问题会很好。
谢谢你。