贮存过程:
存储过程是存储在数据库目录中的一段申明性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 ROWBEGIN 语句执行列表END
【当触发器有至多一条的执行语句时,多条执行语句须要用BEGIN和END包裹,别离示意整个代码块的开始和完结。】
查看触发器:
show triggers;
删除触发器:
DROP TRIGGER [schema_name] trigger_name;
【schema_name:示意数据库名称,可选参数,如果省略则示意从以后数据库中删除触发器。】
谢谢大家浏览,如果想要获取更多java基础知识,能够戳我一起交流学习!