事务的特性ACID

1.事务的特性 ACID

原子性(Atomicity)
原子性是指事务是一个不可分割的工作单位(最小的一个整体),事务中的操作要么都发生,要么都不发生。

一组操作时一个整体。不能分割。

一致性(Consistency)
事务前后数据的完整性必须保持一致。
一致性和原子性相关。只有都成功或者,都失败(原子性) ,就可以保证事务的一致性。

事务的前后的内容一直。
转账: a 1000 b 1000 a给b转100;
转账之前 a和b的总额 2000
转账之后 也要2000;

隔离性(Isolation)
事务的隔离性是指多个用户并发访问数据库时,一个用户的事务不能被其它用户的事务所干扰,多个并发事务之间数据要相互隔离。

多个事务是独立存在的。多个事物不能够相互干扰。

a –b—事务A

c-d—事务B

如果A失败了。不能够影响B

持久性(Durability)
持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来即使数据库发生故障也不应该对其有任何影响。
a-100
b+100
提交
此时a永远少100
b永远的多了100

a – 100 a 900
b+100 b 1100
commit;

a -100 a 800
b+100 b 1200
rollback : a 900 b 1100

rollback—异常。对上述没有任何影响了。

2.事务的隔离级别

如果不考虑事务的隔离性,将会产生以下问题:
由数据事务的并发造成的问题。

1、脏读,—最严重的事情。
2、不可重复读
3、幻读(虚读)
事务的特性ACID
事务的特性ACID
事务的特性ACID

3.数据库的事务隔离级别

数据库共定义了四种隔离级别:
Serializable:可避免脏读、不可重复读、虚读情况的发生。(串行化,一个事务一个事务运行)
Repeatable read:可避免脏读、不可重复读情况的发生。(可重复读)不可以避免虚读
Read committed:可避免脏读情况发生(读已提交,避免不了虚读以及不可重复读)
Read uncommitted:最低级别,以上情况均无法保证。(读未提交)

设置事务的隔离级别
set session transaction isolation level 设置事务隔离级别 两个人
select @@tx_isolation 查询当前事务隔离级别

4.隔离级别的性能问题

性能比较
Serializable 性能最差:事务一个一个执行的。排队。

Serializable < Repeatable read < Read committed < Read uncommitted

安全性比较
Serializable 安全性最好:所有问题避免掉。

Serializable > Repeatable read > Read committed > Read uncommitted

Read uncommitted 避免不了最重问题,脏读。
Serializable:性能太差。

mysql (默认)-- Repeatable read;
oracle(默认) – Read committed;

上一篇:Longest Valid Parentheses leetcode java


下一篇:Acid靶机渗透