zoukankan      html  css  js  c++  java
  • 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
    

      

  • 相关阅读:
    Servlet访问第一次500,刷新后404的解决办法
    关于eclipse保存代码很慢,提示the user operation is waiting的问题
    编译时,运行时解释
    JDK、JRE、JVM
    IDEA使用maven中tomcat插件启动项目乱码问题
    treeGrid树形数据表格的json数据格式说明
    Maven最佳实践:Maven仓库(转)
    intelliJ idea debug模式下启动慢的原因
    基于 Annotation 拦截的 Spring AOP 权限验证方法
    化繁为简 如何向老婆解释MapReduce?(转载)
  • 原文地址:https://www.cnblogs.com/xiaoyaodijun/p/4425732.html
Copyright © 2011-2022 走看看