在机房收费系统中,对多个表的查询,要写多个SQL是很麻烦的事情,为了方便我们写代码,同时对代码进行解耦和,我们引用了视图,触发器,存储过程。
一、是什么?
视图
从若干个基本表和其他视图构造出来的虚拟表。视图本身并不存储实际的数据,而仅仅存储一个Select语句和所涉及表的metadata。
触发器
特殊的存储过程,此机制是由事务触发而完成的,而不是存储过程的调用。
存储过程
一组完成特定功能的SQL语句集合以及流程控制语句编写的模块,存储过程经过编译后存储在数据库服务端的数据库中,使用时调用即可。
二、为什么?
视图
(1)提供了用户访问的接口,用户不必知道底层的表结构是什么样的,当表改变时,只需改变视图的语句,而客户端不许改变,降低了耦合性
(2)加强了安全性,用户只能看到视图提供的那部分数据,其他的看不到
(3)简化了数据库的访问操作
存储过程
(1)提高运行速度,调用存储过程的速度会比执行一条SQL语句要快的多。
(2)只需编译一次即可,而SQL语句使用一次编译一次。
(3)可以反复调用,减轻了程序编写的工作量
(4)增强了SQL的功能和灵活性,能完成复杂的楼及判断和复杂运算
触发器
(1)通过数据库中的相关表来实现级联操作。
(2)自动执行
(3)触发器可以强制用比CHECK约束定义的约束更为复杂的约束。(这一点不太理解)
。。。。。。
三、怎么用?
1、创建视图后,使用时和使用表一样。
Create View <视图名>(<列表序列>)
AS<SELECT 查询语句>
2、存储过程
例如:机房收费系统中的充值操作,当进行充值操作时,要在充值表中添加一条充值记录,并更新卡表里的卡余额。
3、触发器
例如:机房收费系统中的退卡操作,当进行退卡操作时,要在退卡表里更新一条记录,并在卡表里删除对应的卡。
四、总结
上面的两张图是从师傅博客总截的图。视图用过了,触发器和存储过程还没有使用。虽然触发器和存储过程有这么多优点,但我们要慎用,拒绝滥用。