代码之家  ›  专栏  ›  技术社区  ›  memilanuk

对insert语句触发sqlite update触发器?

  •  5
  • memilanuk  · 技术社区  · 16 年前

    我正在建立一个简单的sqlite数据库,通过python进行访问。到目前为止,我有一个基本表和两个触发器-我想让一个触发器在添加新记录时更新字段列“日期已添加”,另一个触发器在稍后更新记录时更新列“日期已更新”。以下是触发器的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;  
    

    “添加联系人”触发器似乎工作正常…按计划,当我通过SQL插入命令添加新记录时,它将激发。

    问题似乎是“更新联系人”触发器…当我通过SQL更新命令(按计划)更新记录时,它会同时触发 当我添加新记录时:

    也就是说,当我添加一个新记录时,我会在“添加日期”和“更新日期”列中获取该记录:

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

    当我更新那个记录时,它的变化是这样的:

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

    我想我不明白为什么更新触发器也会在insert上触发?

    蒂亚

    蒙特

    编辑后添加:有关于如何使其按预期工作的提示吗?

    2 回复  |  直到 11 年前
        1
  •  6
  •   Borealid    16 年前

    您的插入触发器中有一个更新。因此,插入会导致更新。你用不同的扳机钩住了它。

        2
  •  8
  •   The iOSDev fibnochi    13 年前

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

    推荐文章