精通数据库事务

原子性

首先来谈谈这个,比如银行转账,既然我充值,那么必然得给我‘加钱’把 ,假如我充了值,但是我的余额没有变,那我是不是可以起诉了。。。。f***k

就是保证我的操作要么成功,要么失败退钱。。。

mysql是怎么保证的?

undo.log ,如果退钱; ,那么数据库就会执行undo.log 那什么是undo log呢?他是逻辑日志,
如果insert 了一条记录,他就记录delete一条记录,然后就执行就好了。

一致性

就是保证数据不会被破坏,数据库会检测你的数据约束是否被破坏。。。这个觉得没什么好讲的

隔离性

两个事务之间要隔离 哈哈哈 我是这么理解的!

mysql是怎么实现的呢

其实挨想想 就知道了嘛,我把我要搞的XX东西,拿把?装起来,这样我还不信别人还能拿到 哈哈

锁的类型下面这几种

image.png

s锁就是读,随便读嘛,我让你读,没事,只要别读我再改的数据的就行了,
x锁是写,这个可不能给别人啊,你能搞 ,我也能搞,这到底算谁再搞呢

is也是一样的
ix 我想要改,那么给我个面子别来搞事 对吧 x和s就不来了、

image.png

这里mvcc就是多版本,方便嘛,不然我总是把东西锁住,谁还来看啊,我复制一个让你看去,但不能改 爽不爽

这部来的人多了,也变快了。

image.png

算法我就不讲了,不会啊

image.png

这个已经解释了很清楚了,脏读怎么解决,我再改的东西不让你读啊,这不就好了,
mvcc 解决了并发访问数据不一致问题,就算我tm再改,你们读的也不是我这个版本 哈哈
然后利用gap-lock算法锁住一个范围,那么这个范围也就没用问题了把 这样也就都解决了

image.png

当然也有可能有死锁问题的哦,
当两个或者两个以上的线程因为竞争资源而互相等待,若无外力帮助,他们将一直等待下去,可以用图来解决

image.png

隔离级别 第三个比较好,越到下面效率越低,最后一个简直了 读都不让一起读,你怎么不去***

持久性

就是断电后,我们还能愉快的玩耍,redo log站出来了,说随便你们搞 我托底。

image.png

因为binlog比较大 事务搞完了通知我一声就好了 是数据库层面的 而redo log至少引擎方面的 每次提交事务都要刷盘,所以二进制的

你看看一般这种断电后的 一般回复文件都是二进制的啊 因为快啊,bin log 为了友好一点还能给人看,就不是二进制的

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享