MySQL-如何创建MYSQL存储过程和触发器

MySQL-如何创建MYSQL存储过程和触发器

甜柠檬 发布于 2017-03-03 字数 323 浏览 1214 回复 2

在数据库系统开发过程中,如果能够应用存储过程,可以使整个系统的运行效率有明显的提高,触发器在数据库系统开发过程中具有非常重要的作用,例如可以防止有害数据录入数据库,可以改变或取消insert、update和delete语句的执行及在一个会话中监听数据库中的数据的改变。我们在项目开发中,哪些地方可以应用存储过程和触发器,如何创建它们?

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

晚风撩人 2017-04-15 2 楼

存储过程和触发器,类似事务连锁操作与回滚机制的作用。
他们的语句写好后和sql语句一样执行。下面是一个触发器。

DELIMITER $$

CREATE

/*[DEFINER = { user | CURRENT_USER }]*/
TRIGGER `ptv`.`r` BEFORE/AFTER INSERT/UPDATE/DELETE
ON `ptv`.`city`
FOR EACH ROW BEGIN

END$$

DELIMITER ;

看参数应该可以理解当ptv.city表有insert,update,delete操作接着要做什么。。

具体的可以查看相关的说明。
不过现在php+mysql真正的项目中很少用触发器,应该这种一旦绑定了就有连锁的一系列操作,不利于项目的维护与扩展。
大部分情况mysql表一般都是独立操作,采取shell定时脚本来做表的批量操作效率更好。
个人见解。

虐人心 2017-03-13 1 楼

创建存储过程
create or replace procedure procedure_name
is ---参数(如果没有指定的参数is也不可少 这好像是格式限定的)
begin
--这里可以写update delete insert 语句--
delete from table where id=1;--DML操作语句
commit;
--后面可以选择添加一个异常处理
exception
when... then... 异常处理语句
end;

在java代码中可以调用存储过程,在存储过程创建的时候,数据库已经对其进行了一次解析和优化。其次,存储过程一旦执行,在内存中就会保留一份这个存储过程,这样下次再执行同样的存储过程时,可以从内存中直接调用,效率较快。
通过Connection 创建CallableStatement对象
CallableStatement cs=Connection.preparecall("{call procedure_name(?参数占位符)}")
cs.setInt(1,参数值);进行传参
cs.execute();---执行,如果有返回结果集 true ,否则 false。