MySQL 存储过程与事物

一:存储过程
   存储过程可以说是一个记录集吧,它是由一些T-SQL语句组成的代码块,这些T-SQL语句代码像一个方法一样实现一些功能
 
  存储过程的好处
  1.由于数据库执行动作时,是先编译后执行的。然而存储过程是一个编译过的代码块,所以执行效率要比T-SQL语句高。

  2.一个存储过程在程序在网络中交互时可以替代大堆的T-SQL语句,所以也能降低网络的通信量,提高通信速率。

  3.通过存储过程能够使没有权限的用户在控制之下间接地存取数据库,从而确保数据的安全。
 
 
 
二:事物
   一个事务是一个连续的一组数据库操作,就好像它是一个单一的工作单元进行。换言之,永远不会是完整的事务,除非该组内的每个单独的操作是成功的。如果在事务的任何操作失败,则整个事务将失败。
 
  事务的特性,事务有以下四个标准属性的缩写ACID,通常被称为:

  原子性: 确保工作单元内的所有操作都成功完成,否则事务将被中止在故障点,和以前的操作将回滚到以前的状态。

  一致性: 确保数据库正确地改变状态后,成功提交的事务。

  隔离性: 使事务操作彼此独立的和透明的。

  持久性: 确保提交的事务的结果或效果的系统出现故障的情况下仍然存在。

 
 
BEGIN

 
	DECLARE result INTEGER DEFAULT 0;
   -- 标记是否出错
	DECLARE t_error INTEGER DEFAULT 0;
 	
   -- 如果出现sql异常,则将t_error设置为1后继续执行后面的操作
  DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET t_error=1; 
  -- 显示的开启事务,启动它后,autocommit值会自动设置为0
  START TRANSACTION;  


INSERT into shop_invoicerecords  (ordersjson,orderIdjson,totalmoney,sourcedomain,userId ,invoicejson,auditingstate ,invoiceAddrssjson,addDate )VALUES(_ordersjson,_orderIdjson,_totalmoney,_sourcedomain,_userId,_invoicejson,_auditingstate,_invoiceAddrssjson,_addDate );

  UPDATE shop_order set paymenttype=_paymentType where sourcedomain=_sourcedomain and  FIND_IN_SET(id,_orderId);
    -- 标记被改变,表示事务应该回滚 
		IF t_error=1 THEN 
     -- 事务回滚 
			 ROLLBACK;  
		 set result=-1;
		 ELSE 
     -- 事务提交
			 COMMIT;  
			 set result=1;
		END IF; 
	
SELECT result;

END

  

原文地址:https://www.cnblogs.com/xiaoyaodijun/p/4425732.html