一.设置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),一个事务中多次读取发生数据条数不一致的情况.
相关推荐
- 对于多个操作需要一起成功或一起失败的情况,可以使用数据库事务来确保数据一致性。 10. 性能优化: - 通过合理设计数据库结构、索引和查询语句,以及适当使用缓存和批处理,可以提高应用程序的性能。 综上所...
在本项目中,我们讨论的是一个使用Java编程语言与MySQL数据库进行开发的备忘录系统。这个系统的主要目标是提供一套便捷的工具,让用户能够轻松地管理他们的日常事务,包括创建、编辑、查找和删除备忘录。同时,系统...
4. **MySQL数据库操作**:SQL语句(CRUD操作:Create, Read, Update, Delete),事务处理,以及数据库连接池的使用。 5. **数据持久化**:通过JDBC(Java Database Connectivity)接口与MySQL通信,包括连接、执行...
这篇“MySQL学习备忘笔记”涵盖了MySQL的基础知识、安装与配置、SQL语句、表的设计、索引、事务处理、备份与恢复、性能优化等方面,旨在帮助初学者快速掌握MySQL的核心技能。 1. **MySQL基础** - 数据库概念:理解...
Java备忘录是一款基于Java开发的应用程序,它利用MySQL数据库来存储和管理用户的数据。这个程序的构建展示了Java与数据库集成的基本原理,是学习和理解Java后端开发的一个良好实践案例。 首先,Java作为一门多用途...
开发者可能选择关系型数据库如MySQL或非关系型数据库如MongoDB,来存储和检索数据。数据库设计包括创建表结构,定义字段,以及考虑查询效率和数据安全。 在实际使用中,用户可以利用这样的桌面日历备忘系统记录会议...
- 数据库:存储数据的逻辑结构,如MySQL、Oracle、SQL Server、PostgreSQL等。 - 表:数据库中的数据单元,由列(字段)和行(记录)组成。 - 主键:表中唯一标识每条记录的字段,确保数据的唯一性。 - 外键:...
【标题】"Web个人日历备忘系统"是一款基于C#编程语言和SQL数据库技术开发的应用,主要用于个人日常事务管理。这个系统集成了登录、注册、添加、删除以及编辑备忘录的功能,使得用户能够方便地在线管理和追踪自己的...
- **登录MySQL**: 使用命令`mysql -u root -p333`登录MySQL数据库管理系统。 - **查看数据库**: 执行`SHOW DATABASES;`命令查看现有数据库列表。 - **创建数据库**: 使用`CREATE DATABASE bjpowernode;`创建新的...
1. 数据库管理:如Microsoft SQL Server或MySQL,用于存储日历事件和备忘录。 2. CSS和JavaScript:用于创建用户界面和增强交互性。 3. AJAX(Asynchronous JavaScript and XML):用于无刷新的数据交换,提高用户...
5. **数据库设计与MySQL**:事务管理系统2.0选择了MySQL作为后端数据库,因为MySQL具有高可靠性、易用性和高性能的特点,适合中小型企业或个人使用。系统数据库设计包括用户表、事务表、日志表、备忘表和知识库表等...
在开发过程中,我们需要考虑数据的持久化存储,这可能涉及到后端服务,如使用PHP、Python或Node.js等服务器端语言搭建API接口,将备忘录数据存入数据库(如MySQL、MongoDB)。同时,为了保证数据安全,应使用HTTPS...
管理员承担着丰富且关键的职能,涵盖备忘录管理、宠物全方位管理(包括宠物收藏、评价、订单管理等)、字典管理、公告发布管理、捐赠事务管理、流浪动物相关管理(如流浪收藏、评价、订单管理等)、单页数据维护、...
"小雪备忘录PHP开源系统(xNote) v1.0.zip" 是一个基于PHP语言开发的开源备忘录系统,适用于个人或小型团队记录、管理日常事务。这个系统允许用户创建、编辑、删除备忘录,并可能具备权限管理、搜索功能等。从文件...
【标题】:“备忘录”涉及的技术点涵盖了图形用户界面(GUI)的元素设计、程序关闭的优雅实现、数据库管理和系统事件监听等多个方面。 【图形按钮】是用户界面设计中的重要组成部分,它允许用户通过点击来执行特定...
2. 数据库设计:文档中提到了使用MySQL数据库设计系统,包括用户信息表和事务信息表。用户信息表记录了用户的基本信息,而事务信息表则记录了事务的详细信息和状态(比如是否提醒)。这说明数据库设计应根据实际业务...
- 数据库连接:使用JDBC进行数据库连接,实现与MySQL等数据库的交互。 - SQL语句:通过SQL语句进行数据的增删改查操作,例如,当用户创建备忘时,需要插入新的备忘记录。 - Servlet:使用Servlet处理用户的请求,...
- 掌握数据库设计,如MySQL,以及SQL查询语言。 - 熟练使用HTML、CSS和JavaScript进行前端开发,了解AJAX异步请求。 - 了解软件工程中的需求分析、设计、编码、测试和文档编写过程。 这个项目不仅锻炼了开发者的...
在这个项目中,开发者利用Java JDBC API实现了与MySQL数据库的交互,包括"增删改查"(CRUD)操作,这是数据库管理的基础。"增删改查"分别代表创建(Create)、读取(Read)、更新(Update)和删除(Delete)。例如,...
EasyMemo.zip是一个包含一个完整的备忘录应用的压缩包,该项目使用了流行的SSM(Spring、SpringMVC、MyBatis)技术栈进行开发,并集成了MySQL数据库、Bootstrap前端框架和layui组件。以下是对这个项目中涉及的关键...