一、MySQL事务
事务是指一系列原子性SQL查询语句,如果数据库引擎能够成功的对数据库应用所有的查询SQL,它就会执行所有查询。如果其中一个SQL执行不了,那么所有的查询SQL都不会执行。即:要么同时成功,要么同时失败。
二、事务的四种特性
1.原子性
顾名思义,一个事务必须被看做是不可拆分,事务里的操作要么同时成功,要么同时失败。
2.一致性
数据库总是从一种一致性状态转移为另一种一致性状态。
3.隔离性
在事务未被提交之前,所有的操作对于其它事务来说都是不可见的。
4.持久性
一旦一个事务被提交,那么这个事务所做的数据改变是永久的。
三、四种隔离级别
1. READ UNCOMMITTED(未提交读)
一个事务未被提交,其它事务也可以读取到改事务所做的操作。
该隔离级别会产生脏读。即其它事务读取到某个事务未被提交的数据,该数据被称为脏数据。
2. READ COMMITTED(提交读)
只有一个事务提交了,其它事务才可以读取到该事务所做的操作。是大多数数据库默认的隔离级别,MySQL不是。
该隔离级别可以解决脏读的问题,但是存在不可重复读的问题。即在同一个事务中,两次读取同一行数据,可能读取到的数据的结果不一致。
3. REPEATABLE READ(可重复读)
同一个事务的多个实例在并发读取数据时,会看到同样内容的数据行。MySQL默认的隔离级别。
该隔离级别解决的不可重复读的问题,但是存在幻读的问题。即在同一个事务中,多次读取同一个范围的数据,读取到的数据条数不一致。
4. SERIALIZABLE(可串行化)
它通过强制事务排序,使它们不可能相互冲突,从而解决幻读的问题。