当前位置: 首页 > news >正文

2019.4.1 事务和隔离级别

数据库事务

相关操作

  • 1.事务开始:开始一个事务,作为回滚的标记
  • 2.回滚(rollback):回滚到上一个事务开始的地方或者回滚到某个存档点 期间所有的没有被commit的操作都会被撤回
  • 3.提交(commit):将事务中所有的操作提交到数据库中
  • 4.存档点:设置存档点方便回滚

事务的四个特性(ACID)

  • 1.原子性(Atomicity)
    • 事务包含的所有操作,要么全部成功,要么全部失败
  • 2.一致性(Consistency)(快照读)
    • 事务必须使数据库从一个一致性状态到另一个一致性状态
  • 3.隔离性(Isolation)
    • 如果有多个用户并发访问数据库,数据库的每一个用户开启的事务不能被其他事务的操作干扰
    • 多个并发事务之间应该保持相互隔离
  • 4.持久性(Durability)
    • 事务的操作一旦被提交,对于数据库的改变是永久的 即时数据库发生故障,也不能丢失已提交的数据

代码

关闭自动提交

set autocommit = false ;

开启事务

start transaction ;

begin ;

存档

savepoint save;

回滚

rollback to save;

提交

commit ;

三个隔离性问题

  • 1.脏读:一个事务读取了未提交事务执行过程中的数据
  • 2.不可重复读:对于数据库中的某个数据 一个事务执行过程中多次查询返回不同结果
  • 3.幻读(虚读):对于一个事务批量修改数据的时候,另外的事务插入一条新的数据,在第一个事务中执行了操作缺没有将所有情况的数据都进行修改

四个隔离级别

  • 1.RU(Read Uncommitted)
    读取未提交内容,所有事务都可以看到其他事务的未提交内容
  • 2.RC(Read Committed)
    读取提交内容,,可以避免脏读 但是无法避免可重复读和幻读
  • 3.RR(Repeatable Read)
    可重复读 MySQL默认的隔离级别 可以避免脏读和可重复读 但是不能避免幻读
    通过Innodb引擎多版本并发控制
  • 4.Serializable 串行化
    最高的隔离级别 强制所有的事务排序执行,性能上会出现问题 会出现大量的超时和锁竞争

隔离级别的实现

  • 1.读锁和写锁
    • 共享锁:数据库的读锁,一旦加上该锁,其他用户只能读不能写
    • 排它锁:写锁 一旦给表或者行加上写锁 其他用户不能读也不能写
  • 2.行锁和表锁

数据库设计三大范式

  • 第一范式---保证列不能拆分
    • 数据库表中的每一字段都是不能继续拆分的最小单元
  • 第二范式---一个表只描述一个事
    • 满足第一范式之后(1NF),表中的每一列都必须依赖主键
  • 第三范式---使用外键做表之间的关联
    • 满足2NF,表中所有的列只与主键直接相关而不是间接相关

转载于:https://www.cnblogs.com/lzb1234/p/10636919.html

相关文章:

  • [LOJ 6213]「美团 CodeM 决赛」radar
  • 一、ABP框架框架摘要
  • Java-Runoob-高级教程-实例-字符串:02. Java 实例 - 查找字符串最后一次出现的位置...
  • “尝试加载 Oracle 客户端库时引发 BadImageFormatException。如果在安装 32 位 Oracle 客户端组件的情况下以 64 位模式运行,将出现此问题。”...
  • Http input plugin
  • elasticsearch+logstash+kibana部署
  • 物联网的概念
  • 漂亮数组 Beautiful Array
  • es6常用功能与异步详解(JS高级面试题)
  • python----__str__与__repr__的区别
  • OpenCV入门学习资料汇总
  • 性能测试必知必会
  • Typora + Mathpix Snip,相见恨晚的神器
  • MongoDB 介绍
  • ActiveMQ( 一) 同步,异步,阻塞 JMS 消息模型
  • [译] 怎样写一个基础的编译器
  • Debian下无root权限使用Python访问Oracle
  • JS专题之继承
  • Quartz初级教程
  • spring boot下thymeleaf全局静态变量配置
  • vue-router的history模式发布配置
  • 从PHP迁移至Golang - 基础篇
  • 和 || 运算
  • 可能是历史上最全的CC0版权可以免费商用的图片网站
  • 理解 C# 泛型接口中的协变与逆变(抗变)
  • 猫头鹰的深夜翻译:JDK9 NotNullOrElse方法
  • 思考 CSS 架构
  • ​LeetCode解法汇总1276. 不浪费原料的汉堡制作方案
  • (11)MATLAB PCA+SVM 人脸识别
  • (3)(3.2) MAVLink2数据包签名(安全)
  • (33)STM32——485实验笔记
  • (C语言)逆序输出字符串
  • (Repost) Getting Genode with TrustZone on the i.MX
  • (附源码)流浪动物保护平台的设计与实现 毕业设计 161154
  • (六)什么是Vite——热更新时vite、webpack做了什么
  • (一)Dubbo快速入门、介绍、使用
  • (转)nsfocus-绿盟科技笔试题目
  • (最全解法)输入一个整数,输出该数二进制表示中1的个数。
  • ... 是什么 ?... 有什么用处?
  • .NET CF命令行调试器MDbg入门(三) 进程控制
  • .NET Core跨平台微服务学习资源
  • .net on S60 ---- Net60 1.1发布 支持VS2008以及新的特性
  • .NET 中 GetProcess 相关方法的性能
  • .NET/C# 检测电脑上安装的 .NET Framework 的版本
  • .net和php怎么连接,php和apache之间如何连接
  • .net知识和学习方法系列(二十一)CLR-枚举
  • [2019/05/17]解决springboot测试List接口时JSON传参异常
  • [22]. 括号生成
  • [ActionScript][AS3]小小笔记
  • [AHOI2009]中国象棋 DP,递推,组合数
  • [android] 手机卫士黑名单功能(ListView优化)
  • [Angular] 笔记 7:模块
  • [BZOJ1060][ZJOI2007]时态同步 树形dp
  • [C/C++] C/C++中数字与字符串之间的转换
  • [C语言][PTA基础C基础题目集] strtok 函数的理解与应用