这是我参与「第三届青训营 -后端场」笔记创作活动的第1篇笔记
深入理解RDBMS.pptx - 飞书文档 (feishu.cn)
事务(Transaction):是由一组SQL语句组成的一个程序执行单元(Unit)
BEGIN;
UPDATA account_table SET balance = balance = '小目标' WHERE name = '抖音';
UPDATA account_table SET balance = balance = '小目标' WHERE name = '杨洋';
COMMIT;
数据库事务的四大特性:
原子性(Atomicity):一个事务中的所有操作要么全部执行,要么都不执行。
一致性(Consistency):业务逻辑保证完整性和一致性。
隔离性(Isolation):多个事务并发执行时,互相不影响。
持久性(Durability):事务完成之后,对数据库的更改将持久的保存下来,不会因为宕机而被回滚。
事务ACID的底层实现方式
原子性:Undo log
undo log是逻辑日志,记录的是数据的增量变化,它的作用是保证事务的原子性和事务的并发控制。事务再执行过程中发生错误,会被恢复(rollback)到事务开始前的状态。另外,undo log可以用于事务回滚,以及提供多版本机制(MVCC),解决读写冲突和一致性读的问题。
BEGIN;
UPDATA account_table SET balance = balance = '小目标' WHERE name = '抖音';
Server crush -- undo log
UPDATA account_table SET balance = balance = '小目标' WHERE name = '杨洋';
COMMIT;
隔离性:LOCK / MVCC
允许多个并发事务同时对数据库进行读写和修改。并发读时采用Share Lock;并发写时采用Exclusive Lock;并发读写可采用MVCC机制。
MVCC的意义:读写互不阻塞;降低死锁概率;实现一致性读。
持久性:Redo log
WAL:修改并不直接写入搭配数据库文件中,而是写入到另外一个成为WAL的文件中;如果事务失败,WAL中的记录会被忽略,撤销修改;如果事务成功,它将在随后的某个时间被写回到数据库文件中,提交修改。
数据库的稳定性和可靠性
BinLog:用来记录数据库表结构变更以及表数据修改的二进制日志,它只会记录表的变更操作,不会记录select和show这种查询操作。
主从复制:主库将binlog传给从库,从库接收到之后读取内容写入从库,实现主从一致性。
审计:通过二进制日志中的信息进行审计,判断是否对数据库进行注入攻击。