数据库事务的四大特性(ACID):
原子性、一致性、隔离性、持久性。
原子性(Atomicity):事务执行的操作要么全部成功,要么全部回滚。事务如果成功则必须所有操作都应用到数据库,如果失败则不能对数据库造成任何影响。
一致性(Consistency):事务必须使数据库从一个一致性状态转换到另外一个一致性状态。
隔离性(Isolation):当多个用户并发访问数据库时,比如操作一张表时,数据库为每一个用户所开启的事务不能被其他事务所干扰,多个并发事务之间要相互隔离。
持久性(Durability):一个事务一旦提交,对系统的作用就是永久的,即便数据库发生了故障也不会消失
事务的隔离级别:
1、读取未提交内容(read uncommitted)
所有事务都可以看到其他未提交事务的执行结果。这种级别并不常用,因为安全性太低,而且性能也并没有提高多少。
1、读取提交内容(read committed)
大多数数据库的默认隔离级别(除了mysql),事务只能读取已经提交的内容。该级别可避免脏读的发生。会有不可重复读的发生:同一事务前后两次查询同一条数据,查询结果不一样。
3、可重复读(Repeatable Read)
mysql的默认隔离级别,事务执行期间会锁定该事务以任何方式引用的所有行。避免了不可重复读的发生,但是会有幻读的发生:一个事务操作所有数据并修改,在修改之前,另外一个事务插入一条数据并提交,此时第一个事务进行修改操作,修改结束再查询会发现多修改了一条数据。