博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数据库事务整理
阅读量:6868 次
发布时间:2019-06-26

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

  1.首先是事务的概念:是指作为单个逻辑工作单元执行的一系列操作,要么完全地执行,要么完全地不执行。举个例子:比如银行转账问题,A给B转账100块钱,应该是要分为两步操作,第一显示A的余额-100,再就是B的余额+100,这两个操作要么都成功,要不都不能成功,这两个操作是一个不可拆分的,也就是下面说的原子性。

  2.再就是事务的四大特性:原子性,一致性,隔离性,持久性。

  3.如果在没有多线程控制机制的情况下,多个事务并发执行,会发生以下几个问题:

    脏读:A事务读取数据库的某条记录,但是这条记录是B事务更新未提交的,所以,A事务读取的数据很可能因为B事务回滚而导致数据不正确。

    不可重复读:A事务连续读取数据库的某条已被提交的记录,但是B事务在A事务读取的间隙又对该记录更新并提交了,A事务读取的多次数据就会不正确。

    幻读:

  4.对于处理以上四种情况,有四个级别的处理方案:Read Uncommitted,Read Committed,Repeatable Read,serializable(读未提交、读已提交、可重复读、串行化)

    Read UnCommitted:事务的各种问题均无法避免,因为数据库允许某事物读取未提交的数据。

    Read Committed: 可以防止脏读,因为数据库只允许事务读取的时候读取已提交的数据,因此数据库不得不采用锁,此级别锁行。

    Repeatable Read:可以防止脏读和不可重复读问题,因为此级别下某事物读取数据将会禁止写数据的其他事务(但允许读事务),写事务则禁止任何其他事。

    Serializable: 最狠的一种,要求每个事务已串行化的方式进行执行,A事务不结束B事务不能开始,知道A事务完成才行。

    注意:四大隔离级别从上到下越来越安全,安全的代价就是性能,为了防止多线程事故,数据库只能加锁,这就限制了性能,而且还可能出现死锁,所以

    选用隔离级别的候要小心选用。

  5.常见数据库的隔离级别

    mysql具有四大隔离级别,默认为Read Committed,设置隔离级别语句为:

    SET [SESSION | GLOBAL] TRANSACTION ISOLATION LEVEL {READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SERIALIZABLE}

    Oracle中只有两隔离级别:Read Committed和Serializable,默认为Read Committed。

转载于:https://www.cnblogs.com/WreckBear/p/5793806.html

你可能感兴趣的文章
实时群聊小程序开发记录
查看>>
Python 数据库备份脚本(邮件通知)
查看>>
学习SDL的一些资料(整理)
查看>>
[动态库]深入分析Windows和Linux动态库应用异同
查看>>
Linux下查看CPU信息、机器型号等硬件信息命令
查看>>
Lync Server 2013 部署 _ 部署简介及系统要求
查看>>
前端小随笔
查看>>
view属性大全
查看>>
Java文件编码示例
查看>>
CactiFans V1.0中文版发布
查看>>
HTML如何显示小于号“<”等特殊符号?
查看>>
别伤了虚拟桌面管理员的"心"
查看>>
Windows系统使用IntelliJ IDEA 搭建Hadoop的开发调试环境(一)
查看>>
yum安装lamp
查看>>
Web.Config文件中数据库连接配置
查看>>
[Unity 3D] Unity 3D 性能优化 (一)
查看>>
spring Quartz定时任务调度 时间设置
查看>>
SymmetricDS: 数据库数据同步Database synchronization
查看>>
Disabling OOM killer on Ubuntu 14.04
查看>>
VBS备份脚本
查看>>