sqlite UPDATE 触发器也会在 INSERT 语句上触发吗?

发布于 2024-09-09 09:05:07 字数 968 浏览 0 评论 0原文

我正在努力设置一个简单的 SQLite 数据库以通过 Python 访问。到目前为止,我有一个基本表和几个触发器 - 我希望有一个触发器在添加新记录时更新字段列“date_added”,另一个触发器在稍后更新记录时更新列“date_updated” 。这是我的触发器的 SQLite 语法:

CREATE TRIGGER add_contact AFTER INSERT ON contact_info  
BEGIN  
    UPDATE contact_info SET date_added = DATETIME('NOW') WHERE pkid = new.pkid;  
END;  

CREATE TRIGGER update_contact AFTER UPDATE ON contact_info  
BEGIN  
    UPDATE contact_info SET date_updated = DATETIME('NOW') WHERE pkid = new.pkid;  
END;  

“add_contact”触发器似乎工作正常...当我按计划通过 sql INSERT 命令添加新记录时,它会触发。

问题似乎是“update_contact”触发器...当我通过 sql UPDATE 命令更新记录时(按计划)当我添加新记录时它也会触发:

即当我添加时我在“date_added”和“date_updated”列中得到了一条新记录:

2010-07-12 05:00:06|2010-07-12 05:00:06

当我更新该记录时,它会发生如下变化:

2010-07-12 05:00:06|2010-07-12 05:14:26

我想我不明白为什么 UPDATE 触发器也会在 INSERT 上触发?

TIA,

Monte

编辑补充:有关如何使其按预期工作的任何提示?

I'm working on setting up a simple SQLite database to access via Python. So far I have one basic table, and a couple of triggers - I want to have one trigger update a field column 'date_added' when a new record is added, and another one to update a column 'date_updated' when a record is later updated. Here is my SQLite syntax for the triggers:

CREATE TRIGGER add_contact AFTER INSERT ON contact_info  
BEGIN  
    UPDATE contact_info SET date_added = DATETIME('NOW') WHERE pkid = new.pkid;  
END;  

CREATE TRIGGER update_contact AFTER UPDATE ON contact_info  
BEGIN  
    UPDATE contact_info SET date_updated = DATETIME('NOW') WHERE pkid = new.pkid;  
END;  

The 'add_contact' trigger seems to be working fine... it fires when I add a new record via an sql INSERT command, as planned.

The problem seems to be the 'update_contact' trigger... it fires both when I update a record via an sql UPDATE command (as planned) and when I add a new record also:

i.e. when I add a new record I get this in the 'date_added' and 'date_updated' columns:

2010-07-12 05:00:06|2010-07-12 05:00:06

and when I update that record, it changes like so:

2010-07-12 05:00:06|2010-07-12 05:14:26

I guess I'm not getting why the UPDATE trigger fires on INSERT also?

TIA,

Monte

Edited to add: Any hints on how to make it work as intended?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

浮华 2024-09-16 09:05:07

避免原始问题的更好方法是使用 DEFAULT ( DATETIME('NOW') )
表定义中 date_added 列的子句,而不是使用 INSERT 触发器。

A better way to avoid the original problem is to use a DEFAULT ( DATETIME('NOW') )
clause for the date_added column in the table definition, instead of using an INSERT trigger.

浸婚纱 2024-09-16 09:05:07

您的 INSERT 触发器中有一个 UPDATE。因此 INSERT 会导致 UPDATE。您已经用不同的触发器连接了它。

You have an UPDATE in your INSERT trigger. So the INSERT causes an UPDATE. Which you have hooked with a different trigger.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文