mysql的事物和隔离级别

修改事物的隔离级别:
修改配置文件:transaction-isolation = {read uncommitted| read commited| repeatable read| serializable}
命令行改变单个绘画或者所有新进连接得隔离级别:set [session| global] transaction isolation level {read-uncommitted| read-commited| repeatable-read| serializable}
注意:不带session和global是为下一个绘画设置事物隔离级别,使用global在全局对之后所有连接设置事物隔离级别,使用session为当前连接后续执行事务设置隔离别别

查询事务隔离级别:
mysql8以后:
select @@transaction_isolation;
select @@global.transaction_isolation;
select @@session.transaction_isolation;

mysql8以前:
select @@tx_isolation;
select @@global.tx_isolation;
select @@session.tx_isolation;

隔离级别:

隔离级别脏读不可重复度幻读
未提交读可能可能可能
已提交读不可能可能可能
可重复读不可能不可能可能
串行化不可能不可能不可能



未提交读:允许脏读,第一个事物可能读取到第二个事物未提交的修改(增,删,改)数据
已提交读:只能读到已提交的数据,不可重复读
可重复读:事物未结束时,读取到的内容总是相同的
串行化:每次读都是表级共享锁,一个事物的读操作,也会阻塞另一个事物的修改操作

脏读:一个事物正在修改数据但未提交,另一个事物可以访问到该数据
不可重复读:第一个事物内,多次读取同一数据,第二个事物修改该数据并提交,在第一个事物中可能两次读取的数据不同
可重复读:第一个事物内,多次读取同一数据,第二个事物插入数据并提交,在第一个事物中不会立马读取到第二个事物的修改,两次读取的数据相同,直到事物结束才能看到第二个事物中的修改数据
幻读:第一个事务对表中的数据进行了修改,这种修改涉及到表中的全部数据行。第二个事务也修改这个表中的数据,这种修改是向表中插入一行新数据。那么第一个事务的用户发现表中还有没有修改的数据行,就好象发生了幻觉一样
注意:当隔离级别是可重复读,且禁用innodb_locks_unsafe_for_binlog的情况下,在搜索和扫描index的时候使用的next-key locks可以避免幻读。

第一个事物对表结构的修改会被阻塞,即使第二个事物是select查询;

for update只锁定满足条件的行:SELECT * FROM 表名 WHERE 条件 FOR UPDATE;

如果使用普通的读(select * from 表名),会得到一致性的结果,如果使用了加锁的读(for update或者lock in share mode),就会读到“最新的”“提交”读的结果。在默认的可重复读的隔离级别里,可以使用加锁读去查询最新的数据(提交读)。改事物的隔离级别:
修改配置文件:transaction-isolation = {read uncommitted| read commited| repeatable read| serializable}
命令行改变单个绘画或者所有新进连接得隔离级别:set [session| global] transaction isolation level {read-uncommitted| read-commited| repeatable-read| serializable}
注意:不带session和global是为下一个绘画设置事物隔离级别,使用global在全局对之后所有连接设置事物隔离级别,使用session为当前连接后续执行事务设置隔离别别

查询事务隔离级别:
mysql8以后:
select @@transaction_isolation;
select @@global.transaction_isolation;
select @@session.transaction_isolation;

mysql8以前:
select @@tx_isolation;
select @@global.tx_isolation;
select @@session.tx_isolation;

隔离级别:

隔离级别脏读不可重复度幻读
未提交读可能可能可能
已提交读不可能可能可能
可重复读不可能不可能可能
串行化不可能不可能不可能



未提交读:允许脏读,第一个事物可能读取到第二个事物未提交的修改(增,删,改)数据
已提交读:只能读到已提交的数据,不可重复读
可重复读:事物未结束时,读取到的内容总是相同的
串行化:每次读都是表级共享锁,一个事物的读操作,也会阻塞另一个事物的修改操作

脏读:一个事物正在修改数据但未提交,另一个事物可以访问到该数据
不可重复读:第一个事物内,多次读取同一数据,第二个事物修改该数据并提交,在第一个事物中可能两次读取的数据不同
可重复读:第一个事物内,多次读取同一数据,第二个事物插入数据并提交,在第一个事物中不会立马读取到第二个事物的修改,两次读取的数据相同,直到事物结束才能看到第二个事物中的修改数据
幻读:第一个事务对表中的数据进行了修改,这种修改涉及到表中的全部数据行。第二个事务也修改这个表中的数据,这种修改是向表中插入一行新数据。那么第一个事务的用户发现表中还有没有修改的数据行,就好象发生了幻觉一样
注意:当隔离级别是可重复读,且禁用innodb_locks_unsafe_for_binlog的情况下,在搜索和扫描index的时候使用的next-key locks可以避免幻读。

第一个事物对表结构的修改会被阻塞,即使第二个事物是select查询;

for update只锁定满足条件的行:SELECT * FROM 表名 WHERE 条件 FOR UPDATE;

如果使用普通的读(select * from 表名),会得到一致性的结果,如果使用了加锁的读(for update或者lock in share mode),就会读到“最新的”“提交”读的结果。在默认的可重复读的隔离级别里,可以使用加锁读去查询最新的数据(提交读)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值