【发布时间】:2021-10-13 23:38:49
【问题描述】:
使用 sqlite,我希望在插入和更新时使用触发器从给定的“id”生成一个字段“url”。例如id: '1' => url: 'test.com/1'
表格如下所示:
CREATE TABLE t1 (
id TEXT,
url TEXT
);
由于 sqlite 无法为更新和插入运行相同的触发器,因此我看到了两个选项来完成此操作。
选项 A
- 插入后运行触发器,将 id 更新为自身,进而触发更新触发器
CREATE TRIGGER run_updates_on_insert AFTER INSERT ON t1
BEGIN
UPDATE t1 SET id = NEW.id WHERE id = NEW.id;
END;
CREATE TRIGGER set_url_on_update BEFORE UPDATE on t1
BEGIN
UPDATE t1 SET url = 'test.com/' || NEW.id WHERE id = OLD.id;
END;
选项 B
- 在两个单独的触发器中复制逻辑以进行更新和插入
CREATE TRIGGER set_url_on_insert AFTER INSERT on t1
BEGIN
UPDATE t1 SET url = 'test.com/' || NEW.id WHERE id = NEW.id;
END;
CREATE TRIGGER set_url_on_update BEFORE UPDATE on t1
BEGIN
UPDATE t1 SET url = 'test.com/' || NEW.id WHERE id = OLD.id;
END;
这两个选项都给了我想要的结果,我倾向于选择选项 A,因为我只需要编写一次更新逻辑,但我想知道是否有任何其他优点/缺点更喜欢另一个?
编辑:对于这个特定的用例,最好使用生成的列(请参阅下面的 forpas 答案)
【问题讨论】:
-
你的 SQLite 版本是多少?
-
Sqlite 版本:3.36.0
标签: sql sqlite triggers insert sql-update