事务有四大特征,简称ACID特性。
1.原子性(Atomicity)
2.一致性(Consistency)
3.隔离性(Isolation)
4.持久性(Durability)
Mysql数据库事务设置有4个隔离级别,根据级别的严格程度,由低到高依次为:
读未提交(Read uncommitted)
读提交(Read committed)
可重复读取(Repeatable read)
串行化(Serializable)
1.读未提交(Read uncommitted)
该级别属于未授权读取,当第一个事务开始对某行数据的进行修改,第二个事务可以读取此行数据,但是不允许进行修改。可以使用“排他锁”实现此隔离级别,后续内容会详细介绍“排它锁”。这个级别虽然禁止了多个事务并发修改某行数据,解决了“更新丢失”,但是依然会出现第二个事务读取到了第一个事务未提交的数据,导致“脏读”。
2.读提交(Read committed)
该级别属于授权读取,当第一个事务读取某行数据时,也允许第二个事务继续读取该行数据,但是如果对该行数据有未提交的写操作,则第一个事务将禁止其他事务访问该行数据。
该隔离级别解决了“脏读”的问题,但是却没有解决“不可重复读”的问题。
3.可重复读(Repeatable read)
可重复读是表示在同一个事务之内,多次读取同一行数据,其读取结果是相同的。该隔离级别被称为“可重复读”。这样避免了不可重复读取和脏读,但是仍然不能避免幻读。
4.串行化(Serializable)
该级别是最严格的事务隔离。事务的串行化,表示所有事务不能并发执行,必须依次执行。在该级别下,所有事务都顺序执行,不仅可以避免脏读、不可重复读,还避免了幻读。串行
化虽然解决了所有问题,但是代价也花费最高,它会导致数据库的性能很低,在实际应用中几乎很少使用。