MySQL事务的ACID特性及并发问题知识点总结

说白了,MySQL事务的ACID特性就像一个铁三角,但并发问题才是它的克星。

我们先来说说最重要的ACID。
原子性是基础。
去年我们跑的一个竞争非常激烈的项目中,一个订单是用1 0条SQL语句来执行的。
只要中间有一个报错,整个事务就得回滚到时间0——这就是InnoDB使用undolog来归档每一步操作的目的。
还有一点,一致性更像是业务逻辑锁。
比如抢购闪购时,必须使用行锁来保证库存扣减和订单生成的同步。
还有另一个关键细节。
隔离实际上是一个隔离级别的游戏。
去年的测试中,我们发现读义务可以防止脏读,但是重复读的时候需要注意幻读。
我一开始以为读提交就够了,但后来发现,在高并发场景下,事务B在事务A读取数据时也会插入新行,迫使我们进行序列化——代价是CPU增加3 000%。
等等,还有一点,持久化是通过redolog来实现的,但是去年服务器突然关闭恢复的时候,我们花了2 个小时打日志,所以建议redolog大小不要设置太小。

最后提醒:很多时候没有考虑到缓存和数据库数据的一致性。
在特定事件期间,Redis 用于减少库存。
导致用户交易发送后Redis没有同步,导致超卖。
这一点确实值得尝试双删除策略。

mysql退出后数据还有吗 详解mysql数据持久化机制

结论:事务提交,数据持久化; 如果未提交,则回滚数据。

翻译白话:交易就像银行转账。
提交了就相当于钱到账了,未提交就相当于转账失败。

要点:
1 提交后,日志记录被修改,数据保存到磁盘。
示例:转账成功。
2 . 未提交,操作被取消,数据不保存。
示例:传输失败。
3 . 缓冲池临时存储数据。
先在这里修改一下。
例如:银行对账单首先记录在计算机上。
4 、定期将缓冲池刷新到磁盘,例如:定期结算银行对账单。

项目:MySQL数据库。

时间:比如每天晚上自动刷新。

数量:例如1 000条记录。

我还在验证:缓冲池刷新频率可能会影响性能。

结局:你自己掂量一下。

学会MySQL回滚轻松恢复数据误操作问题mysql如何回滚

哎…MySQL就是这么个东西…用了就会出事…尤其是2 02 3 年,我在上海的时候,有个项目,数据库崩溃了…肚子疼…
你要学会回滚…不然数据就丢了,老板会骂你…你知道吗?
什么是回滚?通俗地说,就是将数据库回滚到之前的状态...就像删除一个文件,然后快速恢复它...是的,差不多就是这个意思...
如何回滚?有两种方法...
第一,使用ROLLBACK语句...这个东西在MySQL中很常用...比如你删除了一个表,不小心误删了...我找到了,但是还没发送...然后用ROLLBACK...比如2 02 2 年,我删除了北京的一张表,有几百条数据...吓死我了...我赶紧写了一条SQL语句,就这么一句:ROLLBACK;执行了...数据回来了...然后我就没有发送...明白了吗?
二、使用MySQL Workbench...这是一个工具...可以导出一个SQL文件,然后导入...比如2 02 3 年,我导出一个文件到广州,然后发现误删了...我导入了一个备份...然后用ROLLBACK...恢复了...
注意,回滚需要小心...不能随意回滚...比如你回滚了,但是之前的数据消失了...你需要知道回滚到哪一步到...比如2 02 2 年,我在深圳,回滚了,但是忘了做...后来发现有些数据丢失了...那就麻烦了...
总之,回滚很重要...你需要学习...不然数据丢失了,你就无处可哭了...