数据库事务是一组操作,这些操作将数据库从一种一致的状态转换为另一种一致的状态。事务是数据库管理中重要的概念,它可以确保在并发访问时数据的一致性和可靠性,同时也可以确保数据库的完整性和可恢复性。
一,定义
事务是指一组操作,这些操作被视为一个单元,要么全部执行成功,要么全部失败。一个事务通常包含四个基本操作:开始(begin)、提交(commit)、回滚(rollback)和保存点(savepoint)。开始操作表示事务的开始,而提交操作表示事务的成功完成。回滚操作则表示事务的撤销,而保存点则用于标记事务中的某个点,以便在需要时回滚到该点。
二,性质
事务具有四个基本的ACID属性,即原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability)。这些属性确保了事务的可靠性和可恢复性,从而保证了数据库的一致性和可靠性。
原子性:事务是一个原子性的操作,要么全部执行成功,要么全部失败。如果在执行过程中出现错误或异常,那么整个事务将被回滚,以保证数据的一致性。
一致性:事务执行后,数据库必须保持一致性状态。这意味着,如果事务在执行过程中修改了数据,那么最终结果必须符合数据库的完整性约束,否则整个事务将被回滚。
隔离性:事务的执行应该与其他事务的执行相互隔离。这意味着,每个事务应该看到一个独立的视图,而不是其他事务修改后的实际数据。这可以通过使用锁定和并发控制来实现。
持久性:事务执行成功后,其结果必须永久保存在数据库中。即使在数据库发生故障或崩溃的情况下,事务的结果也应该能够恢复。
三,四种隔离级别
1,READ UNCOMMITTED(读未提交数据):允许事务读取未被其他事务提交的变更数据,会出现脏读、不可重复读和幻读问题。
2,READ COMMITTED(读已提交数据):只允许事务读取已经被其他事务提交的变更数据,可避免脏读,仍会出现不可重复读和幻读问题。
3,REPEATABLE READ(可重复读):确保事务可以多次从一个字段中读取相同的值,在此事务持续期间,禁止其他事务对此字段的更新,可以避免脏读和不可重复读,仍会出现幻读问题。
4,SERIALIZABLE(序列化):确保事务可以从一个表中读取相同的行,在这个事务持续期间,禁止其他事务对该表执行插入、更新和删除操作,可避免所有并发问题,但性能非常低。
四,七种传播行为
1,PROPAGATION_REQUIRED:如果当前没有事务,就创建一个新事务,如果当前存在事务,就加入该事务,该设置是最常用的设置。
2,PROPAGATION_SUPPORTS:支持当前事务,如果当前存在事务,就加入该事务,如果当前不存在事务,就以非事务执行。
3,PROPAGATION_MANDATORY:支持当前事务,如果当前存在事务,就加入该事务,如果当前不存在事务,就抛出异常。
4,PROPAGATION_REQUIRES_NEW:创建新事务,无论当前存不存在事务,都创建新事务。
5,PROPAGATION_NOT_SUPPORTED:以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
6,PROPAGATION_NEVER:以非事务方式执行,如果当前存在事务,则抛出异常。
7,PROPAGATION_NESTED:如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则执行与PROPAGATION_REQUIRED类似的操作。