前端网站做中 英文,自适应手机网站开发,个人简历ppt模板免费下载,潍坊网站模板建站事务概述
事务是一组操作的集合#xff0c;他是一个不可分割的工作单位#xff0c;事务会把所有的操作作为一个整体一起向西永提交或撤销操作请求。这组操作#xff0c;要么全部执行成功#xff0c;要么全部执行失败。
事务操作
查看/设置事务提交方式
-- 查看/设置事务…事务概述
事务是一组操作的集合他是一个不可分割的工作单位事务会把所有的操作作为一个整体一起向西永提交或撤销操作请求。这组操作要么全部执行成功要么全部执行失败。
事务操作
查看/设置事务提交方式
-- 查看/设置事务提交方式
SELECT autocommit;-- 查看事务的提交方式
SET autocommit0; -- 0为手动提交事务1为自动提交提交事务
-- 提交事务
COMMIT;回滚事务
-- 如果事务出现异常我们就要进行回滚事务
ROLLBACK;事务四大特性ACID
原子性Atomiicity事务是不可分割的最小操作单元要么全部成功要么全部失败。
一致性Consistency事务完成时必须使所有的数据都保持一致状态。
隔离性Isolation数据库系统提供的隔离机制保证事务在不收外部并发操作影响的独立环境下运行。
持久性Durability事务一旦提交或者回滚它对数据库中的数据的改变就是永久的。
并发事务问题 脏读
一个事务读到另一事务还没有提交的数据。
事务A执行第一个操作但是A事务执行操作完成的后还没有提交此时B事务读取到了A事务还没有提交的操作。 不可重复读
一个事务先后读取同一条记录但是两次读取的数据不同称之为不可重复读。
事务A执行第一个select操作事务B会执行update事务并提交此时事务A执行第二次select操作此时事务A执行的两次select操作时不一致的。 幻读
一个事务按照条件查询数据时没有对应的数据行但是在插入数据时又发现这行数据已经存在。
事务A执行select操作之后事务B执行insert操作后提交到数据库此前事务A进行select没有查询到该数据之后要进行插入插入时发现该数据已存在等问题B事务此前进行的insert操作。 事务的隔离级别 查看/设置事务的隔离级别
-- 查看事务的隔离级别
SELECT TRANSACTION_ISOLATION;
-- 设置事务的隔离级别为READ-UNCOMMITTED
SET [SESSION|GLOBAL] TRANSACTION ISOLATION LEVEL {READ UNCOMMITTED|READ COMMITTED|REPEATABLE READ|SERIALIZABLE} ;READ-UNCOMMITTED(读取未提交) 最低的隔离级别允许读取尚未提交的数据变更可能会导致脏读、幻读或不可重复读。
READ-COMMITTED(读取已提交) 允许读取并发事务已经提交的数据可以阻止脏读但是幻读或不可重复读仍有可能发生。
REPEATABLE-READ(可重复读) 对同一字段的多次读取结果都是一致的除非数据是被本身事务自己所修改可以阻止脏读和不可重复读但幻读仍有可能发生。
SERIALIZABLE(可串行化) 最高的隔离级别完全服从ACID的隔离级别。所有的事务依次逐个执行这样事务之间就完全不可能产生干扰也就是说该级别可以防止脏读、不可重复读以及幻读。 这里需要注意的是
Mysql 默认采用的 REPEATABLE_READ隔离级别Oracle 默认采用的 READ_COMMITTED隔离级别
事务隔离机制的实现基于锁机制和并发调度。其中并发调度使用的是MVVC多版本并发控制通过保存修改的旧版本信息来支持并发一致性读和回滚等特性。
因为隔离级别越低事务请求的锁越少所以大部分数据库系统的隔离级别都是READ-COMMITTED(读取提交内容)。但是InnoDB 存储引擎默认使用 **REPEATABLE-READ可重读**并不会有任何性能损失。
日常学习笔记不喜勿喷欢迎纠错与探讨