事务是数据库管理系统执行过程中的一个逻辑单元,由有限的操作序列构成。
事务是提交和回滚的原子单元
ACID
一组数据库设计原则。
事务有4个特性,即ACID。
个人理解是事务的设计模型。
针对,数据被破坏,软件崩溃,硬件故障,导致结果被篡改,发明的一致性检查和崩溃恢复机制。
Atomic 原子性
一个事务中的多个操作,要么全部成功,要么全部失败
Consistency 一致性
事务开始到结束:数据从一个确定状态到另外一个确定的状态。事务结束时不出现中间状态。
Isolution 隔离性
并发的多个事务,每个事务有各自的完整数据空间。各有各的跑道
Durability 持久性
事务结束后,结果永久保存。即使断电,可恢复到事务结束后的结果
隔离级别
RU
read uncommit 读未提交
即:可以读取到未提交的事务的数据
会读到脏数据,即有「脏读」现象。
RC
read commit 读提交
即:只能读取到提交的事务后的数据
同一事务中同一个读取操作,会读到不同的数据,即会发生「不可重复读」现象
事务 t1 两次同样的“读”期间,即使 t2 写入 或者 更新 ,读取的内容都一样复制
RR
read repeat 可重复读
即:一个事务运行中,可以重复读取到一致的数据。
但可能出现「幻读」现象。当检查不存在记录,再插入时发现已经存在了,出现了幻像。
事务 t1 两次同样的“读”期间,即使 t2 写入 或者 更新 ,读取的内容都一样复制
串行
一个事务的每一步操作都会上锁,
一个事务执行完,另一个事务才执行
更新丢失 | 脏读 | 不可重复读 | 幻读 | |
---|---|---|---|---|
RU | × | √ | √ | √ |
RC | × | × | √ | √ |
RR | × | × | × | √ |
串行 | × | × | × | × |
性能
数据正确性
参考文章
更新丢失 参考文章:
https://www.dazhuanlan.com/2020/03/11/5e6898a459302/?__cf_chl_jschl_tk__=5596251523c34c20a0b1b77bb577593f1d6fff31-1590056628-0-AezsC1Le4FHr-EGijYa3JSiAfsmHXk6vItji7_5CyU0swtWslYH2L4S_n0MPX-UXUf9X7cNya8ExYbV4rw1420i2ZkDi9I-g89rw_4BPaS4hocDDesBDfLEBooK1W0NJuCfboNynefAXOWOTy6LZzD7ENZ-6hXR7wnnB7aOC4MpTdzlj-YvdVpT7XXXf9DAIuk5i7XIcgj5SuMBXIdiwsM2m9ep62QS-KHlfMoBfekMduem-6Rl1shaUsgz3u1N_ERwWvhuTDITDGLH7WVa0_T71tAvOa09Kpp2Nb2SsP-3Z9v_WZt9-43FBUTd0kubHAw
“重复读” 参考文章:https://juejin.im/post/5c9b1b7df265da60e21c0b57
“幻读” 请参考文章:https://segmentfault.com/a/1190000016566788?utm_source=tag-newest