在MySQL中设置事务隔离级别有2种方法:
在MySQL中设置事务隔离级别有2种方法:
1 在my.cnf中设置,在mysqld选项中如下设置
[mysqld]
transaction-isolation = READ-COMMITTED
2 在mysql窗口用set命令重置
- mysql> set global tx_isolation='REPEATABLE-READ';
- Query OK, 0 rows affected (0.01 sec)
- mysql>
查询当前的会话事务级别,可以使用:
- mysql> select @@tx_isolation;
- +----------------+
- | @@tx_isolation |
- +----------------+
- | READ-COMMITTED |
- +----------------+
- 1 row in set (0.00 sec)
- mysql>
查询全局的事务隔离级别,可以使用
- mysql> select @@global.tx_isolation;
- +-----------------------+
- | @@global.tx_isolation |
- +-----------------------+
- | READ-COMMITTED |
- +-----------------------+
- 1 row in set (0.00 sec)
- mysql>
在Serializable模式下。
- mysql> system cat /usr/local/mysql56m2/my.cnf |grep transaction-isolation
- transaction-isolation = READ-COMMITTED
- mysql>
复制二进制与隔离级别的关系
在SERIALIZABLE模式下,Innodb存储引擎会对每个select语句自动加Lock in sharedmode,给每一个读操作加共享锁。因此在这个隔离级别下,读占用锁了,一致性的非锁定读不再予以支持。因为Innodb存储引擎在 repeatable read 模式下就已经达到了3度的隔离,所以一般不在本地事务中使用serializable隔离级别,serializable的事务隔离级别主要用于 innodb存储引擎的分布式事务。
在Read committed的隔离模式下,除了唯一性约束检查以及外键约束检查需要Gap lock,innodb存储引擎不会使用gap lock的锁算法。不过使用read committed隔离级别需要注意一些问题,mysql5.1中,Read committed的事务隔离级别默认只能在replication的二进制为row格式下,如果二进制默认在statement模式下,则会报如下错 误:
- mysql> select @@version;
- +-------------+
- | @@version |
- +-------------+
- | 5.5.25a-log |
- +-------------+
- 1 row in set (0.00 sec)
- mysql>
- mysql> select @@binlog_format;
- +-----------------+
- | @@binlog_format |
- +-----------------+
- | STATEMENT |
- +-----------------+
- 1 row in set (0.00 sec)
- mysql> select @@tx_isolation;
- +-----------------+
- | @@tx_isolation |
- +-----------------+
- | REPEATABLE-READ |
- +-----------------+
- 1 row in set (0.00 sec)
- mysql> set tx_isolation='READ-COMMITTED';
- Query OK, 0 rows affected (0.00 sec)
- mysql> use test;
- Database changed
- mysql> create table a (b int, primary key (b)) engine=innodb;
- ERROR 1050 (42S01): Table 'a' already exists
- mysql> select @@tx_isolation;
- +----------------+
- | @@tx_isolation |
- +----------------+
- | READ-COMMITTED |
- +----------------+
- 1 row in set (0.00 sec)
- mysql> begin
- -> ;
- Query OK, 0 rows affected (0.00 sec)
- mysql> insert into a select 100000;
- ERROR 1665 (HY000): Cannotexecute statement: impossible to write to binary log since BINLOG_FORMAT =STATEMENT and at least one table uses a storage engine limited to row-basedlogging. InnoDB is limited to row-logging when transaction isolation level isREAD COMMITTED or READ UNCOMMITTED.
ERROR 1665 (HY000):
Cannotexecute statement: impossible to write to binary log since
BINLOG_FORMAT =STATEMENT and at least one table uses a storage engine
limited to row-basedlogging. InnoDB is limited to
row-logging when transaction isolation level isREAD COMMITTED or READ
UNCOMMITTED.
[Note]:在mysql5.1以及mysql5.6模式下实验过都是如此。也许可以知道通过将innodb_locks_unsafe_for_binlog设置为1,来可以使binlog日志在statement下使用readcommitted的事务隔离级别:
- mysql> select @@innodb_locks_unsafe_for_binlog;
- +----------------------------------+
- | @@innodb_locks_unsafe_for_binlog |
- +----------------------------------+
- | 0 |
- +----------------------------------+
- 1 row in set (0.00 sec)
- mysql> set global innodb_locks_unsafe_for_binlog=1;
- ERROR 1238 (HY000): Variable 'innodb_locks_unsafe_for_binlog' is a readonly variable
- mysql>
此参数是只读模式,需要修改my.cnf重新启动才行。
在my.cnf里面的[mysqld]添加
[mysqld]
innodb_locks_unsafe_for_binlog = 1
然后重启,然后去check模仿一个事务操作,如下所示:
- mysql> select @@innodb_locks_unsafe_for_binlog;
- +----------------------------------+
- | @@innodb_locks_unsafe_for_binlog |
- +----------------------------------+
- | 1 |
- +----------------------------------+
- 1 row in set (0.00 sec)
- mysql>
- mysql> use test;
- Reading table information for completion of table and column names
- You can turn off this feature to get a quicker startup with -A
- Database changed
- mysql> select @@tx_isolation;
- +----------------+
- | @@tx_isolation |
- +----------------+
- | READ-COMMITTED |
- +----------------+
- 1 row in set (0.00 sec)
- mysql> begin;
- Query OK, 0 rows affected (0.00 sec)
- mysql> insert into t select 15;
- Query OK, 1 row affected (0.00 sec)
- Records: 1 Duplicates: 0 Warnings: 0
- mysql> commit;
- Query OK, 0 rows affected (0.00 sec)
- mysql> select * from t;
- +--------+
- | id |
- +--------+
- | 1 |
- | 12 |
- | 15 |
- | 11111 |
- | 111110 |
- +--------+
- 5 rows in set (0.00 sec)
在MySQL中设置事务隔离级别有2种方法:的更多相关文章
- mysql中不同事务隔离级别下数据的显示效果--转载
事务是一组原子性的SQL查询语句,也可以被看做一个工作单元.如果数据库引擎能够成功地对数据库应用所有的查询语句,它就会执行所有查询,如果任何一条查询语句因为崩溃或其他原因而无法执行,那么所有的语句就都 ...
- 浅谈mysql中不同事务隔离级别下数据的显示效果
事务的概念 事 务是一组原子性的SQL查询语句,也可以被看做一个工作单元.如果数据库引擎能够成功地对数据库应用所有的查询语句,它就会执行所有查询,如果任何一条查 询语句因为崩溃或其他原因而无法执行,那 ...
- mysql中的事务隔离级别
事务是逻辑上的一组操作,要么都执行,要么都不执行. 事务最经典的.经常被拿出来说的例子就是转账了.假如小花要给小白转账1000元,这个转账会涉及到两个关键操作就是:将小花的余额-1000,将小白的余额 ...
- day18 8.jdbc中设置事务隔离级别
设置数据库事务隔离级别特殊需求才有,后面很少用.因为数据库本身是事务隔离级别的,mysql的事务隔离级别是Repeatable read,可以解决脏读和不可重复读.不用设置,人家数据库是有事务隔离级别 ...
- 重新学习MySQL数据库9:Innodb中的事务隔离级别和锁的关系
重新学习MySQL数据库9:Innodb中的事务隔离级别和锁的关系 Innodb中的事务隔离级别和锁的关系 前言: 我们都知道事务的几种性质,数据库为了维护这些性质,尤其是一致性和隔离性,一般使用加锁 ...
- 事务,Oracle,MySQL及Spring事务隔离级别
一.什么是事务: 事务逻辑上的一组操作,组成这组操作的各个逻辑单元,要么一起成功,要么一起失败. 二.事务特性(4种): 原子性 (atomicity):强调事务的不可分割:一致性 (consiste ...
- MySQL事物(一)事务隔离级别和事物并发冲突
数据库的操作通常为写和读,就是所说的CRUD:增加(Create).读取(Read).更新(Update)和删除(Delete).事务就是一件完整要做的事情.事务是恢复和并发控制的基本单位.事务必须始 ...
- 深入理解Mysql索与事务隔离级别
1. 概述 1.1 定义 锁是计算机协调多个进程或线程并发访问某一资源的机制. 在数据库中,除了传统的计算资源(如CPU.RAM.I/O等)的争用以外,数据也是一种供需要用户共享的资源.如何保证数据并 ...
- Innodb中的事务隔离级别和锁的关系(转载)
nodb中的事务隔离级别和锁的关系 原文:https://tech.meituan.com/innodb-lock.html ameng ·2014-08-20 15:50 前言: 我们都知道事务的几 ...
随机推荐
- [POI2009]Slw
题目 神题!!只有\(POI\)出得出来的神题!! 只能说好像懂了,不想听蒟蒻废话就右转\(dalao\)的博客 目前网上除官方外仅三篇题解,由于推论无法直观得出且有点复杂,难免不好理解,手玩数据最重 ...
- DNS 递归/迭代 原理
递归查询 递归:客户端只发一次请求,要求对方给出最终结果.一般客户机和服务器之间属递归查询,即当客户机向DNS服务器发出请求后,若DNS服务器本身不能解析,则会向另外的DNS服务器发出查询请求,得到结 ...
- python爬虫之html解析Beautifulsoup和Xpath
Beautiifulsoup Beautiful Soup 是一个HTML/XML的解析器,主要的功能也是如何解析和提取 HTML/XML 数据.BeautifulSoup 用来解析 HTML 比较简 ...
- firefox和chrome实现页面打印自动分页
在Firefox和chrome中直接调用打印功能的js方法是 window.print(); 但是如果页面很长,那么就需要分页,这时只需要在页面中添加css属性即可,如果想自动分页,则如下所示 < ...
- ReverseInteger
public class ReverseInteger { public static int reverse(int x) { long ret = 0; //如果是个位数,直接返回. if(x/1 ...
- java 学习汇总
一.安装svn 插件 1.svn - http://subclipse.tigris.org/update 安装的过程中可能出错,解决方法: 导航到:The Eclipse Project Updat ...
- 机器学习三剑客之Numpy
Numpy NumPy是Python语言的一个扩充程序库.支持高级大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库.Numpy内部解除了Python的PIL(全局解释器锁),运算效 ...
- Hbase- Hbase客户端读写数据时的路由流程
1.客户端先到zookeeper查找hbase:meta所在的RegionServer服务器 2.去hbase:meta表查找自己所要的数据所在的region server 3.去目标region s ...
- c# 查找一个字符串在另一个字符串出现的次数
方法一: string test = "FF FF FF FF 01 00 82 00 00 A2 00 00 FB 07 FF FF FF FF 01 00 82 00 00 A2 00 ...
- mysql数据库优化课程---4、mysql字段属性
mysql数据库优化课程---4.mysql字段属性 一.总结 一句话总结: mysql字段:没有被淘汰的必然有其存在的合理性(也就是有优点),比如char类型 1.为什么char类型没有被淘汰? c ...