关于java:MySQL一一sql的存储过程触发器

55次阅读

共计 1969 个字符,预计需要花费 5 分钟才能阅读完成。

以后数据库中有一张 acount 表

一、存储过程的创立:

(1)语法:mysql> CREATE PROCEDURE 创立的存储过程名字(OUT|IN|INOUT 参数名 数据类型,…,…) 特色 过程体;

解析如下图:

(2)应用:

列出存储过程的具体列表:show procedure status;

删除:drop procedure 要删除的存储过程的名字;

查看创立存储过程的信息:show create procedure 创立的存储过程名字;

查看所有存储过程:show procedure status \G;

(3)示例:

创立一个存储过程 pshow,不带参数:

调用该存储过程 pshow();留神调用的时候不带参数的不必加括号

创立一个带参数的存储过程 pfun:

调用存储过程 pfun

call procedure();// 无参

call procedure(@x,@y,);// 有参数 (此处 x、y 为输入参数, 为输出参数)

用完后,间接应用 select @x,@y; 来查问 x、y 的值。

查看目前所有的存储过程

二、存储函数:

(1)语法:CREATE FUNCTION 创立的存储函数名字(参数名称 参数类型,…,…)  RETURNS 返回值得类型  函数体;

(2)应用

调用存储函数:select 函数名字([参数]);// 依据定义函数的形参,形参加实参保持一致

查看创立函数信息:show create function 函数名字  /G;

查看所有自定义函数:show function status \G;

删除存储函数:drop function 函数名字;

(3)示例:

创立一个存储函数 fnameshow:

调用存储函数:

创立一个带参数的存储函数 mydelete

调用:

再查看表,发现 id= 5 的这一行被删除了:

查看存储函数:

三、触发器:

(1)、语法:

CREATE TRIGGER 创立的触发器名字 BEFFOR|AFTER  INSERT|UPDATE|DELETE

ON 表名字 FOR  触发器的执行距离   触发器的 SQL 语句

解析如下表:

留神(摘自网络):

触发程序与要创立触发器的表相干。该表必须援用永久性表。不能将触发程序与长期表表或视图关联起来。

触发程序的动作工夫 BEFORE 或 AFTER,以指明触发程序是在激活它的语句之前或之后触发。

激活触发程序的语句的类型。下述值之一:

·         INSERT:将新行插入表时激活触发程序,例如,通过 INSERT、LOAD DATA 和 REPLACE 语句。

·         UPDATE:更改某一行时激活触发程序,例如,通过 UPDATE 语句。

·         DELETE:从表中删除某一行时激活触发程序,例如,通过 DELETE 和 REPLACE 语句。

请留神,trigger_event 与以表操作形式激活触发程序的 SQL 语句并不很相似,这点很重要。

例如,对于 INSERT 的 BEFORE 触发程序不仅能被 INSERT 语句激活,也能被 LOAD DATA 语句激活

(2)应用

查看所有的触发器:show triggers \G;

删除触发器:drop trigger 触发器名字;

(3)示例

创立一个插入型触发器

更新表中的数据,查看表,发现 id= 4 的 balance 由原来的 500 变为了 509

查看触发器

四、存储过程、存储函数和触发器的比照:

(1)根本区别:

(2)优缺点比照:

存储过程:

长处:

* 有 if/else,case,while 等管制语句,通过编写存储过程,能够实现一些逻辑比较复杂的性能;

* 模块化;对一些性能进行了封装,代码的复用;

* 响应速度快,只有在首次执行时须要通过编译和优化步骤,后被调用间接执行,省去了从新编写代码计算的步骤。

* 缩小网络传输。存储过程间接就在数据库服务器上跑,所有的数据拜访都在服务器外部进行,不须要传输数据到其它终端。

* 不便 DBA 优化。所有的 SQL 集中在一个中央

毛病:

* 简单的业务逻辑。没方法利用缓存。

触发器

长处:

* 平安。能够基于数据库的值使用户具备操作数据库的某种权力。能够跟踪用户对数据库的操作。

* 触发器可能回绝或回退那些毁坏相干完整性的变动,勾销试图进行数据更新的事务。当插入一个与其主健不匹配的内部键时,这种触发器会起作用。

毛病:
* 数据集数据量又较大时,触发器成果会非常低(因为主动计算数据值,须要变动整个数据集导致效率降落)

* 对于批量操作并不适宜应用触发器,应用触发器实现的业务逻辑在呈现问题时很难进行定位。

五、注意事项:

在 MySQL 中,默认以分号为分隔符,在写存储过程、存储函数、触发器时,编译器会当做 SQL 语句来进行解决,编译过程会呈现谬误,所以要当时用”delimiter @”申明 @(或者其余,由用户本人定义)为以后的段分隔符,让编译器把两个 @之间的内容当做存储过程、存储函数、触发器的代码,在写残缺个内容完之后再”delimiter ;”将分隔符还原。

正文完
 0