学习3-mysql事务

事务ACID属性说明
 原子性(Atomicity) :在当前开启的事务中,所有的操作要么全部成功,要么全部失败,不允许有部分成功或者失败的场景发生。程序执行过程中发生异常后回滚操作主要由undo log日志来完成数据回滚操作。
 一致性(Consistent):主要看启动这个事务的最终目的,需要其他3个特性都保证的前提下保证业务逻辑也需要正确。
 隔离性(Isolation):多个事务并发执行相同的数据场景时,需要保证各个事务之间操作各自的数据
时相互不影响。隔离性主要由mysql的各种锁和mvcc机制来实现。
持久性(Durable) :事务提交之后,数据将会得到永久保存,主要由redo log启动时补偿刷新数据以及i/o空闲时随机刷盘实现。(并不是事务提交就立马会把数据刷入磁盘)
并发事务存在的问题:
脏写:A、B两个事务同事修改同一条数据时,最后提交的事务会修改之前已经提交过的事务的数据。
脏读:B事务读取到了A事务修改但是未提交的数据。
不可重复读:A事务在不未提交前有其他事务修改数据并提交后,A事务多次查询得到的结果不一致。
幻读:A事务在第一次查询的时候得到1条数据,在这个过程中B事务又增加了一条数据,A事务第二次去读取时能读取到新增的那条数据。

隔离级别脏读不可重复读幻读
读未提交(Read uncommitted)
可能可能可能
读已提交(Read committed)
不会可能可能
可重复读 (Repeatableread)
不会不会可能
可串行化 (Serializable)
不会不会不会

其他情况相对简单,这里只验证一次幻读:

select * from account where id>5;

在客户端A开启事务

begin ;

select * from account
where age>30;

在B客户端开启一个事务并插入一条数据

begin ;
INSERT INTO `tangqin`.`account` (`name`, `name_cn`, `age`, `balance`, `create_data`, `last_update_date`)
VALUES ('wangwu', '王五', 55, 200, DEFAULT, DEFAULT);
commit ;

这时再去A客户端执行更新操作

update account set balance=balance+100
where age=55;

这个时候再查询数据

select * from account
where age>30;

以上是本人对mysq事务问题的总结,如有疑问欢迎各位大佬指出!

  • 9
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL事务是一组关联的SQL操作,它们被看作是一个整体,要么全部执行成功,要么全部回滚。事务具有四个ACID属性:原子性、一致性、隔离性和持久性。 首先,原子性意味着事务中的所有操作要么全部成功执行,要么全部回滚。如果事务中的一个操作发生错误,会导致整个事务回滚到之前的状态。 其次,一致性表示事务执行完毕后,数据库将会进入一个有效的状态。在事务开始之前和结束之后,数据库的完整性约束必须得到保持,确保数据的正确性。 隔离性是指每个事务的操作在执行过程中是相互隔离的,不会互相干扰。事务并发执行时可能会出现的问题包括脏读、不可重复读和幻读。为了解决这些问题,数据库系统提供了四个隔离级别:未提交读取、已提交读取、可重复读取和串行化。 最后,持久性是指一旦事务被提交,对数据库的修改将会永久保存,即使在系统故障的情况下也是如此。数据库系统通过将事务的日志记录到磁盘上来实现持久性。 在MySQL中,可以使用START TRANSACTION语句来开始一个事务,COMMIT语句来提交一个事务,ROLLBACK语句来回滚一个事务。此外,可以使用事务控制语句来设置隔离级别,如SET TRANSACTION ISOLATION LEVEL。要保证事务的正确性和性能,还应注意事务的边界,避免事务嵌套过深。 深入学习MySQL事务需要理解事务的四个ACID属性以及MySQL事务控制语句。此外,还需要了解事务的隔离级别,以便在并发执行的情况下避免数据不一致的问题。掌握MySQL事务的概念和操作方法,可以保证数据库操作的一致性和可靠性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值