数据库事务和事件

事务介绍

事务主要用于处理操作量大,复杂度高的数据。比如说,在人员管理系统中,你删除一个人员,你即需要删除人员的基本资料,也要删除和该人员相关的信息,如信箱,文章等等,这样,这些数据库操作语句就构成一个事务!

事务特性

1、原子性:事务中的所有操作,要么全部完成,要么全部不完成。
2、一致性:事务提交前和提交后,数据库的完整性没有被破坏。
3、隔离性:事务与事务之间是相互隔离的。
4、持久性:事务一旦被提交了,那么对数据库中的数据,改变是永久性的。

事务现象

1、脏读:事务在处理数据的过程中,读取到另一个未提交事务的数据。
2、不可重复读:事务范围内的多次查询却返回了不同的结果。
3、幻读:前后多次读取,数据总量不一致,就像产生了幻觉一样。

隔离级别

1、serializable:事务的执行,以序列的形式执行,性能较差,安全性贼高。
2、repeatable:事务执行的过程中,多次读取到数据是一样的。(Mysql默认)
3、read committed:事务执行过程中,可以读取另一个事务修改,提交后的数据。(Oracle默认)
4、read uncommitted:事务执行过程中,可以读取到,另一个事务修改,未提交的数据。

传播行为

1、PROPAGATION_REQUIRED:如果当前没有事务,就创建一个新事务,如果当前存在事务,就加入该事务,该设置是最常用的。
2、PROPAGATION_SUPPORTS:支持当前事务,如果当前存在事务,就加入该事务,如果当前不存在事务,就以非事务执行。
3、PROPAGATION_MANDATORY:支持当前事务,如果当前存在事务,就加入该事务,如果当前不存在事务,就抛出异常。
4、PROPAGATION_REQUIRES_NEW:创建新事务,无论当前存不存在事务,都创建新事务。
5、PROPAGATION_NOT_SUPPORTED:以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
6、PROPAGATION_NEVER:以非事务方式执行,如果当前存在事务,则抛出异常。
7、PROPAGATION_NESTED:如果当前没有事务,就创建一个新事务,如果当前存在事务,则在嵌套事务内执行。

事件介绍

事件调度器可以在指定的时刻,执行特定的任务,从而实现系统的自动化操作,而这些特定的任务就是事件,这些特定的任务通常由一些确定的SQL语句组成。事件可以使一些对数据库,定时性的操作,不再依赖外部程序,而直接使用数据库本身提供的功能。例如:每隔一段时间清理一些数据,或者晚上执行比较耗费CPU的查询语句。

原文地址:https://www.cnblogs.com/feiqiangsheng/p/11520131.html