一、MySQL事务是什么?
MySQL事务是一组在数据库中执行的操作,这些操作要么全部成功执行,要么全部不执行,以确保数据库的完整性和一致性。
事务的 ACID
事务具有四个特征:原子性( Atomicity )、一致性( Consistency )、隔离性( Isolation )和持续性( Durability )。这四个特性简称为 ACID 特性。
原子性:事务是数据库的逻辑工作单位,事务中包含的各操作要么都做,要么都不做。
一致性:事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。因此当数据库只包含成功事务提交的结果时,就说数据库处于一致性状态。如果数据库系统运行中发生故障,有些事务尚未完成就被迫中断,这些未完成事务对数据库所做的修改有一部分已写入物理数据库,这时数据库就处于一种不正确的状态,或者说是不一致的状态。
隔离性:一个事务的执行不能其它事务干扰。即一个事务内部的操作及使用的数据对其它并发事务是隔离的,并发执行的各个事务之间不能互相干扰。
持续性:也称永久性,指一个事务一旦提交,它对数据库中的数据的改变就应该是永久性的。接下来的其它操作或故障不应该对其执行结果有任何影响。
二、MySQL的四种隔离级别
MySQL中定义了四种事务隔离级别,不同的隔离级别会导致不同的并发执行结果。在实际应用中,需要根据业务的特点选择合适的隔离级别。MySQL的四种事务隔离级别依次为:读未提交(Read Uncommitted)、读已提交(Read Committed)、可重复读(Repeatable Read)和串行化(Serializable)。
1. 读未提交(Read Uncommitted)
读未提交是最低的隔离级别,允许一个事务读取并使用另一个事务尚未提交的修改。因此,在该级别下可能会发生脏读问题。
脏读是指在并发执行的两个事务中,一个事务读到了另一个事务尚未提交的数据。在读未提交的情况下,如果一个事务对数据进行了修改,但是还没有提交,则另一个事务读取该数据时可能会得到错误的结果。这样就会造成脏读问题。
事务A
begin;
update table set name='zbc' where id