当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《在INSERT语句上触发sqliteUPDATE触发器也?》经验,为你挑选了2个好方法。

我正在设置一个简单的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,

蒙特

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



1> 小智..:

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


并确保*no*INSERT语句包含date_added列.当为给定列插入NULL时,SQLite3似乎不执行DEFAULT子句.

2> Borealid..:

您的INSERT触发器中有一个UPDATE.因此INSERT会导致更新.你用不同的触发器挂钩了.

推荐阅读
135369一生真爱_890
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有