MySQL事务与隔离

1、开启事务: start transaction; 或者 set autocommit = off;
2、保存记忆点a:savepoint a;
3、回滚到记忆点a: rollback to a; 或者回滚所有 rollback;
4、提交事务:commit;

注:事务是默认开启并自动提交的

脏读:对于一个事务对于数据库的操作还并未提交,但其他事务能够看到操作结果; 产生脏读

不可重复读:对于一个事务对于数据库进行修改或删除的操作并且已提交,其他访问的事务能够查到操作后的结果,导致每次读到的结果都不同,不可重复读

幻读:对于一个事务对于数据库进行插入的操作并且已提交,其他访问的事务能够查到操作后的结果,导致每次读到的结果数都不同,产生幻读

事务隔离:多个连接开启各自事务操作数据库时,数据库要负责隔离操作,以保证各个连接获取数据时的准确性。如果不考虑隔离性,就会引发脏读、不可重复读、幻读;

事务隔离级别:定义了事务与事务间的隔离程度,只与各自连接设置的隔离级别有关,与别的连接设置的隔离级别无关;(如果一连接隔离级别为不可重复读,自己的连接为读未提交,那么另一连接提交前所进行的操作的结果,自己可以查询到。反之,因为另一连接的隔离设置级别为可重复读,自己的操作结果对方看不到)

MySQL隔离级别(4种)脏读不可重复读幻读加锁读
读未提交(read uncommitted)不加锁
读已提交(read committed)×不加锁
可重复读(repeatable read)×××不加锁
可串行化(serializable)×××加锁

√ 表示可能,× 表示不会发生,加锁表示当前事务对表的操作提交之前,别的事务不能对该表进行操作

#查询当前会话隔离级别 5.0版本
select @@tx_isolation;
#查询当前会话隔离级别 8.0版本
select @@transaction_isolation;
#查询系统当前隔离级别 5.0版本
select @@global.tx_isolation;
#查询当前会话隔离级别 8.0版本
select @@global.transaction_isolation;
#设置当前会话隔离级别
set session transaction isolation level read uncommitted #读未提交
/ read committed  #读已提交
/ repeatable read #可重复读
/ serializable    #可串行化

#设置系统隔离级别
set global transaction isolation level read uncommitted #读未提交
/ read committed  #读已提交
/ repeatable read #可重复读
/ serializable    #可串行化

系统默认是 repeatable read 一般情况下,没有特殊要求,
没有必要修改(该级别可以满足绝大部分项目需求)

修改系统默认隔离级别
在my.ini文件的[mysqld]下面设置后重启服务:
#READ-UNCOMMITTED,READ-COMMITTED,SERIALIZABLE
transaction-isolation = REPEATABLE-READ[你需要设置的级别]

MySQL事务的ACID四大特性:

  1. 原子性(Atomicity): 原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。
  2. 一致性(Consistency):事务必须使数据库从一个一致性状态变换到另外一个一致性状态
  3. 隔离性(Isolation):事物的隔离性是多个用户并发访问数据库时,数据库为每一个用户开启的事务,不能被其他事务的操作数据所干扰,多个并发事务之间要相互隔离。
  4. 持久性(Durability):持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来即使数据库发生故障也不应该对其有任何影响。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值