`
QING____
  • 浏览: 2253412 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Mysql数据库事务(备忘)

 
阅读更多

 一.设置Mysql的事务级别

    1) my.ini文件中:

# READ-UNCOMMITTED, READ-COMMITTED, REPEATABLE-READ,SERIALIZABLE
transaction_isolation = READ-COMMITTED

    2) 启动参数指定:

./mysqld --transaction-isolation=READ-COMMITTED

    3) 命令行指定:

mysql>set global transaction isolation level READ COMMITTED

    命令行的参数列表为: 

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

    通过命令行设置事务级别之后,需要关闭当前窗口,因为修改后的新参数不会对当前会话生效.mysql中默认的事务级别为"REPEATABLE READ".可以通过"select @@global.tx_isolation;"来查看当前全局的事务级别.

 

二,事务隔离级别

    1) READ UNCOMMITTED: 隔离级别最低,并发能力最高.未提交读(读到未提交),简单来说,就是事务中(或者非事务)可以读取到其他事务已经更新但尚未提交的数据--脏读.也会出现"不可重复读""幻读"等问题. 此事务隔离级别,只会对不同事务中update/select for update等行锁进行"串行化"执行(阻塞),而对于read操作就像"没有事务"一样.(对于innodb引擎,默认情况下,R/W均会在一个自动提交的事务中进行)



图1 会话1中事务开启:执行更新,但未提交



 图2  会话2中非事务下read到未提交的数据,且update操作阻塞(因为会话1中的事务update时锁定了id = 1的行)

    2) READ_COMMITTED: 已提交读,即只能读取到已经提交的事务所update的数据,会出现"不可重复读","幻读"问题.如果2个并行的事务,其中事务1第一次read时获得一条记录,此后事务2对此记录进行了更改且事务提交,那么此时事务1再次read时,将会获得已经提交的新记录数据,因此为"不可重复的".



 图3.

    3) REPEATABLE_READ: 可重复读,有"幻读"问题;只能读取到其他事务已经提交的数据,且如果当前事务中对某条记录曾近read过,那么此后在事务中多次重复read,将会得到相同的数据,即使此时其他事务已经对此数据进行了更改;由此可见在REPEATABLE_READ隔离级别中,read操作将会产生snapshot,此后多次read只会从snapshot中获取数据;这也是它和"READ COMMITTED"的区别---"READ COMMITEED"不会使用snapshot.

    此隔离级别,通常被用在对数据一致性要求较高的环境中.它通常意味着,每个事务将会对read/update选取的行加锁.

    4) SERIALIZABLE: 串行化,隔离级别最高.将所有的事务串行化,因此并发能力有效,通常可以理解为事务导致了"表锁".



 图4 事务1中select选取行



 图5 事务2中对此行进行update,此时update阻塞直到事务1结束.

    由此可见,SERIALIZABLE级别通过对事务选取的行加锁的方式(select或者update等),来阻止其他事务对数据的更改:事务1对通过select对id=1的数据加锁,那么事务2尝试update也将阻塞直到事务1结束;此外如果事务1通过update方式对id=1的行加锁,那么事务2对此行select也会阻塞..此隔离级别通过这种方式,严格的杜绝的"脏读""不可重复读""幻读"的发生.(其他隔离级别中,不会出现read行加锁的情况.)

 

    上述各个隔离级别中,如果事务1对id = 1的数据更改,事务2也尝试update时,将会导致事务2阻塞,直到事务1提交;这也是mysql为了避免"更新丢失"的解决方式.不过在SERIALIZABLE级别中还有特殊的情况.

    "脏读": 读取了一个尚未确定的值,通常是事务中(或者在READ UNCOMMITTED隔离级别中的非事务)读取了其他事务尚未提交的值.

    "不可重复读": 脏读的一种表现,通常为多个事务并行操作时发生.

    "幻读": 多个事务并行操作时,当读取的数据位多行数据时(range),一个事务中多次读取发生数据条数不一致的情况.

  • 大小: 13 KB
  • 大小: 15.1 KB
  • 大小: 50.7 KB
  • 大小: 16.6 KB
  • 大小: 9 KB
分享到:
评论

相关推荐

    C#备忘录数据库代码

    - 对于多个操作需要一起成功或一起失败的情况,可以使用数据库事务来确保数据一致性。 10. 性能优化: - 通过合理设计数据库结构、索引和查询语句,以及适当使用缓存和批处理,可以提高应用程序的性能。 综上所...

    java+Mysql开发的备忘录系统

    在本项目中,我们讨论的是一个使用Java编程语言与MySQL数据库进行开发的备忘录系统。这个系统的主要目标是提供一套便捷的工具,让用户能够轻松地管理他们的日常事务,包括创建、编辑、查找和删除备忘录。同时,系统...

    精选_基于Jsp和MySQL实现的个人记事备忘系统_源码打包

    4. **MySQL数据库操作**:SQL语句(CRUD操作:Create, Read, Update, Delete),事务处理,以及数据库连接池的使用。 5. **数据持久化**:通过JDBC(Java Database Connectivity)接口与MySQL通信,包括连接、执行...

    MySQL学习备忘笔记.zip

    这篇“MySQL学习备忘笔记”涵盖了MySQL的基础知识、安装与配置、SQL语句、表的设计、索引、事务处理、备份与恢复、性能优化等方面,旨在帮助初学者快速掌握MySQL的核心技能。 1. **MySQL基础** - 数据库概念:理解...

    java备忘录

    Java备忘录是一款基于Java开发的应用程序,它利用MySQL数据库来存储和管理用户的数据。这个程序的构建展示了Java与数据库集成的基本原理,是学习和理解Java后端开发的一个良好实践案例。 首先,Java作为一门多用途...

    桌面日历及备忘

    开发者可能选择关系型数据库如MySQL或非关系型数据库如MongoDB,来存储和检索数据。数据库设计包括创建表结构,定义字段,以及考虑查询效率和数据安全。 在实际使用中,用户可以利用这样的桌面日历备忘系统记录会议...

    数据库语句大全,留着备忘啊

    - 数据库:存储数据的逻辑结构,如MySQL、Oracle、SQL Server、PostgreSQL等。 - 表:数据库中的数据单元,由列(字段)和行(记录)组成。 - 主键:表中唯一标识每条记录的字段,确保数据的唯一性。 - 外键:...

    web个人日历备忘系统-c#-sql

    【标题】"Web个人日历备忘系统"是一款基于C#编程语言和SQL数据库技术开发的应用,主要用于个人日常事务管理。这个系统集成了登录、注册、添加、删除以及编辑备忘录的功能,使得用户能够方便地在线管理和追踪自己的...

    MYSQL笔记 .md

    - **登录MySQL**: 使用命令`mysql -u root -p333`登录MySQL数据库管理系统。 - **查看数据库**: 执行`SHOW DATABASES;`命令查看现有数据库列表。 - **创建数据库**: 使用`CREATE DATABASE bjpowernode;`创建新的...

    asp日历&备忘录

    1. 数据库管理:如Microsoft SQL Server或MySQL,用于存储日历事件和备忘录。 2. CSS和JavaScript:用于创建用户界面和增强交互性。 3. AJAX(Asynchronous JavaScript and XML):用于无刷新的数据交换,提高用户...

    事务管理系统2.0

    5. **数据库设计与MySQL**:事务管理系统2.0选择了MySQL作为后端数据库,因为MySQL具有高可靠性、易用性和高性能的特点,适合中小型企业或个人使用。系统数据库设计包括用户表、事务表、日志表、备忘表和知识库表等...

    jquery+bootstrap 实现简单备忘录

    在开发过程中,我们需要考虑数据的持久化存储,这可能涉及到后端服务,如使用PHP、Python或Node.js等服务器端语言搭建API接口,将备忘录数据存入数据库(如MySQL、MongoDB)。同时,为了保证数据安全,应使用HTTPS...

    基于 SpringBoot 的宠物爱心组织管理系统:助力宠物公益事业信息化管理

    管理员承担着丰富且关键的职能,涵盖备忘录管理、宠物全方位管理(包括宠物收藏、评价、订单管理等)、字典管理、公告发布管理、捐赠事务管理、流浪动物相关管理(如流浪收藏、评价、订单管理等)、单页数据维护、...

    小雪备忘录PHP开源系统(xNote) v1.0.zip

    "小雪备忘录PHP开源系统(xNote) v1.0.zip" 是一个基于PHP语言开发的开源备忘录系统,适用于个人或小型团队记录、管理日常事务。这个系统允许用户创建、编辑、删除备忘录,并可能具备权限管理、搜索功能等。从文件...

    备忘录

    【标题】:“备忘录”涉及的技术点涵盖了图形用户界面(GUI)的元素设计、程序关闭的优雅实现、数据库管理和系统事件监听等多个方面。 【图形按钮】是用户界面设计中的重要组成部分,它允许用户通过点击来执行特定...

    基于Java的工作事务提醒系统的设计.pdf

    2. 数据库设计:文档中提到了使用MySQL数据库设计系统,包括用户信息表和事务信息表。用户信息表记录了用户的基本信息,而事务信息表则记录了事务的详细信息和状态(比如是否提醒)。这说明数据库设计应根据实际业务...

    jsp大作业 备忘录系统的的设计与实现.docx

    - 数据库连接:使用JDBC进行数据库连接,实现与MySQL等数据库的交互。 - SQL语句:通过SQL语句进行数据的增删改查操作,例如,当用户创建备忘时,需要插入新的备忘记录。 - Servlet:使用Servlet处理用户的请求,...

    大学 毕业设计 项目实训 个人备忘录系统(java SSH网站源代码)+JSP漂亮的界面控件.zip

    - 掌握数据库设计,如MySQL,以及SQL查询语言。 - 熟练使用HTML、CSS和JavaScript进行前端开发,了解AJAX异步请求。 - 了解软件工程中的需求分析、设计、编码、测试和文档编写过程。 这个项目不仅锻炼了开发者的...

    java-个人生活助手源代码+sql

    在这个项目中,开发者利用Java JDBC API实现了与MySQL数据库的交互,包括"增删改查"(CRUD)操作,这是数据库管理的基础。"增删改查"分别代表创建(Create)、读取(Read)、更新(Update)和删除(Delete)。例如,...

    EasyMemo.zip

    EasyMemo.zip是一个包含一个完整的备忘录应用的压缩包,该项目使用了流行的SSM(Spring、SpringMVC、MyBatis)技术栈进行开发,并集成了MySQL数据库、Bootstrap前端框架和layui组件。以下是对这个项目中涉及的关键...

Global site tag (gtag.js) - Google Analytics