设为首页 加入收藏

TOP

sqlite3触发器的使用(二)
2014-11-23 22:20:17 来源: 作者: 【 】 浏览:56
Tags:sqlite3 触发器 使用
ps WHERE item_id=old.rowid;
UPDATE dbinfo SET value=1 WHERE key='ignore_items_update_triggers';
UPDATE items SET ordering = ordering - 1 WHERE old.parent_id = parent_id AND ordering > old.ordering;
UPDATE dbinfo SET value=0 WHERE key='ignore_items_update_triggers';
END;
CREATE INDEX items_uuid_index ON items (uuid);
CREATE INDEX items_ordering_index ON items (parent_id,ordering);
CREATE INDEX items_type ON items (type);
sqlite>

从上面可以看出items对应了很多的触发器,所以items应该是基表。说到了触发器,下面开始说我们的正题。

数据库中表中的数据发生变化时,包括insert,update,delete任意操作,如果我们对该表写了对应的DML触发器,那么该触发器自动执行。DML触发器的主要作用在于强制执行业 务规则,以及扩展Sql Server约束,默认值等。因为我们知道约束只能约束同一个表中的数据,而触发器中则可以执行任意Sql命令。

下面从一个例子来介绍一下触发器的使用。数据库中有3个表,src、backup、del,分表代表原数据表,备份数据表和删除数据表,我们现在要实现的是对原数据的插入与更新以及删除要同步到backup表中,对原数据的删除,要将删除的信息写入del表中,也就是要保证src表与backup表是时刻一模一样的,del表存储删除的信息。

触发器的创建如下:

1
2
3
4
5
6
CREATE TRIGGER < [ BEFORE | AFTER ] > < [ INSERT | UPDATE | DELETE ] >
ON //dbo代表该表的所有者
FOR EACH ROW
BEGIN
--do something
END ;

三个表都非常的简单,只有一个int类型的id属性。创建表以及触发器如下:

1
2
3
4
5
6
CREATE TABLE src(id int);
CREATE TABLE backup(id int);
CREATE TABLE del(id int);
CREATE TRIGGER trigger1 after insert on src begin insert into backup values(new.id); end;
CREATE TRIGGER trigger2 after update on src begin update backup set id=new.id where id=old.id ; end;
CREATE TRIGGER trigger3 after delete on src begin insert into del values(old.id) ; delete from backup where id=old.id; end;

上面的3个触发器的意思还是很容易理解的,我们需要注意的一点是在begin与end之间的操作中,对前面作用表的新旧数据使用new和old进行指向,如在src表进行插入操作后,会处罚trigger1,此时trigger将src中id的新值(new.id)插入带backup表中。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
sqlite> insert into src values(1) ; //插入数据1
sqlite> insert into src values(2) ; //插入数据2
sqlite> select * from src ;
1
2
sqlite> select * from backup ;
1
2
sqlite> select * from del ;
sqlite> update src set id=3 where id=2 ; //更新数据
sqlite> select * from src ;
1
3
sqlite> select * from backup ;
1
3
sqlite> select * from del ;
sqlite> delete from src where id=1; //删除数据
sqlite> select * from src ;
3
sqlite> select * from backup ;
3
sqlite> select * from del ;
1
sqlite>

可以看出,在src表发生更删改的时候,触发器启动了,执行了相应的操作,保证了数据的统一性。

更多文章请前往小胖轩.

首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇全面解析SQLSERVER的左右内连接 下一篇SQLServerDatabase维护计划创建完..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: