`
y806839048
  • 浏览: 1106921 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

数据库四种隔离策略实现多线程控制

阅读更多

 

数据库四种隔离策略实现多线程控制;acid中的i

 

 

设计数据库的事物策略从事物的角度来实现多线程的处理,(不仅仅java,悲观锁等)

 

其实就是读和修改的顺序(还没完成就插入另一个),在多线程的情况下,出现数据问题

问题如下:

 

脏读(还没完成修改就读)

 

一个事物修改数据但是还没提交修改,另一个事物这个又用了这个数据

 

 

不可重复读(多次读中间又一次被修改了,导致和前面的结果不一样)

一个事物需要多次读取一个数据,在中途有另一个事物修改了此事物,导致数据不一样

 

 

幻读(读了之后有被另一个事物改了)

 

 

 

 

策略如下:

在一个事物中采取的策略,设置好后,每个事物都会用到这个策略

 

针对上述几种情况数据库提出了4种隔离策略(在一个事物中采取的策略)

       隔离级别               脏读(Dirty Read)          不可重复读(NonRepeatable Read)     幻读(Phantom Read) 

===========================================================================================

未提交读(Read uncommitted)        可能                            可能                       可能

已提交读(Read committed)          不可能                          可能                        可能

可重复读(Repeatable read)          不可能                          不可能                     可能

可串行化(Serializable )                不可能                          不可能                     不可能

 

 

 

 

未提交读(Read Uncommitted):允许脏读,也就是可能读取到其他会话中未提交事务修改的数据

·提交读(Read Committed):只能读取到已经提交的数据。Oracle等多数数据库默认都是该级别 (不重复读)

·可重复读(Repeated Read):可重复读。在同一个事务内的查询都是事务开始时刻一致的,InnoDB默认级别。在SQL标准中,该隔离级别消除了不可重复读,但是还存在幻象读

·串行读(Serializable):完全串行化的读,每次读都需要获得表级共享锁,读写相互都会阻塞

 

 ====

事物的几种隔离机制:

1,未提交读:在本事物中可以读取其他事物中未提交的数据

2,提交读;在本事物中只可读取其他事物提交的数据

3,可重复读:在本事物中可以重复读取一个字段获取同样的数据,在此期间其他事物不可修改

4,序列化:事物之间对数据库的操作串行处理,就是保护到行级

 

 

 

 

 

http://www.jb51.net/article/100183.htm

 

 

http://blog.chinaunix.net/uid-24111901-id-2627894.html

分享到:
评论

相关推荐

    多线程同时查询同一数据库对比

    在IT行业中,多线程编程是一项重要的技术,它允许程序同时执行多个任务,极大地提高了效率。...在易语言中学习并实践这一技术,将有助于深入理解多线程编程和数据库并发控制,为你的IT技能库增添重要的一环。

    java 多线程数据库操作

    总之,Java多线程技术结合分页读取策略能有效提升数据库操作的效率,但同时也需要关注并发控制、资源管理以及异常处理等多个方面的细节,确保程序的稳定性和效率。在实际开发中,应根据项目需求和资源限制,选择合适...

    易语言多线程同时查询同一数据库

    综上所述,易语言多线程同时查询同一数据库的技术实现涉及到多线程编程原理、数据库访问控制、事务管理、查询优化、错误处理和线程通信等多个知识点。通过熟练掌握这些技术,开发者可以构建出高效且稳定的数据库查询...

    Delphi多线程数据库应用程序编程技术

    在IT领域,多线程数据库应用程序编程是一项关键的技术,尤其在使用Delphi这种高效、强大的RAD(快速应用开发)工具时。Delphi以其高效的VCL框架和原生的编译器支持,使得开发者能够轻松地构建多线程的数据库应用,...

    socket 大数据并列接收存数据库小列子(带多线程模拟数据)

    此外,事务的正确性和一致性也很重要,尤其是在多线程环境下,需要确保数据的一致性模型,如ACID(原子性、一致性、隔离性、持久性)特性。 在实际编程过程中,这个小例子可能包含以下步骤: 1. 服务器端初始化...

    多线程同时查询同一数据库.zip易语言项目例子源码下载

    在易语言项目中实现多线程查询数据库,开发者需要熟悉易语言的线程创建和管理机制,以及如何使用数据库访问模块进行数据交互。 在实现多线程查询时,通常需要考虑以下几点: 1. **线程同步**:为了防止多个线程同时...

    多线程demo/java多线程练习

    - **事务处理**:在多线程中进行数据库操作时,事务的ACID特性(原子性、一致性、隔离性、持久性)显得尤为重要,项目可能涉及如何在并发环境下保证事务的正确性。 通过这个"多线程demo/java多线程练习"项目,你...

    springboot多数据源即分布式事务解决方案,添加对多线程的支持

    本教程将深入探讨如何在Spring Boot环境下实现多数据源操作及分布式事务管理,并加入对多线程的支持。 首先,我们来理解多数据源的概念。在大型系统中,往往需要连接多个数据库,如主库、从库、测试库等。Spring ...

    多线程ADO安全访问SQL

    总结,多线程ADO安全访问SQL涉及到数据库并发控制、事务管理、线程同步和资源管理等多个方面。开发者必须理解这些概念并正确实施,以确保应用程序的稳定性和数据的准确性。通过合理的设计和编程实践,可以在提高性能...

    多线程模型

    在IT领域,多线程模型是一种常见的编程技术,特别是在处理大量并发操作时,如数据库读取。本篇文章将深入探讨“多线程读取DB数据”这一主题,旨在揭示其背后的原理、优缺点以及实现方法。 多线程是操作系统提供的一...

    多线程案例,多线程教程

    3. 数据库操作:在并发读写数据库时,多线程可以提高吞吐量,但需注意事务的隔离性和一致性。 总之,多线程是现代软件开发中不可或缺的技术,它能提高程序的性能和用户体验。理解并掌握多线程的概念、使用方法以及...

    Java实现简单的数据库以及银行系统实现

    Java内置了对多线程的支持,开发者可以通过实现Runnable接口或继承Thread类来创建并发任务。 6. **异常处理**:为了处理可能出现的错误和异常情况,开发者会使用Java的try-catch-finally语句块来捕获并处理异常。这...

    C#、.Net平台大批量提交数据到数据库

    其次,多线程并发提交是优化数据库操作的另一种方法。在处理大量数据时,可以通过创建多个线程,每个线程负责处理一部分数据,然后并发提交。但要注意,并发提交可能引发锁竞争,导致性能下降,因此需要合理设置线程...

    模拟jdbc多线程竞争资源---【Eclipse项目】

    本项目“模拟jdbc多线程竞争资源---【Eclipse项目】”着重于探讨在多线程环境下,如何处理并发访问数据库时可能出现的资源竞争问题。下面将详细介绍这个项目中的关键知识点。 1. JDBC基础: JDBC是Java平台的标准...

    插入数据多线程例子

    本示例主要探讨如何在数据库操作中实现多线程插入数据,以提高效率和性能。多线程能让我们充分利用现代多核处理器的计算能力,使得任务能够并行执行,从而缩短整体的执行时间。 在“插入数据多线程例子”中,我们...

    基于图数据库的高效更新策略.pptx

    1. **利用多线程并行处理能力**:充分利用图数据库的多线程并行处理能力,同时处理多个更新请求。 2. **分片与锁机制**:通过分片和锁机制确保并发更新的原子性、一致性和隔离性。 3. **负载均衡**:采用负载均衡...

    基于JDBC的数据库连接池高效管理策略

    基于JDBC的数据库连接池高效管理策略通过连接复用、事务处理支持以及多线程安全性等关键技术,有效地解决了传统JDBC数据库访问模式中存在的问题。通过合理配置连接池参数,不仅能够显著提升数据库访问效率,还能简化...

    Java多线程与线程安全实践-基于Http协议的断点续传.rar

    在多线程环境中使用SQL,需要注意数据库事务的隔离级别和并发控制,防止脏读、不可重复读或幻读等问题。可以使用Java的JDBC API进行数据库连接和操作,同时使用预编译的`PreparedStatement`来防止SQL注入。 总的来...

    基于Spring+Ibatis的安全线程实现

    4. **线程池管理**:Spring提供ThreadPoolTaskExecutor,我们可以自定义线程池配置,比如核心线程数、最大线程数、队列长度等,以优化多线程执行效率,并通过设置RejectedExecutionHandler处理拒绝策略。 5. **事务...

Global site tag (gtag.js) - Google Analytics