1.事务定义
数据库的事务是指一组sql语句组成的数据库逻辑处理单元,在这组sql操作中,要么全部执行成功,要么全部执行失败。
通常一个事务对应一个完整的业务。银行转账业务就是一个事务。
2.事务的四大特性
原子性:是指事务的原子性操作,对数据的操作要么全部成功,要么全部失败。
一致性:事务执行前后,数据的完整性要保持一致。
假设A有500,B有500,总计1000元,这时,A向B转账200,此时A有300,B有700,总计还是1000,前后保持一致。
持久性:事务一旦提交,不可逆,事务状态会被持久化到数据库中。
隔离性:多用户并发访问数据库时,数据库为每一个用户开启的事务,都不会被其他事务的操作所干扰,多个并发事务之间要相互隔离。
3.并发可能导致的问题
脏读:一个事务读取了另一个未提交事务的数据。
不可重复读:一个事务内读取到另一个已提交事务修改后的数据,导致前后数据读取不一致。
幻读:一个事务内读取到另一个已提交事务新插入的数据,导致前后数据读取不一致。
4.隔离的四大隔离级别
串行化:当数据库系统使用串行化隔离级别时,一个事务在执行过程中完全看不到其他事务对数据库所做的更新。当两个事务同时操作数据库中相同数据时,如果第一个事务已经在访问该数据,第二个事务只能停下来等待,必须等到第一个事务结束后才能恢复运行。因此这两个事务实际上是串行化方式运行。
可重复读:当数据库系统使用可重复读隔离级别时,一个事务在执行过程中可以看到其他事务已经提交的新插入的记录,但是不能看到其他事务对已有记录的更新。
读已提交的数据:当数据库系统使用读已提交的数据隔离级别时,一个事务在执行过程中可以看到其他事务已经提交的新插入的记录,而且还能看到其他事务已经提交的对已有记录的更新。
读未提交数据:当数据库系统使用读未提交数据隔离级别时,一个事务在执行过程中可以看到其他事务没有提交的新插入的记录,而且还能看到其他事务没有提交的对已有记录的更新。