SQL事务以及 白话解释事务隔离级别
复习直接看总结
前言
事务-----Transcation 我们让数据库做的事情
SQL语句是我们给数据库发送了指令,让数据库帮我们做事
1,事务可以理解为让数据库做的事情
2,有的时候事情之内不止一条sql 存在多个组成单元
比如在转账的时候 A要少一百 B要多一百
3,转账这件事,所有的操作都是得统一的
要么全成功 要么全失败
4,事务本质
就是多线程并发操作同一张表格可能带来的安全问题
-----------------------------------------------------------------------------------------
概念:事务的四大特性(ACID)
A:Atomicity------>原子性
一个事务之中的所有操作是一个整体,不可再分
事务里的所有操作要么成功,要么失败
C:Consistency------>一致性
一个用户操作了数据,提交了之后
另一个用户看到的数据与之前用户看到的效果是一致的
**I:Isolation------->隔离性------>事务隔离级别(四个)
多个用户并发的访问数据库时
一个用户操作数据库,另一个用户不能有所干扰
多个用户之间的数据事务操作要互相隔离
D:Durability----->持久性
指的是一个用户操作数据的事务一旦被提交(意思是缓存写入文件)
他对数据库底层真实的改变是永久的(不可返回的)
-------------------------------------------------------------------------------
事务的过程:
mysql数据库事务默认的效果可以更改
autocommit 变量 = on;
show variables like '%commit% ';查询commit的状态
show variables like 'autocommit';查询commit的状态
0.1 set autocommit = off; 设置自动提交 关闭
1,开启一个事务
每次执行一个SQL语句之前 MySQL会默认的开启(可以变成手动)
begin; 或者 1.1 start transaction;(手动开启事务)
2,执行操作
可能不知一个语句
2.1 做一些新增等。。
3,事务的处理
提交/回滚/保存还原点
3.1 rollback;(0.1-3.1执行完毕后,由于你关闭的自动提交事务并且还手动开启了事务,
但是在最后你没有手动的提交事务,所以回滚之后2.1的新增等的操作会被取消)
MySQL数据库会默认执行提交的事务;
手动提交commit;
--------------------------------------隔离性--------------------------------------------
事物的隔离性 会产生多线程并发操作同一个数据库表格的问题
会带来数据的安全隐患
可能出现的问题:
1,脏读(4)
一个人读到了另一个人还没有提交的数据
AB同时操作一张表格
A修改了数据,没有提交,B读取到了
A又不提交,回滚了,B刚刚读到的那些数据就是无用的-----脏数据
2,不可重复读------注重修改/删除
AB同时操作一张表格
A先读取了一些数据,读完之后B此时吧数据做了修改/删除
A再次按照之前的条件重新读取一遍,和第一次读取的内容不一样
3,幻读(虚读)注重新增
AB同时操作一张表格
A先读取了一些数据,读完之后B此时吧数据做了新增
A再次按照之前的条件重新读取一遍,和第一次读取的数量不一样
-------------------------------------------- 事务的隔离级别-------------------------------------------------
Serializable 最高 避免所有的出现的问题 性能慢
Repeatable Read 可以重复读(避免脏读,不可重复读)
出现以下情况:
A开启了一个事务,此时,B开始了一个事务并查询数据,然后
A更改一个数据,B再次查询数据,B会发现数据不一样;
可以开启Repeatable Read避免此处情况
注意:
开启了事务之后,只会避免B再开启一个事务未结束的时候:读取的数据不会改变,但是实际的数据可能已经被A更改了;
关闭B的事务再次读取才会读取到A更改的东西
Read Committed 读已提交(避免脏读)
出现以下情况:
A开启事务 未提交事务,B 读取到了还未提交的数据;
可以开启Read Committed 避免此处情况
Read UnCommitted 读取未提交()
这个事务是最基础的,所以只有对应的特点:
A开启事务 未提交,被B 读取到了未被提交的数据;
----------------------------------------------默认隔离级别-------------------------------------------------------------
MySQL 默认隔离级别是Repeatable Read
Oracle 默认的是Read Committed
-------------------------------------修改数据库的隔离级别------------------------------------------------
set session transaction isolation level xxxxx;
查询数据库的隔离级别;
select @@ tx_isolation;
=============================总结================================
1,事务是数据库进行的操作,事务先
开启-------修改----(可以回滚,回滚到开启事务的时候)---------提交
begin------操作-----rollback---------------------------------------------commit
2,在事务开启的时候,出现问题 脏读-------重复读------幻读,
3,出现问题怎么办 有个事务隔离级别 1 2 3 4 四个级别
四个级别可以解决上面出现的问题
- c#事务与SQL事务的解释与举例
- SQL Server 中的事务与事务隔离级别以及如何理解脏读, 未提交读,不可重复读和幻读产生的过程和原因
- SQL Server 中的事务与事务隔离级别以及如何理解脏读, 未提交读,不可重复读和幻读产生的过程和原因...
- mysql 查询正在执行的事务以及等待锁 常用的sql语句
- jdbc管理事务以及事务隔离级别的概念
- c#事务 与SQL事务的解释与举例
- MyBatis代码实例系列-02:MyBatis用log4j打印SQL以及MyBatis的事务控制
- SQL Server 中的事务与事务隔离级别以及如何理解脏读, 未提交读,不可重复读和幻读产生的过程和原因
- SQL Server 中的事务与事务隔离级别以及如何理解脏读, 未提交读,不可重复读和幻读产生的过程和原因
- SQL事务以及带来的问题 笔记
- SQL Server 中的事务与事务隔离级别以及如何理解脏读, 未提交读,不可重复读和幻读产生的过程和原因
- django 事务小结(ORM 事务以及raw sql,customize sql 事务处理)
- mybatis 中的连接池以及事务控制以及动态Sql语句
- 使用Hibernate的session执行任意SQL语句以及整个事务
- sparkSQL 写数据到MySQL的几种模式解释以及overwrite模式在不删除表结构的情况下的实现
- 一步步走进Sql中的事务及事务隔离级别
- spring 五个事务隔离级别和七个事务传播行为以及配置
- SQL自动事务、隐藏事务、显式事务,以及.net中的关于事务
- Oracle的SQL中出现未明确的列以及执行事务出错
- sql事务的隔离级别以及一些MYSQL的命令