数据库

 首页 > 数据库 > MySql > 机房收费系统-触发器

机房收费系统-触发器

分享到:
【字体:
导读:
         摘要:主要介绍了触发器的使用,触发器可以使得我们的代码减少,但是还是要权衡利弊,慎用触发器。...

机房收费系统-触发器

     上一篇学习了视图的使用,对于数据库,还有很多需要我们了解的。

   触发器,是干什么的呢?怎么用呢?用它有什么好处呢?肯定也会有弊端等等一系列的问题,学习SQL Server的人一定多会对它有所了解的。

 

我的理解:

        当给他一个事件时,给以同时完成另一个事件。机房重构里,当我对充值表进行充值时,给它一个Insert事件,使用触发器可以同时更细卡表里的余额。

 

1、干什么用的:

    触发器是SQL Server提供给程序员和数据分析员来保证数据完整性的一种方式,它就是与表事件相关的特殊存储过程。触发器不能被直接执行,只能为表上的InsertUpdateDelete事件所触发。它也不能传递或接受参数。

2、怎么用:

         已经介绍了触发器是为表上的增删改事件触发,所以要在需要触发器的表里创建。

         以机房收费系统里的充值表为例

-- =============================================
-- Author:		<赵亚盟>
-- Create date: <2014年8月10日21:25:06>
-- Description:	<当插入一条充值记录时,自动更新卡表中的余额>
-- =============================================
ALTER TRIGGER [dbo].[CardBalance]
   ON  [dbo].[T_Recharge] 
   for Insert
AS 
declare @AddMoney varchar(8)
declare @Balance numeric(18,0)
declare @CardNo varchar(8)                    --声明参数
select @AddMoney =Addmoney from T_Recharge 
select @Balance =Balance from T_Card 
select @CardNo =CardNo from T_Recharge       --给参数赋值
BEGIN

	UPDATE T_Card set Balance =@Balance +@AddMoney Where T_Card .CardNo =@CardNo 

END

对代码功能的解释:

     我有两张表,充值表里存放充值记录,卡表里存放余额,当我充值时,对充值表插入一条记录,要同时更新卡表里的余额。现在卡表里的余额=上次余额+充值金额


3、使用触发器的好处:

1、触发器的开销非常低,运行触发器所占用的时间主要花在引用其它存于内存或磁盘上的表上。

2、通过数据库中的相关表实现级联更改。

3、可以实现比CHECK约束更为复杂的数据完整性。

 

弊端:

    不管是什么都有它的缺点,触发器也是不能滥用的,他也有很多缺点,滥用触发器会造成数据库以及应用程序的维护困难,如果我们过分依赖触发器,一定会影响数据库的结构。


   初次尝试使用触发器,感觉挺方便的,使代码减少了很多,触发器的使用在以后的学习中还得好好学习,数据库的强大之处还得慢慢挖掘。




机房收费系统-触发器
分享到:
win7-64bit 下oracle11g plsql 的正确安...
win7-64bit 下oracle11g plsql 的正确安装本人在PC机上安装了Oracle 11g 版本的数据库服务,通过PL/SQL连接数据库时总是无法连接,因为PLSQL没有64位版,通过32bit的PLSQL连接64位的Oracle时就会报错,第一种需要安装一个32位的oracle客户端工具instantclient进行转换,第二种plsql的不能安装到目录名包含括号()的目录里,...
Linux下忘记root密码怎么办?
Linux下忘记root密码怎么办? 1.首先确认服务器出于安全的状态,也就是没有人能够任意地连接MySQL数据库。  因为在重新设置MySQL的root密码的期间,MySQL数据库完全出于没有密码保护的  状态下,其他的用户也可以任意地登录和修改MySQL的信息。可以采用将MySQL对  外的端口封闭,并且停止Apache以及所有的用户进程的方...
  •         php迷,一个php技术的分享社区,专属您自己的技术摘抄本、收藏夹。
  • 在这里……