数据库:储存过程与触发器
储存过程:
存储过程是存储在数据库目录中的一段声明性SQL语句。 存储过程是数据库中的一个重要对象,用户通过指定存储过程的名字并给出参数来执行它。
存储过程的优点:
① 增强了SQL语句的功能和灵活性;
② 不需要反复建立一系列处理步骤,保证了数据的完整性;
③ 降低了网络的通信量,客户端调用存储过程只需要传存储过程名和相关参数即可,与传输SQL语 句相比自然数据量少了很多;
④ 增强了使用的安全性,通过存储过程可以使没有权限的用户在控制之下间接地存取数据库,从而 保证数据的安全;
⑤ 可以实现集中控制,当规则发生改变时,只需要修改存储过程就可以啦;
存储过程的缺点:
① 调试不是很方便;
② 可能没有创建存储过程的权利;
③ 重新编译问题;
④ 移植性问题;
存储过程的分类:
1)系统存储过程: 以sp_开头,用来进行系统的各项设定.取得信息.相关管理工作。
2)本地存储过程: 用户创建的存储过程是由用户创建并完成某一特定功能的存储过程,事实上一般所说的存储过程就是指本地存储过程。
3)临时存储过程:
①局部临时存储过程 以井字号(#)作为其名称的第一个字符,则该存储过程将成为一个存放在tempdb数据库中的本地临时存储过程,且只有创建它的用户才能执行它;
②全局临时存储过程 以两个井字号(##)号开始,则该存储过程将成为一个存储在tempdb数据库中的全局临时存储过程,全局临时存储过程一旦创建,以后连接到服务器的任意用户都可以执行它,而且不需要特定的权限。
4)远程存储过程: 在SQL Server2005中,远程存储过程(Remote Stored Procedures)是位于远程服务器上的存储过程,通常可以使用分布式查询和EXECUTE命令执行一个远程存储过程。
5)扩展存储过程: 扩展存储过程(Extended Stored Procedures)是用户可以使用外部程序语言编写的存储过程,而且扩展存储过程的名称通常以xp_开头
创建存储过程的参数:
procedure_name:存储过程的名称,在前面加#为局部临时存储过程,加##为全局临时存储过程。
number:是可选的整数,用来对同名的过程分组,以便用一条 DROP PROCEDURE 语句即可将同组的过程一起除去。
parameter:存储过程的参数。可以有一个或多个。用户必须在执行过程时提供每个所声明参数的值(除非定义了该参数的默认值)。
data_type:参数的数据类型。所有数据类型(包括 text、ntext 和 image)均可以用作存储过程的参数。
VARYING :指定作为输出参数支持的结果集(由存储过程动态构造,内容可以变化)。仅适用于游标参数。
default :参数的默认值。如果定义了默认值,不必指定该参数的值即可执行过程。默认值必须是常量或 NULL。
OUTPUT:表明参数是返回参数。
RECOMPILE:表明 SQL Server 不会缓存该过程的计划,该过程将在运行时重新编译。
ENCRYPTION:表示 SQL Server 加密 。
FOR REPLICATION:指定不能在订阅服务器上执行为复制创建的存储过程。
AS:指定过程要执行的操作。
sql_statement:过程中要包含的任意数目和类型的 Transact-SQL 语句。但有一些限制。
调用存储过程:
1)创建存储过程:
Create PROCEDURE 储存过程名称 (参数列表) begin 过程体 end;
例:
创建储存过程:
create procedure porcedureName () begin select name from user; end;
2)调用存储过程:
call 储存过程名称
例:
call porcedureName();
3)删除储存过程:
DROP PROCEDURE 储存过程名称
触发器:
触发器是用户定义在关系表上的一类由事件驱动的特殊的存储过程。触发器是指一段代码,当触发某个事件时,自动执行这些代码。
触发器作用:
(1) 强化约束(Enforce restriction) 能够实现比CHECK 语句更为复杂的约束。
(2) 跟踪变化(Auditing changes) 可以侦测数据库内的操作,从而不允许数据库中未经许可的指定更新和变化。
(3) 级联运行(Cascaded operation) 可以侦测数据库内的操作,并自动地级联影响整个数据库的各项内容。例如,某个表上的触发器中包含有对另外一个表的数据操作(如删除,更新,插入)而该操作又导致该表上触发器被触发。
(4) 存储过程的调用(Stored procedure invocation) 为了响应数据库更新,触发器可以调用一个或多个存储过程,甚至可以通过外部过程的调用而在DBMS(数据库管理系统)本身之外进行操作。
触发器的限制:
1)触发程序不能调用将数据返回客户端的存储程序,也不能使用采用CALL语句的动态SQL语句,但是允许存储程序通过参数将数据返回触发程序,也就是存储过程或者函数通过OUT或者INOUT类型的参数将数据返回触发器是可以的,但是不能调用直接返回数据的过程;
2)不能再触发器中使用以显示或隐式方式开始或结束事务的语句;
创建触发器:
(1)创建只有一条执行语句的触发器
语法结构如下:
CREATE TRIGGER trigger_name trigger_time trigger_event ON table_name FOR EACH ROW trigger_stmt
trigger_name:用户自定义的触发器名称;
trigger_time:标识触发事件,可以指定为before(时间发生前执行)或after(事件发生后执行);
trigger_event:标识触发事件,包括INSERT、UPDATE、DELETE;
table_name:触发器建立在哪个表上;
trigger_stmt:触发器执行语句。
(2)创建有多个执行语句的触发器
语法结构如下:
CREATE TRIGGER trigger_name trigger_time trigger_event ON table_name FOR EACH ROW BEGIN 语句执行列表 END
【当触发器有至少一条的执行语句时,多条执行语句需要用BEGIN和END包裹,分别表示整个代码块的开始和结束。】
查看触发器:
show triggers;
删除触发器:
DROP TRIGGER [schema_name] trigger_name;
【schema_name:表示数据库名称,可选参数,如果省略则表示从当前数据库中删除触发器。】
谢谢大家阅读,如果想要获取更多java基础知识,可以戳我一起交流学习!

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
十、数据库锁
加锁是为了保证数据的一致性 一、按照锁粒度进行划分 缺点 优点 表锁 数据表进行锁定 锁定粒度很大 发生锁冲突的概率也会较高 数据访问的并发度低 对锁的使用开销小,加锁会很快 页锁 数据页的粒度上进行锁定 锁定的数据资源比行锁要多,一个页中可以有多个行记录 会出现数据浪费的现象,但这样的浪费最多也就是一个页上的数据行 页锁的开销介于表锁和行锁之间,会出现死锁 锁定粒度介于表锁和行锁之间 会出现死锁 并发度一般 行锁 行的粒度对数据进行锁定 锁的开销比较大 加锁会比较慢, 容易出现死锁情况 锁定力度小 发生锁冲突概率低 可以实现的并发度高 每个层级的锁数量是有限制的,锁会占用内存空间,锁空间的大小是有限的 当某个层级的锁数量超过了这个层级的阈值时,就会进行锁升级 锁升级就是用更大粒度的锁替代多个更小粒度的锁 比如 InnoDB 中行锁升级为表锁,这样做的好处是占用的锁空间降低了,但同时数据的并发度也下降 二、数据库管理的角度对锁进行划分 共享锁 读锁或 S 锁,共享锁锁定的资源可以被其他用户读取,但不能修改 在进行SELECT的时候,会将对象进行共享锁锁定 当数据读取完毕之后,就会释...
- 下一篇
面向领域的微服务架构
前言 近来,一些关于面向服务架构的话题,特别是针对微服务架构的弊端这个话题上进行了大量的讨论。虽然在几年前,微服务架构受到很多人的青睐,因为它们提供了许多好处,如独立部署的灵活性、明确的所有权、系统稳定性的改善以及更好的分离问题等优点。但是不久,就开始有人吐槽微服务会大幅增加系统复杂性,有时甚至连一些简单的功能都难以构建。 随着Uber发展,我们目前拥有了大约2200个关键的微服务,并且也亲身经历了这些权衡。在过去的两年里,Uber一直在试图降低微服务的复杂性的同时仍然保持着微服务架构的优势。我们希望通过这篇博文介绍我们对微服务架构的通用方法,我们称之为 "面向领域的微服务架构"(DOMA)。 由于这些缺点,近年来也有一些批评微服务架构的声音,但是却很少有人主张彻底拒绝微服务架构。运营收益太重要了,而且似乎没有有效的替代方案。我们介绍DOMA的目的是为了给那些希望降低整体系统复杂性,同时又保持微服务架构相关灵活性的组织提供一些经验建议。 这篇文章主要解释了什么是DOMA,以及Uber采用这种架构的原因,它对平台和产品团队带来哪些好处。最后,给想要采用这种架构的团队一些建议。 什么是微服...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Docker安装Oracle12C,快速搭建Oracle学习环境
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- SpringBoot2整合Redis,开启缓存,提高访问速度
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- CentOS7设置SWAP分区,小内存服务器的救世主
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- CentOS7安装Docker,走上虚拟化容器引擎之路
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- CentOS关闭SELinux安全模块