事务
默认是自动提交事务
Start transaction
要执行的sql语句
commit
如果执行语句出现问题 就会执行rollback操作 回滚操作
原子性(undo log)
要么成功要么不成功 执行不成功就会回滚
undo log 实现原子性
如果执行错误 就会回滚到原来状态
将错误的版本回滚到 原来的版本
如果语句发生失败就会发生回滚 要把sql语句的执行信息
持久性(redo log)
持久性事物 就是指 这个事物一旦提交 对事物的改变是持久性的
mysql 数据存储在 磁盘中 如果每次都提取数据都会 读取数据在io中 就会有很多的性能耗能
如果每次数据都会刷新到磁盘中 实现持久话操作
数据库中 有一个buffer 缓存 每次读取完 先存在缓存中 写入数据也会写入到磁盘中 定期将buffer中的数据
写入到磁盘中
优点:读写效率提高了
缺点:增加了数据丢失的风险 没有同步到磁盘上 buffer中的内容就没了 mysql 宕机了
目前操作就是:先要记录到redo log 中 ,再将内容更新到 buffer 缓存中
mysql 默认的大小的数据页是16k
redo log 就是将有效的操作写入 log中
隔离性
写写操作 锁
写读操作 mvcc (https://blog.csdn.net/qq_44417051/article/details/119878602)
脏读 不可重复读 幻读
一致性
数据的读取 开启一致 结束一致 读取的数据一致
提交之后读取的数据就将会是一致的