本文主要介绍Mysql事务特点和层次原理分析,通过示例代码详细介绍,对大家的学习或工作有一定的参考学习价值,有需要的朋友可以参考
一、什么是事务?
数据库事务是数据库管理系统执行过程中的一个逻辑单元,由有限的数据库操作序列组成。
二、事务的四大属性
它们是原子性、一致性、隔离性和持久性。
1、原子性(Atomicity)
原子性意味着事务中包含的所有操作要么成功,要么失败并回滚。因此,如果事务的操作成功,就必须完全应用到数据库中,如果操作失败,就不能对数据库产生任何影响。
2、一致性(Consistency)
一致性意味着事务必须将数据库从一种一致性状态转换到另一种一致性状态,这意味着事务在执行前后必须处于一致状态。比如假设用户A和用户B的钱的总和是1000,那么无论A和B之间转账多少钱,交易结束后两个用户的钱的总和应该是1000,这就是交易的一致性。
3、隔离性(Isolation)
隔离是指当多个用户并发访问数据库时,如同时操作同一个表,数据库为每个用户打开的事务不能受到其他事务操作的干扰,多个并发事务应该相互隔离。关于事务的隔离数据库提供了多个隔离级别,这将在后面介绍。
4、持久性(Durability)
持久性是指一旦提交事务,对数据库中数据的更改是永久性的,即使数据库系统遇到故障,提交事务的操作也不会丢失。例如,当我们使用JDBC操作数据库时,在提交事务方法之后,我们提示用户事务操作已经完成。当我们的程序执行到我们看到提示时,我们可以假设事务已经被正确提交。即使此时数据库有问题,我们也必须完全执行我们的事务。否则会造成一个很大的错误,虽然我们看到事务完成了,但是数据库却因为失败而无法执行事务。这是不允许的。
三、mysql隔离级别
READ UNCOMMITTED(未提交读)
在未提交读取的事务级别,一个事务可以读取另一个事务的未提交数据。
例如,事务A更新了一个字段,但在事务b中没有提交,读取id为1000的记录的名称字段时,名称的值为‘AAA’,但事务A没有提交,因此名称=‘AAA’可能会回滚。然后,事务A读取未提交的事务数据,这称为脏读
READ COMMITTED(提交读)
在提交读取的事务级,一个事务可以由唐山网站排名,在另一个事务提交后读取数据。
例如,事务A读取id为1000的记录的名称字段为aaa,然后事务B此时更新该记录的名称值并提交。此时,如果事务A再次读取名称,名称值将为bbb,因此在一个事务中,多次读取一个字段可能会导致不同的值。