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. mpvue 小程序应用拖动排序

    <template> <div> <div style="width:90%;height:40px;line-height:40px;margin:auto; ...

  2. [Node.jS]shelljs

    shelljs : https://www.npmjs.org/package/shelljs 要给可以替代Unix下shell脚本的库. require('shelljs/global'); if ...

  3. stringstream的用法

    stringstream的基本用法 stringstream是字符串流.它将流与存储在内存中的string对象绑定起来. 在多种数据类型之间实现自动格式化. 1.stringstream对象的使用 # ...

  4. poj 3977 子集

    题目 题意:在一个集合中找到一个非空子集使得这个子集元素和的绝对值尽量小,和绝对值相同时保证元素个数尽量小 分析:1.二分枚举的思想,先分成两个集合: 2.枚举其中一个集合中所有的子集并且存到数组中, ...

  5. java——线段树 SegmentTree

    应用: 区间染色 区间查询 线段树不是完全二叉树,线段树是平衡二叉树 使用数组来实现线段树:存储空间为4n 以下是使用数组实现的静态线段树: public class SegmentTree<E ...

  6. hadoop - hbase 单机版的安装部署

    1. 下载安装包. http://www.apache.org/dyn/closer.lua/hbase/ 选择版本,单机进入以下页面 2. tar xfz hbase-1.2.6-bin.tar.g ...

  7. 转 Python-IndexError: list index out of range

    https://www.cnblogs.com/2bjiujiu/p/9063864.html Error:IndexError: list index out of range Where? 对Py ...

  8. PHP artisan

    Artisan 是 Laravel 提供的 CLI(命令行接口),它提供了非常多实用的命令来帮助我们开发 Laravel 应用.前面我们已使用过 Artisan 命令来生成应用的 App Key 和控 ...

  9. 那些NPM文档中我看不懂地方

    $cookies.set(keyName, value[, expireTimes[, path[, domain[, secure]]]]) //return this 中括号代表可选参数 上面一行 ...

  10. IDEA修改git账号及密码的方法

    IDEA修改git账号及密码的方法: 1.file->settings->passwords 2.重启IDEA 3.执行一次提交或更新 当执行提交或更新之后,idea会自动提示输入账号.密 ...