当前在开发ERP系统,使用到的数据库为Mysql。下面介绍下如何开启事务,以及事务隔离的机制 :

1. 检查当前数据库使用的存储引擎。

show engines;

2. 修改前my.ini中的文件如下:

3. 修改my.ini的文件如下。

3.1 修改了默认的存储引擎

3.2 增加了mysql数据库的事务隔离级别, 如果不添加默认是REPEATABLE-READ.

4. 只需要重启mysql的服务即可。

net stop mysql

net start mysql

5. 再次查询show engines,显示如下

6. 事务隔离机制的说明,以下引用自别人的文章


  • 未提交读(READ UNCOMMITTED)。另一个事务修改了数据,但尚未提交,而本事务中的SELECT会读到这些未被提交的数据(脏读)。
  • 提交读(READ COMMITTED)。本事务读取到的是最新的数据(其他事务提交后的)。问题是,在同一个事务里,前后两次相同的SELECT会读到不同的结果(不重复读)。如两个会话a和b,由于是read committed所以只有当事务提交后才能被别的事务可见,当a执行查询后b执行插入,b执行commit提交事务,这时a再次查询结果确实不一样的,a的两次查询同属于一个事务,即为不可重复读。
  • 可重复读(REPEATABLE READ)。在同一个事务里,SELECT的结果是事务开始时时间点的状态,因此,同样的SELECT操作读到的结果会是一致的。直到提交事务后再查询才可以看到其他事务在本事务执行期间锁进行的更改操作。在MySQL中InnoDB和XtraDB存储引擎通过多版本并发控制(MVCC)解决了幻读的问题。
  • 串行化(SERIALIZABLE)。读操作会隐式获取共享锁,可以保证不同事务间的互斥。
  • SQL 事务隔离级别 

在MySQL中默认事务隔离级别是可重复读(Repeatable read).可通过SQL语句查询:

查看InnoDB系统级别的事务隔离级别:mysql> SELECT @@global.tx_isolation;
 
在MySQL中默认事务隔离级别是可重复读(Repeatable read).可通过SQL语句查询:

查看InnoDB系统级别的事务隔离级别:
 
    mysql> SELECT @@global.tx_isolation;
 
结果:
+-----------------------+
| @@global.tx_isolation |
+-----------------------+
| REPEATABLE-READ       |
+-----------------------+
1 row in set (0.00 sec)
 
查看InnoDB会话级别的事务隔离级别:
 
  mysql> SELECT @@tx_isolation;
 
结果:
+-----------------+
| @@tx_isolation  |
+-----------------+
| REPEATABLE-READ |
+-----------------+
1 row in set (0.00 sec)
 
修改事务隔离级别:
    mysql> set global transaction isolation level read committed;
    Query OK, 0 rows affected (0.00 sec)

    mysql> set session transaction isolation level read committed;

    Query OK, 0 rows affected (0.00 sec)
 
InnoDB 的可重复读隔离级别和其他数据库的可重复读是有区别的,不会造成幻象读(phantom read),所谓幻象读,就是同一个事务内,多次select,可以读取到其他session insert并已经commit的数据。下面是一个小的测试,证明InnoDB的可重复读隔离级别不会造成幻象读。测试涉及两个session,分别为 session 1和session 2,隔离级别都是repeateable read,关闭autocommit
 
    mysql> select @@tx_isolation;
  
    +-----------------+
    | @@tx_isolation  |
    +-----------------+
    | REPEATABLE-READ |
    +-----------------+
    1 row in set (0.00 sec)
   
    mysql> set autocommit=off;
    Query OK, 0 rows affected (0.00 sec)
 
session 1 创建表并插入测试数据
     mysql> create table test(i int) engine=innodb;
    Query OK, 0 rows affected (0.00 sec)
    mysql> insert into test values(1);
    Query OK, 1 row affected (0.00 sec)
 
session 2 查询,没有数据,正常,session1没有提交,不允许脏读
     mysql> select * from test;
     Empty set (0.00 sec)
 
session 1 提交事务
    mysql> commit;
    Query OK, 0 rows affected (0.00 sec)
 
session 2 查询,还是没有数据,没有产生幻象读
                        
    mysql> select * from test;
    Empty set (0.00 sec)
                        
当session2提交事务后才可以看到session1的插入数据;                       
以上试验版本:
                        
    mysql> select version();
    +-------------------------+
    | version()               |
    +-------------------------+
    | 5.0.37-community-nt-log |
    +-------------------------+
    1 row in set (0.00 sec)

MySQL数据库的事务管理的更多相关文章

  1. MySQL存储过程之事务管理

    原文链接:http://hideto.iteye.com/blog/195275 MySQL存储过程之事务管理 ACID:Atomic.Consistent.Isolated.Durable 存储程序 ...

  2. django中使用mysql数据库的事务

    django中怎么使用mysql数据库的事务   Mysql数据库事务: 在进行后端业务开始操作修改数据库时,可能会涉及到多张表的数据修改,对这些数据的修改应该是一个整体事务,即要么一起成功,要么一起 ...

  3. [MySQL数据库之事务、读现象、数据库锁机制、多版本控制MVCC、事务隔离机制]

    [MySQL数据库之事务.读现象.数据库锁机制.多版本控制MVCC.事务隔离机制] 事务 1.什么是事务: 事务(Transaction),顾名思义就是要做的或所做的事情,数据库事务指的则是作为单个逻 ...

  4. 记录一次Spring boot 搭建框架连接Mysql数据库注解事务不回滚的故障

    搭建了一个新框架,使用了spring boot 替换以简化原来繁杂的spring配置,使用Spring注解管理事务,持久层使用mybatis. 连接mysql数据库完成项目的过程中发现不支持事务,因为 ...

  5. MySQL数据库分布式事务XA优缺点与改进方案

    1 MySQL 外部XA分析 1.1 作用分析 MySQL数据库外部XA可以用在分布式数据库代理层,实现对MySQL数据库的分布式事务支持,例如开源的代理工具:ameoba[4],网易的DDB,淘宝的 ...

  6. django中怎么使用mysql数据库的事务

    Mysql数据库事务: 在进行后端业务开始操作修改数据库时,可能会涉及到多张表的数据修改,对这些数据的修改应该是一个整体事务,即要么一起成功,要么一起失败. Django中对于数据库的事务,默认每执行 ...

  7. MySQL数据库的账户管理

    账户管理 在生产环境下操作数据库时,绝对不可以使用root账户连接,而是创建特定的账户,授予这个账户特定的操作权限,然后连接进行操作,主要的操作就是数据的crud MySQL账户体系:根据账户所具有的 ...

  8. DTP模型之一:(XA协议之三)MySQL数据库分布式事务XA优缺点与改进方案

    1 MySQL 外部XA分析 1.1 作用分析 MySQL数据库外部XA可以用在分布式数据库代理层,实现对MySQL数据库的分布式事务支持,例如开源的代理工具:ameoba[4],网易的DDB,淘宝的 ...

  9. 10款免费的MySQL数据库图形化管理工具

    绝大多数的关系数据库都明显不同于MS Access,它们都有两个截然不同的部分:后端作为数据仓库,前端作为用于数据组件通信的用户界面.这种设计非常巧妙,它并行处理两层编程模型,将数据 层从用户界面中分 ...

随机推荐

  1. C++ 动态数组实例

    一维动态数组的实例: #include <iostream> using namespace std; int main() { int *arr; int n; cout<< ...

  2. K米测评

    第一部分 调研,评测 K米APP使用体验 从小五音不全,所以KTV这类地方我是能不去就不去的,更别说为了点个歌去下个APP,所以K米是我第一个点歌类APP.说说第一次上手的体验吧,APP颜值一般吧,U ...

  3. 公共事件处理函数js库

    var EventUtil = { /* *添加事件处理 参数:元素对象 事件类型 处理函数 */ addHandle: function (element, type, handle) { //do ...

  4. Linux Basic --- The First Character in The File Properity

    -rw-r--r-- [d]: content [-]: file [l]: link file [b]: interface device for storage in a device file ...

  5. 提交 git 项目 到 github 在 centos 7

    Git 是分布式版本控制系统(Distributed Version Control System,简称 DVCS),它可以备份文件的历史信息,多个终端可以同时对文件作修改. 文件内容如果有了变化和之 ...

  6. >>> FilterDispatcher <<< is deprecated! Please use the new filters!

    在struts2.3.20下,web.xml中使用 会出现*********************************************************************** ...

  7. django rest framework

    Django-Rest-Framework 教程: 4. 验证和权限 作者: Desmond Chen, 发布日期: 2014-06-01, 修改日期: 2014-06-02 到目前为止, 我们的AP ...

  8. [VSTS] 从零开始 Team Foundation Server 2010 安装配置详细图文教程

    http://www.cnblogs.com/WilsonWu/archive/2011/11/24/2261674.html 近期公司要配TFS用于新项目的管理,公司也将逐步迁移至VSTS平台,前期 ...

  9. MySQL------Navicat激活方法

    转载: http://www.jianshu.com/p/b1f9194e1e31

  10. centos6.4 搭建svn服务器

    SVN作为新一代代码版本管理工具,有很多优点,管理方便,逻辑明确,安全性高,代码一致性高.SVN数据存储有两种方式,BDB(事务安全表类型)和FSFS(一种不需要数据库的存储系统),为了避免在服务器连 ...