事务
- 数据库管理系统执行过程中的一个逻辑单位,由一个有限的数据库操作序列构成
- 事务指的是数据库一种保护数据的方式
- 事务一般由增删改操作自动调用,事务根据数据库不同提交的时机也是不同的
- MySQL数据库默认执行增删改就会提交事务
- 我们可以设置为手动提交 set @@autocommit=0; -------------- 前面写begin或者start transaction
- 事务的特征
- ACID原则
- 原子性、一致性、隔离性、持久性
- 原子性
- 事务是操作数据的最小单元,不可以再分
- 一致性
- 事务提交之后,整个数据库所看到的数据都是最新的数据
- 所有人看到的数据都是一致的
- 隔离性
- 别人无法访问到我们未提交的数据,而且一旦这个数据被我修改,别人也无法进行操作
- 持久性
- 事务一旦被提交,数据库就进入一个全新的状态
- 数据也不能返回上一个状态
- ACID原则
- 事务如何开启和提交?
- 开启
- 当我们执行增删改操作的时候就会默认开启一个事务
- 这个事务和当前操作的窗口有关,别人是无法共享这个事务的
- 提交
- 手动
- 显式
- commit 提交
- rollback 回滚
- 隐式
- 执行DDL操作会默认提交当前事务
- 用户退出,事务统一进行回滚(mysql)
- 显式
- 自动
- mysql数据库执行DML操作之后会自动提交事务
- 好处
- 方便
- 坏处
- 不能将多个sql纳入到一个事务,不便于管理
- 当我们大批量插入数据的时候,数据库会频繁的开启关闭事务影响插入效率
- 手动
- 开启
事务的隔离级别
- 根据数据库的不同用途,我们可以对数据库的事务进行级别的设置
- 级别越高数据越安全,效率越低
- 读未提交
- 我们可以读取到别人未提交的数据
- 有可能产生脏读问题
- 读已提交
- 只能读取别人提交后的数据
- 不能达到可重复读,但是可以避免脏读
- 有可能产生虚读或者幻读的情况
- 可重复读
- 当数据被我查询后,别人就不能修改这个数据了
- 说明在我查询的时候已经有了事务操作到这个数据,查询都会开启事务
- 但是不能防止别人查询别的数据
- 序列化
- 当前数据库只能存在一个事务,我操作数据库的时候,别人是不能访问数据库的
- 这对于用户来讲数据相当安全,一般在倒库的时候才会开启这种级别
- 读未提交
- 脏读
- 读取别人未提交的数据,这个数据是不安全的
- 虚读
- 第一次读取的数据,第二次读取的时候可能被人修改了
- 幻读
- 第一次读取的数据,第二次多了一条或者少了一条