1. ACID (Atomic/Consistency/Isolation/Durability)
Atomic: 事务是原子性的,一个事务不能影响另一个事务,事务不可再分。
Consistency: 事物的处理应保持一致性,如对数据库约束的违反,对所有事务是一致的,要么都提交,要么都回滚。
Isolation: 各个事务是相互隔离的,事务之间相互独立
Durability: 事务是可持久的,事务的持久后的消息应确切的告知用户,持久的成功与失败,不依赖计算机的其他持久条件
2. 数据库事物处理中的问题
2.1 Lost update, 两个事物同时操作一行,第二个事物失败,第一个事物的更新也丢失。 (RMDB不会发生)
2.2 Dirty Read:一个事物读到另一个事物未提交的数据 (Default RMDB ISOLATION read commit 不会发生)
2.3 Non Repeatable Read:一个事物两次读取同一行数据,却又不同的结果 (第二次读到另一个事物提交的修改update, Oracle/SqlServer/Mysql default read commit 会发生)
2.4 Phantom Read:同一个事物,第二次读到第一次未出现的数据 (另一事物插入并提交insert, read commit会发生)
2.5 Second Lost updates : (两个事物修改同一行,第一次的修改失效,不是一个问题,但是一种case)
3. 几种数据库隔离级别 :Oracle/SqlServer (都是读提交 read committed) Mysql (Repeatable_read)
4. 关于ResultRet 在取得后的结果集问题 (ReadCommitted, 和 不同数据库的区别,Oracle 使用快照技术,保证的数据在某一时间点上的不可变性)
我们看看Oracle 的ResultSet在forward_only 条件下,它是可以保证结果的一只的
4.1 stmt.executeQuery()
4.2 while(rs.next())
4.3 Insert data into table,
4.4. rs not show the committed data above.
4.5, stmt.executeQuery() again
4.6 while(rs.next)
4.7 rs show the committed data.
|
ISOLATION |
Dirty Read |
Non Repeatable Read |
Phantom Read |
|
SERIALIZABLE |
No |
No |
No |
|
Repeatable Read |
No |
No |
Yes |
|
Read Committed |
No |
Yes |
Yes |
|
Read Uncommitted |
Yes |
Yes |
Yes |
本文深入探讨了数据库事务的ACID特性及其在不同隔离级别下的行为,包括事务的原子性、一致性、隔离性和持久性。同时,阐述了常见问题如丢失更新、脏读、不可重复读和幻读,并对比了Oracle、SqlServer和Mysql的隔离级别实现。
843

被折叠的 条评论
为什么被折叠?



