关于存储过程和触发器,虽然之前听过它们,但一直都没有怎么实践过。最近在项目过程中使用到了存储过程和触发器,趁热打铁,把它们总结一下。希望对您有所帮助。

procedure: what?     一般在大型数据库中,一组为了完成特定功能的SQL语句集,存储在数据库中,经过第一次编译过后,再次调用不需要再次编译,用户只需要指定存储过程名字并给定拿书就可以执行完成任务。
    存储过程属于数据库,不属于表。存储过程就像数据库中运行方法(函数)一样;和C#里的方法一样,由存储过程名、存储过程参数组成,可以有返回结果。前面学习的if else/while/变量/insert/select等,都可以在存储过程中使用。

advantage     No1、执行速度快。在数据库中保存的存储过程语句都是编译过的。
    No2、允许模块化程序设计。类似方法的调用。
    No3、提高系统安全性。防止SQL注入(与带参数的SQL语句一样可以防止SQL语句注入攻击,带参数的SQL语句其实是调用了sp_executesql存储过程。)
    No4、减少网络流量。只要传输存储过程的名称即可。
    No5、最主要的是执行效率和SQL代码的封装。特别是SQL代码封装功能,如果没有存储过程,在外部程序访问数据库时,要组织很多SQL语句。特别是业务逻辑复杂的时候,一大堆的SQL语句和条件夹杂在程序设计代码中,让人不寒而栗。有了存储过程,业务逻辑可以封装在存储过程中,这样不仅易维护,而且执行效率高。

classification    系统存储过程:由系统定义,存放在master数据库中。名称以sp_ 或xp_开头,自定义的存储过程可以以usp_开头.
   自定义存储过程:由用户在自己的数据库中创建的存储过程

create grammar create procedure 存储过程名(参数) @参数 数据类型=默认值 output 【参数说明:参数可选,参数可分为输入参数、输出参数,输入参数允许有默认值】
as
begin
    sql 语句.....(可有多个)
end;

transfer grammar
exec/call(具体数据库执行调用时的关键字) 存储过程名(实参)(带参数的存储过程)

注:
参数的分类:in(表示存储过程需要给它一个值,是默认的状态) out(表示存储过程会返回一个值) inout(既可以传值进去 也可以带值出来)。存储过程limit后面不能使用参数。调用out存储过程前,需要先定义一个变量:set @(不同编程语言中 不一定都是@)变量类名=值。

delete grammar drop 存储过程名(if exists)
pay attention to     存储过程只是先编译SQL语句,所以当SQL语句中有错误的表或属性时,系统不会提示,而且存储过程会创建成功,只有当调用执行时才提示错误。 设置SQL server(使用的具体数据库)控制台的结尾符号。默认的以;结尾,我们可以自己设置结束符号。关键字 结束符(例如mysql:delimiter // 表示以//作为结束符号。)因为SQL语句在执行到首个以;结尾时就会认为SQL语句结束了。
Example 在可编程性里创建所需的存储过程:

trigger: what?     [1]在SQL server里面也就是对某一个表的一定操作,触发某种条件,从而执行的一段程序。
    [2]触发器是一个特殊的存储过程。触发器是一种特殊类型的存储过程,它不同于前面的一般的存储过程。【在SQL内部把触发器看做是存储过程,但是不能传递参数】
    [3]一般的存储过程通过存储过程名称被直接调用,而触发器主要是通过事件进行触发而被执行。
    [4]触发器是一个功能强大的工具,在表中数据发生变化时自动强制执行。触发器可以用SQL server约束、默认值和规则的完整性检查,还可以完成难以用普通约束实现的复杂功能。

effect
    自动化操作,减少了手动操作以及出错几率。
classification
    No1、DML触发器:A.Insert 、delete 、update(不支持select); B.after触发器(for)、 instead of触发器(不支持before触发器)
    No2、DDL触发器:create table 、 create database、alter、drop...

pay attention to     触发器只有表触发器,没有行触发器。例如删除一个含有10行数据的表,将其添加到新表中,只执行一次触发器。
Example

在所需表(类别表)下面创建trigger:

执行删除sql语句:

【SQL】存储过程procedure 触发器trigger相关推荐

  1. SQL 存储过程 procedure 讲解+代码实例

    文章目录 1. 存储过程概述 2. 创建存储过程 create procedure 2.1. 参数 in.out.inout 3. 调用存储过程 call 4. 查看存储过程 4.1. 查看存储过程的 ...

  2. 什么是存储过程?什么是触发器?SQL中存储过程与触发器的区别是什么?

    什么是存储过程?什么是触发器?SQL中存储过程与触发器的区别是什么? 存储过程是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,它存储在数据库中,一次编译后永久有效,用户通过指定存储过程的名 ...

  3. Sql存储过程加密和解密

    可用于加密SQL存储过程或者触发器(这是SQL Server本身提供的,也就是说这是微软的加密算法) http://www.mscto.com 使用 WITH ENCRYPTION 选项 WITH E ...

  4. mysql 动态传入表名 存储过程_面试再问MySQL存储过程和触发器就把这篇文章给他...

    Mysql存储过程及触发器trigger 存储过程 一.一个简单的存储过程 1,一个简单的存储过程 delimiter $$create procedure testa()begin Select * ...

  5. 数据库原理与应用(SQL Server)笔记 第九章 存储过程和触发器

    目录 前言 一.存储过程 (一)存储过程的定义 (二)存储过程的特点 (三)存储过程的分类 1.用户存储过程 2.系统存储过程 3.扩展存储过程 (四)存储过程的创建 (五)存储过程的执行 (六)带参 ...

  6. SQL 2005 的存储过程和触发器调试大法

    SQL 2005 的存储过程和触发器调试大法(原创)        在SQL2000中,我们想要调试存储过程非常简单,只需要在对象浏览器中找到存储过程,然后点击鼠标右键选择"执行(调试)&q ...

  7. Oracle(四):PL/SQL、存储函数、存储过程、触发器

    一.PL/SQL (一)什么是 PL/SQL PL/SQL(Procedure Language/SQL)是 Oracle 对 sql 语言的过程化扩展,指 在 SQL 命令语言中增加了过程处理语句( ...

  8. 转:SQL进阶之变量、事务、存储过程与触发器

    一.变量那点事儿 1.1 局部变量 (1)声明局部变量 DECLARE @变量名 数据类型 DECLARE @name varchar(20) DECLARE @id int (2)为变量赋值 SET ...

  9. sql语句之存储过程,触发器,函数,事务,游标

    (文章中的sql语句基于sql server) 目录 存储过程: 1.CREATE PROCEDURE语句 EXEC语句执行一个已定义的存储过程 [强化练习] 事务: L1.事务处理 1.开始事务 2 ...

最新文章

  1. 级联模60计数器(Verilog HDL语言描述)(仿真与综合)
  2. 计算机组成原理 — 冯诺依曼体系结构
  3. 【重大更新】DevExpress v17.1新版亮点(ASP.NET篇)
  4. vue 引用 vue-resource步骤 (遇错排解)
  5. 持续集成之应用容器化及自动化部署
  6. 关于“就地颠倒句子里的词”面试题
  7. Execution Environment for Non-64-bit Modes 和 64-bit Modes
  8. 论文Express | 英伟达最新:多模态无监督图像迁移网络框架
  9. 微软未来五年将把80%资源投入云计算
  10. word论文排版插件_Word排插件 一键搞定论文、标书、报告、公文等排版
  11. 如何查看hadoop集群的四个配置文件(core-site.xml hdfs-site.xml mapred-site.xml yarn-site.xml )
  12. 如何用python画帆船_简单几步,100行代码用Python画一个蝙蝠侠的logo
  13. 小游戏 《唐僧大战白骨精》
  14. 诺基亚n1平板电脑刷机教程_诺基亚N1平板电脑做工如何?诺基亚N1拆机图解评测...
  15. 谷歌中国人才流失 遭猎头公司不断挖角
  16. VC Debug与Release区别
  17. 五部超燃科幻电影,九成没有全部看过
  18. Mac后台运行redis
  19. Android开发实用小工具十——进制转换工具
  20. 大数据培训课程:Hive配置总结

热门文章

  1. openresty火焰图安装
  2. 够快云库, 加速企业信息化建设
  3. Entity Framework 4 in Action读书笔记——第三章:查询对象模型基础(1)
  4. Sketch小技巧—画出各种星型和多边形的简单方法
  5. Flink的scala+python的shell模式实验记录汇总
  6. No JDK found. Please validate either IDEA_JDK, JDK_HOME or JAVA_HOME
  7. RuntimeError: Model class cmdb.models.UserInfo doesn't declare an explicit app_label
  8. seaborn绘图后得到分布参数
  9. Spark-shell进行粘贴模式
  10. 如何理解Nginx, WSGI, Flask之间的关系