数据库四大特性与隔离级别

一、四大特性ACID

1. 原子性(Atomicity):

事务包含的所有操作要么全部成功,要么全部失败回滚。

2. 一致性(Consistency):

一个事务执行之前和执行之后都必须处于一致性状态。

3. 隔离性(Isolation):

多个并发事务之间,应当相互隔离。

4. 持久性(Durability):

指一个事务一旦提交,它对数据库中的数据的改变就应该是永久性的。

二、数据库事务隔离级别

1、未提交读(Read uncommitted):

 事务中的修改及时没提交也会被其他事务可见,这样会产生脏读(虚读),如果事务失败回滚,则其他事务之前的到的数据则是脏数据。

2、提交读(Read committed) 

在事务完成提交之前,其他事务看不到该事务的修改结果。执行两次同样的查询可能看到不一样的结果。

3、重复读(Repeatable read)

事务B以插入或删除行等方式来修改事务A的结果集,然后再提交。事务A再读取时,却发现数据发生了变化。造成了幻读。

不可重复读和幻读有什么区别的呢?不可重复读针对update,幻读针对insert与delete

4、序列化(Serializable) 

Serializable是最高的事务隔离级别,同时代价也花费最高,性能很低,一般很少使用。

 

为什么Read committed 能读到最新的数据(当前读),Repeatable read读到的是老的数据(快照)。

MVCC中的read view 生成原则,导致在不同隔离级别()下,read committed 总是读最新一份快照数据,而repeatable read 读事务开始时的行数据版本

Repeatable read能不能解决幻读?

可以解决也可以不解决,看需求。

MySQL InnoDB的可重复读并不保证避免幻读,需要应用使用加锁读来保证。而这个加锁度使用到的机制就是next-key locks。

如果使用普通的读,会得到一致性的结果,如果使用了加锁的读,就会读到“最新的”“提交”读的结果。

总结的不好,以后再细化吧。


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值