MySQL 存储过程与事物

本文详细介绍了数据库中的存储过程和事务的概念。存储过程作为一种预编译的代码块,能提高执行效率并增强安全性;事务则确保了数据操作的完整性和一致性,通过ACID属性保证数据的正确性。
一:存储过程
   存储过程可以说是一个记录集吧,它是由一些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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值