数据库

 首页 > 数据库 > MySql > 浅谈触发器和存储过程

浅谈触发器和存储过程

分享到:
【字体:
导读:
         摘要:去年初识SQL数据库的时候就接触了着两个概念,但是对于这两对兄弟从何而来,又有什么作用几乎一片空白。慢慢的经历了一次又一次的机房收费,跟他们打了一次又一次的照面,然后是最近敲牛腩新闻发布系统,牛腩老师恨不得所有的SQL语句都写成存储过程,所有稍复杂的多表操作都要用上触发器,才发现在与数据库打交道的岁月,他们应该也是宿命...

浅谈触发器和存储过程


 

去年初识SQL数据库的时候就接触了着两个概念,但是对于这两对兄弟从何而来,又有什么作用几乎一片空白。慢慢的经历了一次又一次的机房收费,跟他们打了一次又一次的照面,然后是最近敲牛腩新闻发布系统,牛腩老师恨不得所有的SQL语句都写成存储过程,所有稍复杂的多表操作都要用上触发器,才发现在与数据库打交道的岁月,他们应该也是宿命一样的存在---逃不掉,就好好谈谈。

 

WHAT:

 

触发器: 基本表在被修改的时候通过事件触发而执行的存储过程。(被动)

作用是保证了由主键和外键所不能保证的参照完整性和数据完整行。

 

存储过程: 一种数据库对象,将负责不同功能的语句分类封装好,以便反复调用。(主动)

 

WHY:

 

触发器:

1:实现比约束更复杂的数据的完整性

2:返回自定义的错误信息

3:实现多张表的连级修改

存储过程:

1:语句封装,可多次调用,just like 面向对象

2:执行速度更快(存储过程第一次执行便被分析优化)

3:保证数据安全(系统管理员可对存储过程进行权限限制)

 

Personal Understanding:

1:触发器是一个被动的执行过程,更像是一个保护机制,当我的某个数据库的某条数据被修改的时候我预先写好的触发器就这样被触发了,然后他就会通过主外键约束来对其他表的数据进行合理修改以满足整个数据的完整性。而存储过程却是一个十足的积极主动能手,主动把SQL语句分类封装,就像我们在机房收费的时候封装的方法,我写好了有类似的需求直接调用就可以了。

 

2:触发器和存储过程都是数据库这个层面上进行的操作和修改,可以说基本跟我们要实现的软件代码没半毛钱关系,这样也是符合分层思想的,而且有利于后期系统的维护和修改。如果哪个功能块需求变更我们可能只需要修改数据库里的存储过程或者触发器而不用打开大段的代码去修改SQL语句。

 

3:两者都从不同方面保护了数据,触发器可以保护数据的完整性,而存储过程则是通过权限管理维护数据的安全。

 

浅谈触发器和存储过程
分享到:
C API--linux上c语言读取数据库内容(mys...
C API--linux上c语言读取数据库内容(mysql)要想知道怎么通过c语言操作数据库,必须要了解这几个结构体的含义,这里只是简单说一下如果想要了解的更深入可以到网上搜一下 C API数据类型 1、MYSQL结构代表一个数据库连接的句柄,包含有关服务器的连接状态的信息,几乎所有的函数均使用到他。要连接MySQL,必须建立MYSQL实...
使用lvm-snapshot备份mysql数据库
使用lvm-snapshot备份mysql数据库 前提要求: 事务日志跟数据文件必须在同一个卷上; 创建快照卷之前,要请求MySQL的全局锁;在快照创建完成之后手动释放锁; 请求全局锁完成之后,做一次日志滚动;做二进制日志文件及位置标记(手动进行); 1、为数据施加读锁,滚动二进制日志文件并记录当前二进制文件起始时间段: ...
  •         php迷,一个php技术的分享社区,专属您自己的技术摘抄本、收藏夹。
  • 在这里……