一 视图
视图即虚拟表,它的内容都是派生自其他表的查询结果,虽然看起来像基本表,但不是基本表,因为视图的内容是动态生成的。
视图的用处是将频繁使用的复杂的查询放进一个虚拟表,方便查询。
- 创建视图
creat view name as select-stmt;
1). 最简单的视图:
sqlite> CREATE VIEW testview AS SELECT * FROM testtable WHERE first_col > 100;
2). 创建临时视图:
sqlite> CREATE TEMP VIEW tempview AS SELECT * FROM testtable WHERE first_col > 100;
3). "IF NOT EXISTS"从句:
sqlite> CREATE VIEW testview AS SELECT * FROM testtable WHERE first_col > 100;
Error: table testview already exists
sqlite> CREATE VIEW IF NOT EXISTS testview AS SELECT * FROM testtable WHERE first_col > 100;
- 删除视图
sqlite> DROP VIEW testview;
sqlite> DROP VIEW testview;
Error: no such view: testview;
sqlite> DROP VIEW IF EXISTS testview;
创建一个关系复杂的视图:
creat view details as
select f.name as fd, ft.name as tp, e.name as ep, e.season as ssn
from foods f
inner join food_types ft on f.type_id=ft.id,
inner join foods_episodes fe on f.id=fe.ffod_id,
inner join episodes e on fe.episode_id=e.id;
注意:sqlite目前不支持可更新的视图,即只允许select操作,insert 和update操作不行
不过可以借助触发器实现更新
二 触发器
当具体的表发生特定的数据库事件时,触发器执行对应的SQL指令。触发器可以用