`
技术改变未来
  • 浏览: 5912 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

MySql的事物处理,提交,回滚

阅读更多

       最近在做的一个小项目,用到了MySql数据库,以前都没涉及到这方面,所以还是按照了其他数据库的思维来用MySql。可是在做事物的rollback的时候却怎么也不成功。查找了MySql的相关资料才了解到MySql的事务处理和其他数据库还是有区别的。

      首先,你在创建MySql数据库表的时候,一定要选择他的引擎为INNODB和BDB类型。只有这两种类型支持事物处理。你可以通过show variables like "have_%"命令查看一下当前的INNODB信息,如果have_innodb一项为YES则,当前数据表支持事物处理。

     其次,MySql的事物处理时有两种的。以前我认为数据库用到回滚时,只有设置autocommit,但在MySql里还有别的方式。MySql的事物处理有两种方式:

     1、用begin,rollback,commit来实现
          begin 开始一个事务
          rollback 事务回滚
          commit  事务确认

     2、直接用set来改变mysql的自动提交模式
          MYSQL默认是自动提交的,也就是你提交一个QUERY,它就直接执行!我们可以通过
          set autocommit=0   禁止自动提交
         set autocommit=1 开启自动提交
         来实现事务的处理。

      但注意当你用 set autocommit=0 的时候,你以后所有的SQL都将做为事务处理,直到你用commit确认或rollback结束,注意当你结束这个事务的同时也开启了个新的事务!按第一种方法只将当前的作为一个事务!

      例子:(第一种方法)

       MySqlTransaction tx = con.BeginTransaction();
                MySqlCommand cmd = new MySqlCommand("set names gb2312", con);                  
                cmd.Transaction = tx;    
                cmd.ExecuteNonQuery();
              
               
                try
                {
                    for (int i = 0; i < sqlList.Count; i++)
                    {
                        string strsql = sqlList[i].ToString();
                        if (strsql.Trim().Length > 1)
                        {
                            cmd.CommandText = strsql;
                            cmd.ExecuteNonQuery();
                        }
                  
                    }
                    //提交所做的Sql操作
                    tx.Commit();
                       
                    flag = true;
                              
                    
               }
               catch (Exception ex)
               {
                    tx.Rollback();
                    LogManager.WriteLog(LogFile.Error, ex.Message);
                   
               }

分享到:
评论

相关推荐

    mySQL事务处理

    关于mysql的事务处理 public static void StartTransaction(Connection con, String[] sqls) throws Exception { if (sqls == null) { return; } Statement sm = null; try { // 事务开始 System....

    php下pdo的mysql事务处理用法实例

    主要介绍了php下pdo的mysql事务处理用法,以实例形式分析了基于pdo的事物提交与回滚操作的用法,具有一定的参考借鉴价值,需要的朋友可以参考下

    Java面试题mysql数据库和jvm知识面试题用于技能提升和面试提升

    MySQL事物 9 一、事务定义 9 二、转账操作理解事务 9 三、事务四大特征(ACID) 10 四、关于事务的一些术语 10 五、和事务相关的两条重要的SQL语句(TCL) 10 六、事务开启的标志?事务结束的标志? 10 七、事物与数据库...

    自整理! 最全mysql笔记

    - 如果要提供提交、回滚、崩溃恢复能力的事物安全(ACID兼容)能力,并要求实现并发控制,InnoDB是一个好的选择 - 如果数据表主要用来插入和查询记录,则MyISAM引擎能提供较高的处理效率 - 如果只是临时存放数据,...

    php结合mysql与mysqli扩展处理事务的方法

    以下只是展示如何应用,具体用的时候要加上判断,如果都执行成功则提交,否则回滚 看前先分清mysqli与mysql扩展是不一样的 mysqli扩展处理事物: $mysqli=new mysqli('localhost','root','123456','test'); $mysqli...

    TCC-Transaction分布式事务DEMO

    TCC-Transaction分布式事务DEMO,基于Mysql数据库的事务,包括分布式提交和回滚,例子完成,可以正常跑,基于Maven构建的项目

    mysql数据库的基本操作语法

    MySQL结束符是“;”结束。 1、 显示所有数据库 show databases; 2、 删除数据库 drop database dbName; 3、 创建数据库 create database [if not exists] dbName; 中括号部分可选的,判断该数据不存在就创建 4、 ...

    毕业设计 - Python基于Flask框架前后端分离实现房屋租赁民宿预订平台

    6 数据库操作基于事物提交,如果发生错误可以回滚并记录到日志文件。 7 数据库表设计采用了用空间换时间的思想,大大节省了服务器cpu查询数据库的压力。 8 合理的设置索引,可以大大的提高查询的执行效率,不过维护...

    Python基于Flask框架前后端分离实现房屋租赁民宿预订平台

    6 数据库操作基于事物提交,如果发生错误可以回滚并记录到日志文件。 7 数据库表设计采用了用空间换时间的思想,大大节省了服务器cpu查询数据库的压力。 8 合理的设置索引,可以大大的提高查询的执行效率,不过维护...

    高频大数据解决方案.pptx

    关键特性: 内置异常恢复/HA功能 9 分区就是复制的单位 事务复制操作(不是更改记录)使用Active/Active 同步复制方式 应用只有在所有复制节点都提交(或者回滚)后才会收到成功(或者失败)的响应 高频大数据解决...

    laravel Model 执行事务的实现

    使用transaction方法时不需要担心手动回滚或提交: DB::transaction(function () { DB::table('users')-&gt;update(['votes' =&gt; 1]); DB::table('posts')-&gt;delete(); }); 手动使用事务 如果你想要手动开始事务从而对...

    Python基于Flask框架前后端分离实现房屋租赁民宿预订平台+源代码+文档说明+数据库.zip

    6 数据库操作基于事物提交,如果发生错误可以回滚并记录到日志文件。 7 数据库表设计采用了用空间换时间的思想,大大节省了服务器cpu查询数据库的压力。 8 合理的设置索引,可以大大的提高查询的执行效率,不过维护...

    经典全面的SQL语句大全

    Recordset没有包含其他内容,因此你很快就能找到你需要的记录这样就大大降低了处理时间。 再谈随机数  现在你下定决心要榨干Random 函数的最后一滴油,那么你可能会一次取出多条随机记录或者想采用一定随机范围内的...

Global site tag (gtag.js) - Google Analytics