一.MySQL创建存储过程
DELIMITER //
CREATE PROCEDURE procedure_name (parameters)
BEGIN
-- 存储过程的 SQL 语句;
END //
DELIMITER ;
--执行存储过程的 SQL 语句;
call procedure_name();
二.在存储过程中抓捕报错
1.创建捕获报错的
#创建捕获报错的
create table write_log(
id int primary key auto_increment,
pro_name varchar(255) comment '存储过程名称',
returned_sqlstate varchar(255),
message_text varchar(255),
add_time datetime
);
create procedure write_log_new(in pro_name varchar(255), in returned_sqlstate varchar(255), in message_text varchar(255))
begin
insert into write_log (pro_name, returned_sqlstate, message_text, add_time)
select pro_name, returned_sqlstate, message_text, current_timestamp;
end;
call write_log_new('phy_table_map_pro', '@p1', '@p2');
2.加入捕获报错的存储过程
drop procedure if exists write_log;
delimiter //
create procedure write_log()
begin
--定义变量
declare done int default 0;
--当遇到报错时报错置为1
declare continue handler for not found set done =1;
declare exit handler for sqlexception
begin
get diagnostics condition 1
@p1 = returned_sqlstate, @p2 = message_text ;
select @p1, @p2;
rollback ;
--这里填写你的存储过程
call write_log_new('write_log', @p1, @p2);
end;
start transaction;
--编写你的sql代码
commit;
end //
call work_order();
三.存储过程的好处和坏处
MySQL中的存储过程(Stored Procedures)是预编译的SQL代码集合,它们可以被多次调用并且执行特定的任务。下面是一些使用存储过程的好处和坏处:
好处(Advantages):
1.代码重用:存储过程允许你将复杂的SQL逻辑封装在一个命名的单元中,从而可以在多个地方重复使用。
2.提高性能:存储过程是预编译的,这意味着当首次执行存储过程时,MySQL会对其进行解析、优化和编译。之后,每次调用该存储过程时,MySQL都可以直接执行编译后的代码,无需再次进行解析和编译,从而提高性能。
3.简化复杂操作:存储过程可以封装复杂的SQL逻辑,使得应用程序只需要调用一个简单的存储过程名就可以完成复杂的操作。
4.安全性:通过限制对数据的直接访问,只提供存储过程的接口,可以增加数据的安全性。此外,存储过程可以限制对基础表的直接访问,确保数据完整性。
5.减少网络流量:由于存储过程在服务器上执行,因此应用程序只需要发送调用存储过程的请求和参数,而不是整个SQL语句。这可以减少网络流量,提高性能。
6.更好的事务管理:存储过程可以很容易地使用事务逻辑来确保数据的完整性和一致性。
坏处(Disadvantages):
1.复杂性:对于简单的SQL查询,使用存储过程可能会增加不必要的复杂性。
2.调试困难:调试存储过程可能比调试简单的SQL语句更困难,因为你需要处理额外的逻辑和流程。
3.可移植性:存储过程是特定于数据库的,因此如果你计划在不同的数据库系统之间迁移数据或应用程序,可能需要重写存储过程。
4.维护性:当基础数据或业务逻辑发生变化时,可能需要修改和重新编译存储过程。这可能会涉及到多个存储过程的更改,增加了维护的复杂性。
5.版本控制:存储过程版本控制可能不如应用程序代码版本控制那样容易实现。
6.依赖问题:存储过程可能会依赖于特定的数据库设置、表结构或权限。如果这些依赖项发生变化,存储过程可能会失败。
7.学习曲线:对于不熟悉存储过程的开发人员来说,学习和使用它们可能需要一些时间和努力。
8.潜在的性能问题:如果存储过程编写不当,或者包含过多的逻辑和计算,它们可能会成为性能瓶颈。
综上所述,是否使用存储过程取决于你的具体需求和应用程序的复杂性。在决定使用存储过程之前,你应该仔细评估其潜在的好处和坏处。