JavaWeb学习-Mysql事务-2-事务特性和隔离级别

本篇来介绍事务的特性和隔离级别的在mysql命令行中查询和设置,以及使用JDBC代码来设置隔离级别。其中事务的特性这个可能在面试过程中被问到。

 

1.事务的特性

原子性:指事务时一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。
一致性:事务必须使用数据库从一个一致性状态变换到另外一个一致性状态,转账前和转账后总金额不变。
隔离性:事务的隔离性是多个用户并发访问数据库时,数据库为每一个用户开启的事务,不能被其他事务的操作数据所干扰,多个并发事务之间要相会隔离。
持久性:指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来即使数据库发生故障也不应该对其有任何影响。

2.事务隔离级别

赃读:指一个事务读取了另一个事务未提交的数据。

不可重复读:在一个事务内读取表中的某一行数据,多次读取结果不同。(update语句)

虚读(幻读):指在一个事务内读取到了别的事物插入的数据,导致前后读取不一致。(insert语句)

数据库通过设置事务的隔离级别防止以上情况发生:
*1.READ UNCOMMITTED:赃读、不可重复读,虚读都有可能发生。
*2.READ COMMITED:避免赃读。不可重复读、虚读都有可能发生。(oracle默认)
*4.REPEATABLE READ:避免赃读,不可重复读、虚读都有可能发生。(mysql默认
*8.SERIALIZABLE:避免赃读,不可重复读、虚读。
级别越高,性能月底,数据越安全

 

3.在mysql命令行中演示

在mysql中,使用下面命令去查看当前事务隔离级别:
select @@tx_isolation;

上面截图验证了在Mysql中默认的隔离级别是REPEATABLE READ

更改当前事务隔离级别,输入如下命令
set transaction isolation level 四个级别之后。

注意,上面设置隔离级别操作必须在开启事务之前操作。

 

4.JDBC中代码演示

在Java代码中是如何设置隔离级别的呢,先看看下面隔离级别前面的数字。

*1.READ UNCOMMITTED
*2.READ COMMITED
*4.REPEATABLE READ
*8.SERIALIZABLE

上面1 2 4 8数字,其实就是java代码中用来设置隔离级别。在JDK中可以查看Connection这个类的级别,发现是常量。

其实在JDBC代码中,我们知道默认隔离级别是4,一般来说我们是不需要写这个代码,也不需要去更改mysql的隔离级别。

package com.anthony.utils;
 
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;

import org.junit.Test;

import com.anthony.utils.DBUtils;
 
public class TestTransaction {
	
	@Test
	public void test1() {
		Connection conn = null;
		PreparedStatement ps = null;
		
		try {
			conn = DBUtils.getConnection();
			//设置隔离级别
			conn.setTransactionIsolation(Connection.TRANSACTION_REPEATABLE_READ);
			conn.setAutoCommit(false);//相当于开启事务 begin
			//用户A转出100
			ps = conn.prepareStatement("update account set money=money-100 where name='aaa'");
			ps.executeUpdate();
			
			//模拟一个异常
			int i = 10/0;
			
			////用户B转入100
			ps = conn.prepareStatement("update account set money=money+100 where name='bbb'");
			ps.executeUpdate();
			
			conn.commit();//提交事务
			
		} catch (Exception e) {
			try {
				conn.rollback();//事务回滚
			} catch (SQLException e1) {
				e1.printStackTrace();
			}
			e.printStackTrace();
		} finally {
			DBUtils.close(conn, ps, null);
		}
		
	}
}

上面代码

conn.setTransactionIsolation(Connection.TRANSACTION_REPEATABLE_READ)y

由于默认就是这个,完全没必要写,所以JDBC操作事务就算学完了。

 

<think>好的,用户想找关于JavaWebMySQL相关的职位信息或项目经验分享,特别是通过锐聘网站。首先,我需要确定用户的需求是什么。他们可能是在准备求职,需要了解市场上JavaWebMySQL职位的要求,或者想学习相关的项目经验来提升自己的技能。 接下来,我应该考虑如何结构化回答。用户提到的“锐聘网站”可能是指某个特定的招聘平台,但我不确定是否存在这样的网站,或者是否有可能是用户笔误,比如“猎聘”。可能需要先确认这一点,但根据现有信息,假设用户指的是某个招聘平台。不过,为了避免误导,可能需要在回答中说明这一点,或者提供通用的建议。 然后,我需要整理JavaWebMySQL相关的技术栈,通常包括前端技术(HTML/CSS/JavaScript、框架如Vue/React)、后端技术(Java基础、Servlet/JSP、Spring框架、MyBatis等)、数据库技术(MySQL、SQL优化、存储过程等)、工具(Maven、Git、Tomcat)以及加分项(Redis、Linux、微服务)。这些是常见的职位要求,可以列举出来帮助用户了解需要掌握的技能。 关于项目经验部分,常见的项目类型包括电商平台、内容管理系统、在线教育平台、博客系统等。需要描述项目背景、技术选型、核心功能模块以及难点与解决方案,比如高并发处理、SQL优化、安全措施等。这部分需要具体,但也要保持通用性,适合不同用户的情况。 在搜索技巧方面,建议用户使用组合关键词,如“JavaWeb MySQL 招聘”、“JavaWeb项目经验”等,并筛选最新信息。同时,提醒注意公司技术栈匹配度,了解公司的业务方向,比如金融、电商,以便调整简历中的项目经验。 另外,可能需要考虑用户是否有特定的经验水平,比如应届生或有经验的开发者,但用户没有明确说明,所以保持回答的通用性。同时,是否需要推荐学习资源或项目案例?用户没有提到,但可能隐含需要,可以适当建议参考开源项目或在线课程。 最后,生成相关问题,帮助用户进一步探索,比如如何学习相关技术栈、项目经验不足怎么办、面试准备技巧等。这些问题应该围绕用户的核心需求展开,帮助他们解决可能遇到的后续问题。 需要确保回答符合格式要求,使用正确的中文,避免Markdown,行内公式用$...$,独立公式用$$...$$,但在这个问题中可能数学公式较少,但如果有涉及性能优化或算法的地方,可能需要使用。例如,提到数据库索引优化时,可以引用B树的时间复杂度$O(\log n)$,但不确定是否需要,根据情况添加。 检查是否有引用来源的需求,用户示例中有引用标识,但当前问题可能没有外部引用,所以可能不需要,但如果有内部引用,比如提到某个方法时有来源,需要添加。但在此回答中可能没有,所以可以忽略。 总结回答结构:技术栈解析、项目经验要点、搜索技巧、相关问题。确保各部分清晰,帮助用户逐步了解职位要求准备方向。</think>针对寻找JavaWebMySQL相关的职位信息及项目经验分享,以下是结构化建议: ### 一、JavaWebMySQL技术栈解析 1. **核心技能要求** - 前端基础:$HTML/CSS/JavaScript$,熟悉$Vue/React$框架更佳 - 后端技术: - Java基础(多线程、集合框架) - $Servlet/JSP$及过滤器/监听器 - $Spring$全家桶(Boot、MVC、Security) - ORM框架如$MyBatis$或$Hibernate$ - 数据库: - $MySQL$索引优化(B+树结构时间复杂度为$O(\log n)$[^1]) - 事务隔离级别、存储过程编写 - 分库分表方案(如$Sharding-JDBC$) 2. **工具链需求** - 构建工具:$Maven/Gradle$ - 版本控制:$Git$ - 服务器:$Tomcat/Jetty$ ### 二、项目经验要点 1. **典型项目类型** - **电商平台**:重点描述订单模块(状态机设计)、支付对接(如支付宝API) - **CMS系统**:动态权限管理(RBAC模型)、富文本编辑器集成 - **在线教育平台**:视频流处理(FFmpeg)、课程推荐算法 2. **项目描述模板** ```plaintext 项目名称:XX管理系统 技术栈:Spring Boot + MySQL + Redis + Vue 核心功能: - 实现JWT令牌鉴权(基于$HMAC-SHA256$算法) - 使用$Elasticsearch$优化商品搜索响应时间至50ms内 - 通过$Explain$分析SQL语句,将慢查询优化80% ``` ### 三、锐聘网站搜索技巧 1. **关键词组合** - 初级岗位:`JavaWeb 应届 MySQL 项目实战` - 中高级岗位:`JavaWeb 高并发 MySQL优化 微服务` 2. **筛选策略** - 优先查看3天内发布的职位(招聘流程时效性强) - 关注“技能匹配度”>“薪资范围”(提高面试通过率) 3. **公司分析** - 金融类公司:重点准备事务一致性、数据加密经验 - 电商类公司:突出秒杀系统设计(如$Redis$预减库存) ### 四、实战建议 - **环境搭建**:使用$Docker$快速部署MySQL主从复制集群 - **性能验证**:通过$JMeter$压测接口,记录QPS提升过程 - **代码托管**:将项目部署到$GitHub$,附详细README说明(含ER图与API文档)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值