存储过程和触发器的取舍问题(优缺点分析)

惠州学院-数据库实验6-触发器存储过程 计算机科学系实验报告(首页) 课程名称 数据库系统概论 班级 14计科2班 实验名称 触发器存储过程 教导教师 索剑 姓名 张钦颖 学号 1414080901218 组号   日期 2016年5月10日 阅读详情

          由于要给同学分享一些关于数据库中存储过程和触发器的知识,我想了想,这是很细节的技术,一般只要用了都会很快掌握其使用方法。经过这么多年,我一般在设计数据库的时候也都会或多或少的使用存储过程和触发器,原因很简单:良好的性能,业务也好实现。可是在做上次的项目的时候,由于业务很复杂,存储过程和触发器的数量均都达到上百之多,这是一件很恐怖的事情,尤其是在出了错调试维护的时候,就会想没有这些东西多好。下面我从经验角度梳理一下对存储过程和触发器的看法。

       1、触发器是特殊的存储过程。

         这句话在教科书中会经常出现,这就说明二者是有很大的联系的,我的一般理解就是触发器是一个隐藏的存储过程,因为它不需要参数,不需要显示调用,往往在你不知情的情况下已经做了很多操作。从这个角度来说,由于是隐藏的,无形中增加了系统的复杂性,非DBA人员理解起来数据库就会有困难,因为它不执行根本感觉不到它的存在。再有,涉及到复杂的逻辑的时候,触发器的嵌套是避免不了的,如果再涉及几个存储过程,再加上事务等等,很容易出现死锁现象,再调试的时候也会经常性的从一个触发器转到另外一个,级联关系的不断追溯,很容易使人头大。其实,从性能上,触发器并没有提升多少性能,只是从代码上来说,可能在coding的时候很容易实现业务,所以我的观点是:摒弃触发器!触发器的功能基本都可以用存储过程来实现。

       2、存储过程优点很多,可以经常使用

  • 可以封装数据逻辑和业务规则,以便用户可以仅通过开发人员和数据库管理员打算使用的方式访问数据和对象。
  • 验证所有用户输入的参数化存储过程可用于阻止 SQL 注入攻击。 如果使用动态 SQL,请确保将命令参数化,并绝对不能将参数值直接包括在查询字符串中。
  • 可禁止即席查询和数据修改。 这样将阻止用户恶意或无意中损坏数据或执行查询,以避免降低服务器或网络的性能。
  • 可以在过程代码中处理错误,而无需将错误直接传递给客户端应用程序。 这样可防止返回错误消息,以避免其可能有助于探测攻击。 在服务器上记录错误并对其进行处理。
  • 存储过程只能编写一次,可由很多应用程序访问。
  • 客户端应用程序不需要知道有关基础数据结构的任何信息。 只要更改不影响参数列表或返回的数据类型,就可以更改存储过程代码,而无需在客户端应用程序中进行更改。
  • 存储过程可通过将多个操作组合到一个过程调用中来减少网络通讯。
  • 安全性好—可以访问执行存储过程而不必拥有直接操作基础表的权限
  • 减少网络通信流—存储过程可以包含多条SQL语句,但只要用一条语句来执行该存储过程,从而减少了客户端应用程序对服务器的调用次数和长度
  • 快速执行—存储过程在第一次执行时进行语法检查和编译,编译好的版本存储在高速缓存中,用于再次调用
  • 保证一致性—如果用户只通过存储过程修改数据,则可以消除偶然修改带来的问题减少操作人员和编程人员的错误—由于传递信息少,因此执行复杂任务更容易,不易出现SQL错误

        3、考虑移植性,存储过程的致命伤
        如果一个系统过多的使用了存储过程,那系统的业务逻辑过于依赖数据库,这样就会给系统额外的增加一层数据库中的业务逻辑层,如果开发的时候用的sql server,后来发现数据量过大,需要提高性能移植到oracle或者mysql,这样就会很麻烦,相当于把存储过程重写一遍,这是不能忍受的。我们平时在做项目的时候,往往一个功能在客户端实现起来很费劲,在服务端很容易就可以实现,这样好多人就会选择在服务端做,却为以后留下隐患。在分析项目的需求的时候,一定要考虑性能问题,多久有可能会升级, 如果数据量很小,几十年用sql server都没问题,那就可以多用存储过程;但是数据量有可能会逐渐累积成千万条甚至更多,就不得不考虑系统的可移植性,这时候尽量不要用存储过程,全部代码控制。
        4、存储过程的代码可复用性差。
        面向对象的思维在存储过程这毫无用武之地,两个很相似的功能在也需要两个存储过程,因为他们是互相独立的,可以互相调用,但是不能继承等面向对象的操作,这也就增加了代码量。

        综上:在一般的小系统(逻辑简单)中,存储过程和触发器可以多用,毕竟ms设计的,可以很大程度上提升性能;在复杂的系统中,建议不用触发器,少用存储过程。

《数据库原理》实验报告DB5——触发器存储过程(函数) 一. 实验内容、步骤以及结果 1. 针对SPJ_MNG数据库,创建并执行如下存储过程。(共计40分) (1) 创建一个没有参数的存储过程—jsearch1。该存储过程的作用是:当执行该存储过程时,将返回S表中北京供应商的所有信息。调用该存储过程并验证结果。(5分) 创建: DELIMITER $$ USE `spj_ming`$$ CREATE PROCEDURE `jsearch1` () BEGIN select * from s where city = '北京'; END$$ 验证: Ca 阅读详情

相关推荐

滤波算法-呼吸心跳信号检测方法(四)

呼吸心跳信号检测系列文章:信号滤波处理

yjh_2019的博客 6229

数据库实验报告-存储过程触发器

一、实验目的 1.了解存储过程的概念、优点 2.熟练掌握创建存储过程的方法 3.熟练掌握存储过程的调用方法 4.了解触发器的概念、优点 5.掌握触发器的方法步骤 6.掌握触发器使用

6、Dialogflow 开发全解析:从基础到高级应用

本文全面解析了 Dialogflow 的核心功能与高级应用,涵盖意图与实体的创建、上下文管理、后续意图设置以及高级实体类型的实际应用场景。详细介绍了自定义实体的导入导出规则、编程添加方法及数量限制,并通过流程图实例说明了上下文生命周期与对话连贯性设计。结合电商、旅游、问卷调查等实际业务场景,展示了模糊匹配、自动扩展、复合实体等功能的强大灵活性。最后提供了开发最佳实践建议,帮助开发者构建高效、智能的对话系统。

kafka6courier的博客 84

存储过程优点缺点

存储过程优缺点优点: 1.由于应用程序随着时间推移会不断更改,增删功能,T-SQL过程代码会变得更复杂,StoredProcedure为封装此代码提供了一个替换位置。 2.执行计划(存储过程在首次运行时将被编译,这将产生一个执行计划-- 实际上是 Microsoft SQL Server为在存储过程中获取由 T-SQL 指定的结果而必须采取的步骤的记录。)缓存改...

weixin_30649859的博客 563

存储过程触发器优点缺点

首先介绍触发器 触发器是一种特殊类型的存储过程,当使用一种或者多种数据修改进行操作,在指定表中对数据进行修改时侯,会触发下面的函数, 触发器就会生效:update insiert  delete  触发器可以查询其他表,可以包含很复杂的sql 语句,主要用于强制复杂的规则业务或者要求, 触发器有助于强制引用的完整性。以便于在进行删除,更新或者增加时候保留原来表中的已定义的关系, 然而,强制

xingyundemoxiaoguai的博客 4105

12、MySQL触发器到底是什么?

MySQL 的触发器存储过程一样,都是嵌入到 MySQL 中的一段程序,是 MySQL 中管理数据的有力工具。不同的是执行存储过程使用 CALL 语句来调用,而触发器的执行不需要使用 CALL 语句来调用,也不需要手工启动,而是通过对数据表的相关操作来触发、激活从而实现执行。比如当对 student 表进行操作(INSERT,DELETE 或 UPDATE)时就会激活它执行。 触发器与数据表关系密切,主要用于保护表中的数据。特别是当有多个表具有一定的相互联系的时候,触发器能够让不同的表保持数据的一致性。

you can you up up up的博客 371

数据库实用的基础知识

数据库实用的基础知识1、触发器的作用?触发器是一中特殊的存储过程,主要是通过事件来触发而被执行的。它可以强化约束,来维护数据的完整性一致性,可以跟踪数据库内的操作从而不允许未经许可的更新变化。可以联级运算。如,某表上的触发器上包含对另一个表的数据操作,而该操作又会导致该表触发器被触发。2、什么是存储过程?用什么来调用?存储过程是一个预编译的SQL语句,优点是允许模块化的设计,就是说只需创建一次...

MyDsZXC的博客 2314

ant-design tree 设置默认选中状态_Linux下vim的安装及其设置细节(建议收藏)

一、vim的下载Ubuntu系统,输入命令:sudo apt install vimCentos系统,输入命令:yum -y install vim*然后输入y就行了,不出意外的话,完成之后,vim就已经安装完成了。下面都以Ubuntu为例。二、vim的基本知识vim的全局配置一般在/etc/vim/vimrc或者/etc/vimrc,对所有用户生效。如果只对单次编辑启用某个配置项,可以在命令模式...

weixin_39858275的博客 237

MYSQL数据库实验(存储过程触发器)

个人配置说明:5.7.24 MySQL Community Server (GPL),环境CentOS 7 1.MYSQL 不支持语句触发(for each statement),只支持行触发(for each row,新旧数据通过关键字newold区别) 实验: 数据库存储触发器实验 一、实验目的 理解,实现并逐渐熟悉存储过程使用...

weixin_30799995的博客 3307

数据库系统原理 实验(实习)报告——存储过程触发器

一、实验目的 1、掌握存储过程的定义执行方法。 2、了解触发器的定义执行方法。 二、实验内容与步骤 1、存储过程 (1)(无参数)用命令方式创建并执行一个存储过程,查询成绩不及格的学生的学号姓名专业、课号课名及相应分数。(语法格式可参考教材例6.13) 语句: USE StudentCourse IF EXISTS (SELECT name FROM sysobjects WHERE name = 'Stu_info' AND type = 'P') ......

Recursions的博客 1096

数据库系统原理课程总结7——存储过程触发器,索引,ODBC

一、 存储过程触发器实验 请在你选用的数据库平台上,针对你的应用场景,对如下操作至少各实现一个存储过程: 1)单表或多表查询 2)数据插入 3)数据删除 4)数据修改 答:存储过程设置: 单表查询,查找user表中用户ID在设置的区间内的用户的所有信息: 数据插入,这里使用的是批量插入,通过设置AUTOCOMMIT,让所有insert语句最后统一录入数据库,可以极大程度上减少插入时间,百万级数据插入用时20s左右,不这样的话用时50分钟: 数据删除,删除user表中用户ID在设置的区间内的用户的

weixin_51529433的博客 6235

数据库实验报告(四)

实验四主要内容与存储过程触发器有关

m0_71494857的博客 381

实验5 存储过程触发器

实验目的 加深对存储过程触发器的理解 掌握存储过程触发器的创建使用,理解它们的执行方式的不同 理解并体会存储过程触发器的区别联系 实验内容 在已建好的各表基础上,根据需要创建相关的存储过程触发器,完成一定的功能。 1.创建一个InsertS的存储过程,向S中插入一条记录,新记录的值由参数提供。并验证该存储过程的执行情况。 DELIMITER $$ CREATE PROCEDURE InsertS(in SNO0 CHAR(9),IN SNAME0 CHAR(9),IN STAT

m0_51877411的博客 1397

数据库存储过程总结

数据库存储过程总结

m0_58725148的博客 1527

SQL 触发器的作用,好处坏处

触发器,主要是用来同步更新数据的,举个例子吧:  假设有两个表,tab_1 , tab_2  再假设两个表里都有“人员性别”这个字段  tab_1的数据例如: 张三```男```1978`````2002  tab_2的数据例如: 张三```男```销售科```科长  我要改tab_1中张三的性别为“女”的话,那么tab_2的性别也该改为“女”,对吧,总不能两张表的性别不同吧

记录点滴 2万+

实训七——存储过程触发器

本关任务: 该实验是针对数据表jdxx,该数据表有四个字段,分别是省份(sf)、城市(cs)、区县(qxmc)、街道(name)。例如,查询天心区(qxmc)的所有字段的值结果如图所示。

zrjwxhn的博客 1578

数据库实验 实验七 存储过程触发器

注:此内容仅仅只是记录成长与分享学习,不能保证绝对正确 实验七 存储过程触发器 实验日期: 2022 年 5 月 20 日 星期 五 实验地点: 宿舍 一 实验目的 1. 掌握SQL Server中存储过程的创建执行方法。 2. 理解触发器的功能,学会创建触发器,维护数据库完整性。 二 实验要求 1. 请大家务必动手完成实验,实验过程中,会随机抽查提问,作为实验成绩重要参考。 2. 请将数据库studb的两个基本文件自行保留,下次实验在此基础上进行。 3. 请在本实...

QENGFENG的博客 4199

sql的存储过程触发器的区别,以及各自的优缺点

首先说存储过程吧: 存储过程: 是一组SQL语句集,从开头到结尾包含这许多的SQL语句,然后中间对于有需要的业务逻辑处理,进行逻辑控制。解决一些复杂的业务时比较实用。 比如说我在service层处理业务逻辑的虎,可能会涉及到多次数据库的连接。这就相当的耗费资源,但如果你用存储过程的话,就只有一次,从响应来说,时间上很有优势,而且性能也会提高,也就是说存储过程可以给我们带来运行效率提高的好处。 ...

LQzhang_11的博客 5443

(十四)全解MySQL之各方位事无巨细的剖析存储过程触发器

前面简单提过一嘴,存储过程类似于一门新的语言,在其中存在专门的语法规则,因此想要撰写一个高效的存储过程之前,我们得先掌握存储过程中的一些基本语法,例如创建、变量、流程控制、循环等基础语法。但好在大家都并非刚学编程的小白,因此这些在其他语言中都存在的语法,其实我们只需要搞清楚在MySQL中的关键字即可,所以上手速度还是非常快的,那么Les't Go~OK~,本篇到这里就接近尾声了,其实原本是不打算写存储过程触发器这一章的,毕竟更多的偏向数据库基础,因此放在《全解MySQL数据库》

BASK2311的博客 744

88e6097数据手册

marvell 88e6097的数据手册,可以为网络交换机硬件设备开发者提供详细的指导。

上一篇: SQL清空以TB开头表中的数据
下一篇: XML:四种解析器(dom,sax,jdom,dom4j)原理及性能比较
Jesse621
博客等级 码龄16年 225粉丝 79原创
评论 49
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值