SQLite的一个触发器的例子

sqlite3触发器的实战

http://blog.afantree.com/sql/sqlite3-trigger-demo.html

你可以搜索“sqlite 触发器”或“SQLite 触发器的SQL语法”,然后你应该能找到一个PDF文档或其他样式的文件。它简要讲解了一些基本内容,如果你和我一样什么都不知道,可以先看一下它。

触发器分为“语句级触发器”和“行级触发器”。
语句级触发器是指每执行一条DML语句,该触发器就执行一次。
行级触发器是指每个DML操作影响几条记录,就会触发几次(FOR EACH ROW),
行级触发器中由于涉及到了每条记录的数据变动,所以对于每条记录的数据来说就有新值和旧值之分。
At this time SQLite supports only FOR EACH ROW triggers, not FOR EACH STATEMENT triggers.
此时,SQLite仅支持FOR EACH ROW触发器,而不支持FOR EACH STATEMENT触发器。

SQLite的TRIGGER的语法图:
http://sqlite.org/lang_createtrigger.html
从SQLite的TRIGGER的语法图里面可以看到,语法图里面并没有IF-ELSE语句,SQLite的TRIGGER貌似不支持IF-ELSE语句,好像也不支持CASE-WHEN-THEN-ELSE语句。
SQLite的TRIGGER貌似也不支持定义变量。不过,可以将临时值插入一个临时表(key,value)中,模拟出来变量进行使用。

开始:

--创建key_value表。
CREATE TABLE key_value(
key   varchar(32) NOT NULL PRIMARY KEY,
value varchar(32)
);

--创建log_info表。
CREATE TABLE log_info(
idx  INTEGER   PRIMARY KEY, --A column declared INTEGER PRIMARY KEY will autoincrement.
dttm TIMESTAMP NOT NULL DEFAULT (DATETIME('now','localtime')),
info TEXT
);

--SQLite的触发器的语法图里面没有IF-ELSE语句。同时有WHEN语句。
--其中的WHEN操作符表示了执行该触发器的条件,弥补了SQLite没有IF-ELSE这样逻辑分析语句的缺陷。
--注:SQLite中,连接字符串不是使用+,而是使用||。
--创建t_key_value_insert触发器。向key_value表insert数据时,触发器被调用。
CREATE TRIGGER t_key_value_insert AFTER INSERT ON key_value
FOR EACH ROW WHEN new.key='yyyymmdd'
BEGIN
INSERT INTO log_info(info) VALUES('[AFTER_INSERT]['||new.key||']['||new.value||']');
END;

--创建t_key_value_update触发器。向key_value表update数据时,触发器被调用。
CREATE TRIGGER t_key_value_update AFTER UPDATE ON key_value
FOR EACH ROW WHEN new.key='yyyymmdd'
BEGIN
INSERT INTO log_info(info) VALUES('[AFTER_UPDATE]['||new.key||']['||new.value||']');
END;

--向key_value表中添加数据,利用log_info表来观察触发器的反应。
REPLACE INTO key_value(key,value)VALUES('yyyymmdd','20160101');
REPLACE INTO key_value(key,value)VALUES('yyyymmdd','20160202');
REPLACE INTO key_value(key,value)VALUES('temp_key','temp_value');
UPDATE key_value SET value='20160303' WHERE key='yyyymmdd';
select * from log_info;

结束。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值