1、前言

2、存储过程和触发器
-》存储过程
·理解:是一组SQL命令集合,经过预编译存放在系统中;就像java程序里的方法,可以重复的被调用;
在日常的数据库操作中,会有大量的T-SQL批处理、游标,如果每次都要去重写或者打开脚本来执行会相当麻烦,
数据库可以将我们编写的T-SQL批处理保存在一个处理过程中。
--创建
·语法格式:create {proc | procedure} 存储名 [ @参数名 数据类型 [,···n] ]
as
[begin]
sql语句[块]
[end]
·例:无参数:create procedure stduent_avg
as
select 学号,avg(成绩) as '平均分' from 选课表
group by 学号
go

有参数:create procedure GetStu @number char(7)
as
select * from 学生表 where 学号=@ number
go
输出参数: create procedure Pname @p_n varchar(20),@avgage int output
as /*output表明该选项的值可以返回给调用此过程的应用程序*/
select @ avgage=avg(单价) from 商品 where 商品名称=@ p_n
go
--执行
·语法格式:execute {proc | procedure} 存储名 [ @参数名 数据类型 [,···n] ]
·例:无参数:execute stduent_avg
有参数:execute GetStu '0100111'
输出参数:declare @ avgage int
execute Pname '冰箱',@ avgage output
print '冰箱的平均价格:' + str(@ avgage)
--查看
·语法格式: sp_help 存储过程名 /*表的形式*/
sp_helptext 存储过程名 /*文本打印的形式*/
·例:
--修改: alter procedure 存储过程名 [参数]
as
sql语句[块]
go
--删除: drop procedure 存储过程名

-》触发器
·解释:一种特殊的存储过程;
它不是由用户主动发起调用的,而是当发生某一事件(表发生新增、修改、删除操作时)而触发,由系统自动调用。
·作用:
·分类:DML触发器:发生数据操作语言事件时自动执行存储过程
DDL触发器:响应DDL语句触发
·语法格式:create trigger 触发器名
on {表名 | 视图}
[with encryption] /*加密syscomments表中包含create trigger语句条目*/
{for | after | instead of} /*after:所有操作成功执行后才激活;instead of:指执行触发器而不执行触发语句*/
{[insert][delete][update]} /*执行哪个数据修改语句激活触发器的关键字*/
[not for replication] /*复制进程更改触发器所涉及的表时,不应执行该触发器*/
as sql语句[块]
·例1:为学生表创建一个DML触发器,在插入和修改数据时,都会自动显示所有学生的信息
create trigger print_table on 学生表
for insert,update
as select * from 学生表
·例2:使用DDL触发器limited来防止数据库中的任一表被修改和删除
use 教学库
go
create trigger limited on database
for drop_table,alter_table
as
print '不允许您执行对表的修改或删除操作'
rollback
·例3:创建一个delete类型的触发器,删除数据时,显示删除学生个数
create trigger del_table on 学生表
for delete
as
declare @count vachar(50)
select @count = str(@@rowcount) + '个学生被删除'
select @count
return
·查看:sp_help 触发器名
sp_helptext 触发器名
sp_helptrigger 表名 /*查看某个表上的触发器*/
·修改: alter trigger 触发器名
on {表名 | 视图}
[with encryption] /*加密syscomments表中包含create trigger语句条目*/
{for | after | instead of} /*after:所有操作成功执行后才激活;instead of:指执行触发器而不执行触发语句*/
{[insert][delete][update]} /*执行哪个数据修改语句激活触发器的关键字*/
[not for replication] /*复制进程更改触发器所涉及的表时,不应执行该触发器*/
as sql语句[块]
·禁止、启用和删除
--启用、禁止:alter table 表名
[enable | disable] trigger [all | 触发其名[,···n]]
/*启用或禁止所用或某个触发器*/
--删除:drop trigger 触发器名

第五章 存储过程&触发器的更多相关文章

  1. 《Entity Framework 6 Recipes》中文翻译系列 (22) -----第五章 加载实体和导航属性之延迟加载

    翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 第五章 加载实体和导航属性 实体框架提供了非常棒的建模环境,它允许开发人员可视化地使 ...

  2. 2019寒假训练营第三次作业part1-网络空间安全概论第五章

    第五章 网络攻防技术 5.1 网路信息收集技术--网络踩点 黑客入侵系统之前,需要了解目标系统可能存在的: 管理上的安全缺陷和漏洞 网络协议安全缺陷与漏洞 系统安全缺陷与漏洞 黑客实施入侵过程中,需要 ...

  3. 2020重新出发,MySql基础,MySql视图&索引&存储过程&触发器

    @ 目录 视图是什么 视图的优点 1) 定制用户数据,聚焦特定的数据 2) 简化数据操作 3) 提高数据的安全性 4) 共享所需数据 5) 更改数据格式 6) 重用 SQL 语句 MySQL创建视图 ...

  4. 《Django By Example》第五章 中文 翻译 (个人学习,渣翻)

    书籍出处:https://www.packtpub.com/web-development/django-example 原作者:Antonio Melé (译者@ucag注:大家好,我是新来的翻译, ...

  5. 精通Web Analytics 2.0 (7) 第五章:荣耀之钥:度量成功

    精通Web Analytics 2.0 : 用户中心科学与在线统计艺术 第五章:荣耀之钥:度量成功 我们的分析师常常得不到我们应得的喜欢,尊重和资金,因为我们没有充分地衡量一个黄金概念:成果.因为我们 ...

  6. 《Linux内核设计与实现》读书笔记 第五章 系统调用

    第五章系统调用 系统调用是用户进程与内核进行交互的接口.为了保护系统稳定可靠,避免应用程序恣意忘形. 5.1与内核通信 系统调用在用户空间进程和硬件设备间添加了一个中间层, 作用:为用户空间提供了一种 ...

  7. Java语言程序设计(基础篇) 第五章 循环

    第五章 循环 5.2 while循环 1.while循环的语法如下: while(循环继续条件){ //循环体 语句(组); } 2.程序:提示用户为两个个位数相加的问题给出答案 package co ...

  8. 读《编写可维护的JavaScript》第五章总结

    第五章 UI层的松耦合 5.1 什么是松耦合 在Web开发中,用户界面是由三个彼此隔离又相互作用的层定义的: HTML是用来定义页面的数据和语义 CSS用来给页面添加样式 JavaScript用来给页 ...

  9. 《Linux内核设计与实现》课本第五章学习笔记——20135203齐岳

    <Linux内核设计与实现>课本第五章学习笔记 By20135203齐岳 与内核通信 用户空间进程和硬件设备之间通过系统调用来交互,其主要作用有三个. 为用户空间提供了硬件的抽象接口. 保 ...

随机推荐

  1. centos操作---搭建环境 安装python

    1.安装python3.6.2 安装依赖 yum -y groupinstall "Development tools" yum -y install zlib-devel bzi ...

  2. 页面加载完成前的loading加载效果

    /*loading.js*/ // 加载HTML图 var _LoadingHtml = '<div id="loadingDiv" style="position ...

  3. ssh免密登录linux服务器

    Ssh免密登录 sshd服务 sshd简介: SSH 密钥为登录 Linux 服务器提供了更好且安全的机制.运行 ssh-keygen 后,将会生成公私密钥对.你可以将公钥放置到任意服务器,从持有私钥 ...

  4. 网络中常用的各种协议(针对TCP/IP协议组)

    网络层: ip协议->网络互连协议 用途:将多个包在网络中联系起来,传输数据包(不可靠传输),最基本功能就是寻址和分段功能,不提供端到端,路由到路由的确认,不提供重发和流量控制.是计算机网络能狗 ...

  5. java thread start到run:C++源码分析

    转:https://hunterzhao.io/post/2018/06/11/hotspot-explore-inside-java-thread-run/ 整体流程 java new Thread ...

  6. 阿里插件检查 lombok报错---方法缺少 '@Override' 注解

    问题: Eclipse里,阿里编码规约插件扫描代码出现,但是idea却没有. 解决: 将以上注解改成 @Setter @Getter @NoArgsConstructor @AllArgsConstr ...

  7. NET Core 不错教程***************

    Twinhead 当前标签: .Net Core   RabbitMQ教程 Twinhead 2019-01-26 20:02 阅读:5 评论:0     缓存击穿.缓存穿透和缓存雪崩 Twinhea ...

  8. windows系统打开火狐浏览器提示“无法加载你的firefox配置文件”

    win7系统自带IE浏览器,还是有部分用户使用不习惯,选择下载第三方浏览器,比如:火狐.谷歌.360浏览器等.最近有Win7系统用户在重新安装火狐浏览器后发现打不开,并提示“无法加载你的firefox ...

  9. 多线程读写shared_ptrshared_ptr要加锁分析!学习笔记

     (shared_ptr)的引用计数本身是安全且无锁的,但对象的读写则不是,“因为 shared_ptr 有两个数据成员,读写操作不能原子化".使得多线程读写同一个 shared_ptr 对 ...

  10. 在oracle RAC 环境下用 PL/SQL Developer debug procedure 出现 hang 的情况

    现象描述: 用plsql developer 连接编译procedure 的时候都很正常.一旦开始Test进入Debug模式的时候就Hang住了. 初步猜测是没有权限,可是是DBA角色呀,如果没有权限 ...