事务相关知识,你还有不懂的嘛?

什么是事务?

经典例子,转账;
事务就是一系列的操作,满足ACDI的特性,事务中的操作要么全部成功,要么全部失败。

ACDI?

Atomicity原子性,要么全部成功要么全部失败,不可能只执行一部分操作
Consistency一致性,数据库从一个状态到另一个状态前后保持一致,不会存在中间态
Isolation隔离性,通常情况下,一个事务未提交之前,对其他事务不可见
Durability持久性,事务一旦提交,那么对数据库的更改就是永久性的,即便系统崩溃也不会影响事务的结果

同时进行多个事务,也就是事务并发会怎样?

脏读:A事务读到B事务未提交的内容,但是B事务进行了回滚;
不可重复读:A事务读取到B事务已经提交的内容,造成A事务两次查询结果不一致,是因为在两次查询期间,B事务进行了提交操作;
幻读:A事务读取一个范围的内容,B事务在此期间插入了一条数据,造成”幻觉“。

怎么解决这些问题?mysql事务隔离级别了解吗?

mysql有四种隔离级别:

未提交读 read uncommited
这个隔离级别下,其他事务可以看到本事务没有提交的内容,会造成脏读问题;
这个级别对性能没有足够大优势,又容易出现问题,所以很少使用

已提交读 read committed
其他事务只能读取到本事务已经提交的部分,会造成不可重复读问题;同一个事务的两次读取的结果不一致,因为另一个事务对数据进行了修改 。

可重复读 repeatable read
解决了上面不可重复读的问题,但是会出现幻读;当读取id>10的数据时,对涉及到的所有行加上读锁,此时另一个事务插入id=11的数据,因为新插入的数据,不会触发上面的锁的排斥,那么本事务下一次查询时就会多出一条id=11的数据。

可串行化 serializable
能解决所有可能出现的问题,强制将操作串行执行,但性能低下。

InnoDB使用哪种隔离级别?

可重复读

Mysql的锁了解多少?

当数据有并发事务的时候,可能会产生数据不一致,这时需要锁机制保证访问次序。

例子:
酒店的房间,如果大家随意进出,会出现多人争夺一个房间的情况,而在房间装上锁,只有申请钥匙的人才能入住并将房间锁起来,使用完毕之后他人才能使用。

MySQL有哪些锁?像上面那样锁定会不会影响并发的效率?

按类别分,共享锁 排他锁

共享锁:又叫读锁,当用户进行数据读取时,会对数据加上共享锁;共享锁可以同时加上多个
排他锁:又叫写锁,当用户进行数据写入时,对数据加上排他锁,排他锁只能加一个,它和其他排他锁、共享锁都相斥。

例子:
用户的行为可以分为两种,一种是来看房,多个用户可以一起看;一种是要住一晚,那么任何其他像入住或想看房的都不可以。

锁的粒度取决于具体的存储引擎,InnoDB实现了行级锁,页级锁,表级锁
加锁开销从大到小,并发能力从大到小

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值