事务:
就是将一组SQL语句放在同一批次去执行,如果一个SQL语句出,则该同批次所有SQL语句都将被取消。
特点:一个事务中如果有一个数据库操作失败,则整个事务的所有数据库操作都会失败,数据库就会回滚到该事务开启之前的状态。
事务的ACID原则:
a.原子性:不可再分
b.一致性:事务开始之前和事务结束以后,数据库的完整约束没有被破坏
c.隔离性:事务执行互不干扰
d.持久性:事务完成以后,该事务对数据的更改持久保持在数据库中,并不会被回滚
MyAQL实现事务的步骤:
1.关闭MySQL自动提交
set autocommit=0;
2.开启一个事务,标记事务的起始点
start transaction;
3.向数据库提交事务
commit;
4.将事务回滚,所有的数据库操作被取消(提交和回滚互斥)
rollback;
5.开启MySQL自动提交
set autocommit=1;
MySQL的四种隔离级别:
a.Read Uncommitted(读取未提交内容)
易出现脏数据,读取未提交的数据,也被称之为脏读
b.Read Committed(读取提交内容/不可重复读)
这是大多数数据库系统的默认隔离级别(但不是MySQL默认的)。它满足了隔离的简单定义:一个事务只能看见已经提交事务所做的改变。
c.Repeatable Read(可重复读)
这是MySQL的默认事务隔离级别,它确保同一事务的多个实例在并发读取数据时,会看到同样的数据行。幻读指当用户读取某一范围的数据行时,另一个事务又在该范围内插入了新行,当用户再读取该范围的数据行时,会发现有新的“幻影” 行。
d.Serializable(可串行化)
这是最高的隔离级别,它通过强制事务排序,使之不可能相互冲突,从而解决幻读问题。简言之,它是在每个读的数据行上加上共享锁。在这个级别,可能导致大量的超时现象和锁竞争。