博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
2019.4.1 事务和隔离级别
阅读量:5013 次
发布时间:2019-06-12

本文共 1174 字,大约阅读时间需要 3 分钟。

数据库事务

相关操作

  • 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

你可能感兴趣的文章
计算几何算法概览 (转)
查看>>
Notepad++的ftp远程编辑功能
查看>>
数据库多对多关联表(Python&MySQL)
查看>>
[实变函数]1.2 集合的运算
查看>>
第06天
查看>>
设计模式的征途—5.原型(Prototype)模式
查看>>
iOS10 app连接不上网络的问题
查看>>
结对开发之电梯调度最终稿(徐梦迪&刘博)
查看>>
simple java mail
查看>>
信息建模
查看>>
Mybatis 数据库物理分页插件 PageHelper
查看>>
虚函数、纯虚函数详解
查看>>
z-stack中数据的发送,广播、组播、点对点
查看>>
Practial Vim 学习笔记一
查看>>
.NET中使用js实现百度搜索下拉提示效果[不是局部刷新,呜呜。。]
查看>>
ITCAST视频-Spring学习笔记(使用Spring的注解方式实现AOP入门)
查看>>
关于二维码“QR”的6大注意事项
查看>>
MySQL - 常用命令及常用查询SQL
查看>>
C# .NET MVC 接收 JSON ,POST,WCF 无缝隙切换
查看>>
android获取USB设备的名称
查看>>