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. 分割字符串(C++)

    方案1: 利用"IO流"的概念,即C++中的stream,我们都用过C++中std::iostream中的std::istream与std::ostream 如果你接触过网络编程( ...

  2. PowerShell命令部署WSP

    转载:http://www.cnblogs.com/ChunLiangZhang/archive/2012/07/18/2597335.html(作者:ChunLiang) 现在可以用SharePoi ...

  3. ul li做横向导航栏例子

    /* ul li以横排显示 */ /* 所有class为menu的div中的ul样式 */ div.menu ul { list-style:none; /* 去掉ul前面的符号 */ margin: ...

  4. 洛谷1541(多维dp)

    走格子拿分数,直接弄dp[i]是到了第i格的最大得分可以发现是假的. 于是此题设f[i][j][k][t]代表四种步伐各用了几次可以得到的最大得分,到达的点可以直接算出来,就好转移了. const i ...

  5. P5019 铺设道路 (NOIP2018)

    传送门 NOIP2013原题 貌似官方数据都是一模一样的 以前写过竟然毫无印象? 考场上自己瞎JB推结论 显然,如果连续的两端区间可以左边区间减 k 次,右边区间也减 k 次 那么把两个区间合并起来一 ...

  6. word页眉添加横线与删除横线

    一.删除横线 1.打开已有页眉Word2010文档,并且页眉有横线的,双击页眉 2.选中整个页眉段落,注意:一定要选择段落标记. 3.单击菜单“开始”功能模块. 4.在“段落”中单击边框线下三角按钮. ...

  7. Java学习笔记day06_自定义类_ArrayList

    1.自定义类class 使用类的形式, 对现实中的事物进行描述. 类是引用数据类型. 事物: 方法,变量. 方法:事物具备的功能. 变量:事物的属性. 格式: public class 类名{ //属 ...

  8. vue 之 vuex

    Vuex 什么是Vuex?  官方说法:Vuex 是一个专为 Vue.js应用程序开发的状态管理模式.它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化. 个人 ...

  9. 转 关于bootstrap--表格(table的各种样式)

    https://www.cnblogs.com/shark1100913/p/5627233.html 关于bootstrap--表格(table的各种样式)   1.table-striped:斑马 ...

  10. Nvelocity中格式化金钱和日期

    //格式化金钱(  9,999.00)function formatCurrency(num) {    num = num.toString().replace(/\$|\,/g, '');    ...