原子性
首先来谈谈这个,比如银行转账,既然我充值,那么必然得给我‘加钱’把 ,假如我充了值,但是我的余额没有变,那我是不是可以起诉了。。。。f***k
就是保证我的操作要么成功,要么失败退钱。。。
mysql是怎么保证的?
undo.log ,如果退钱; ,那么数据库就会执行undo.log 那什么是undo log呢?他是逻辑日志, 如果insert 了一条记录,他就记录delete一条记录,然后就执行就好了。
一致性
就是保证数据不会被破坏,数据库会检测你的数据约束是否被破坏。。。这个觉得没什么好讲的
隔离性
两个事务之间要隔离 哈哈哈 我是这么理解的!
mysql是怎么实现的呢
其实挨想想 就知道了嘛,我把我要搞的XX东西,拿把🔒装起来,这样我还不信别人还能拿到 哈哈
锁的类型下面这几种
s锁就是读,随便读嘛,我让你读,没事,只要别读我再改的数据的就行了, x锁是写,这个可不能给别人啊,你能搞 ,我也能搞,这到底算谁再搞呢
is也是一样的 ix 我想要改,那么给我个面子别来搞事 对吧 x和s就不来了、
这里mvcc就是多版本,方便嘛,不然我总是把东西锁住,谁还来看啊,我复制一个让你看去,但不能改 爽不爽
这部来的人多了,也变快了。
算法我就不讲了,不会啊
这个已经解释了很清楚了,脏读怎么解决,我再改的东西不让你读啊,这不就好了, mvcc 解决了并发访问数据不一致问题,就算我tm再改,你们读的也不是我这个版本 哈哈 然后利用gap-lock算法锁住一个范围,那么这个范围也就没用问题了把 这样也就都解决了
当然也有可能有死锁问题的哦, 当两个或者两个以上的线程因为竞争资源而互相等待,若无外力帮助,他们将一直等待下去,可以用图来解决
隔离级别 第三个比较好,越到下面效率越低,最后一个简直了 读都不让一起读,你怎么不去***
持久性
就是断电后,我们还能愉快的玩耍,redo log站出来了,说随便你们搞 我托底。
因为binlog比较大 事务搞完了通知我一声就好了 是数据库层面的 而redo log至少引擎方面的 每次提交事务都要刷盘,所以二进制的
你看看一般这种断电后的 一般回复文件都是二进制的啊 因为快啊,bin log 为了友好一点还能给人看,就不是二进制的