mysql 多个select需要放入一个事务吗?
第一次写博客,还请大家多多支持
今天同事问了个问题:在多个select的时候,用不用放入同一个事务?
首先先看个例子:
- public class JDBCClient {
- public static void main(String[] args) {
- Connection conn = null;
- try {
- Class.forName("com.mysql.jdbc.Driver");
- conn = DriverManager.getConnection("jdbc:mysql://localhost/test","root","123456");
- if(conn != null) {
- //将本次会话的事务隔离级别设置为TRANSACTION_READ_COMMITTED,mysql默认的是REPEATABLE_READ
- conn.setTransactionIsolation(2);
- //关闭事务的自动提交
- conn.setAutoCommit(false);
- PreparedStatement ps = conn.prepareStatement("select student_no from student where student_id = 1 ");
- ResultSet rs = ps.executeQuery();
- while(rs.next()) {
- System.out.println(rs.getString(1));
- }
- //设置断点,并将数据库中执行 update student set student_no = '新的值' where student_id = 1;然后继续执行
- System.out.println("-----------");
- rs = ps.executeQuery();
- while(rs.next()) {
- //这里打印出新赋值的值
- System.out.println(rs.getString(1));
- }
- //提交事务
- //conn.commit();
- }
- } catch (Exception e) {
- e.printStackTrace();
- if(conn != null) {
- try {
- conn.rollback();
- } catch (SQLException e1) {
- e1.printStackTrace();
- }
- }
- }
- }
- //注:如果应用mysql默认的事务隔离级别,则两次打印出的内容一致;
- }
public class JDBCClient {
public static void main(String[] args) {
Connection conn = null;
try {
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection("jdbc:mysql://localhost/test","root","123456");
if(conn != null) {
//将本次会话的事务隔离级别设置为TRANSACTION_READ_COMMITTED,mysql默认的是REPEATABLE_READ
conn.setTransactionIsolation(2);
//关闭事务的自动提交
conn.setAutoCommit(false);
PreparedStatement ps = conn.prepareStatement("select student_no from student where student_id = 1 ");
ResultSet rs = ps.executeQuery();
while(rs.next()) {
System.out.println(rs.getString(1));
}
//设置断点,并将数据库中执行 update student set student_no = '新的值' where student_id = 1;然后继续执行
System.out.println("-----------");
rs = ps.executeQuery();
while(rs.next()) {
//这里打印出新赋值的值
System.out.println(rs.getString(1));
}
//提交事务
//conn.commit();
}
} catch (Exception e) {
e.printStackTrace();
if(conn != null) {
try {
conn.rollback();
} catch (SQLException e1) {
e1.printStackTrace();
}
}
}
}
//注:如果应用mysql默认的事务隔离级别,则两次打印出的内容一致;
}
事务:
A 没有提交的数据,当 A 执行了 rollback 回滚命令以后,B 再查询账户,就发现先前增加的 100 元消失了。为了避免脏读,我们可以将事务的隔离级别设置为:read committed。
read,这样就保证了在一个事务中,每次读取到数据都是一致的。
serializable 如果设置成了这种级别,那么数据库就变成了单线程访问的数据库,导致性能降低很多。
| 隔离级别 | 是否存在脏读 | 是否存在不可重复读 | 是否存在幻读 |
| Read UnCommit(未提交读) | Y | Y | Y |
| Read Commit(提交读) | N | Y | Y |
| Repeated Reader(可重复读) | N | N | Y |
| Serializable Reader(序列化读) | N | N | N |
mysql 多个select需要放入一个事务吗?的更多相关文章
- JavaScript 将多个引用(样式或者脚本)放入一个文件进行引用
1.将样式放入一个文件进行引用 @import url("../media/css/bootstrap.min.css"); @import url("../media/ ...
- 将四个按钮放入一个父控件的好处:方便移动,只需要改变父控件的y值,就可移动四个按钮
将四个按钮放入一个父控件的好处:方便移动,只需要改变父控件的y值, 就可移动四个按钮 https://www.evernote.com/shard/s227/sh/78 ...
- 有些其他程序设置为从 Outlook 下载并删除邮件。为防止发生此意外情况,我们将这些邮件放入一个特殊的 POP 文件夹中
最近使用FOXMAIL接收MSN邮件时,发现有一些邮件收取不到,进到WEB页面,页面下方提示“你的邮件位于 POP 文件夹中!有些其他程序设置为从 Outlook 下载并删除邮件.为防止发生此意外情况 ...
- JS对象 指定分隔符连接数组元素join() join()方法用于把数组中的所有元素放入一个字符串。元素是通过指定的分隔符进行分隔的。
指定分隔符连接数组元素join() join()方法用于把数组中的所有元素放入一个字符串.元素是通过指定的分隔符进行分隔的. 语法: arrayObject.join(分隔符) 参数说明: 注意:返回 ...
- JAVA ArrayList实现随机生成数字,并把偶数放入一个列表中
package Code429; import java.util.ArrayList;import java.util.Random; public class CodeArrayListPrint ...
- 现有1~100 共一百个自然数,已随机放入一个有98个元素的数组a[98].要求写出一个尽量简单的方案找出没有被放入数组的那2个数,并在屏幕上打印这2个数
void test7() { try { ]; ]; ]; ; ; int i; ; i < num.Length; i++) { num[i] = i + ; num1[i] = i + ;/ ...
- sql 如何把查询得到的结果如何放入一个新表中
如何把这个查询到的结果放到一张新表中? 2014-03-13 15:26 提问者采纳 表已经存在:insert into 表名 (列名1... 列名n) select 列名1....列名n f ...
- 【源代码】将一个整数的每位数分解并按逆序放入一个数组中(用递归算法)(C语言实现)
帮朋友做的,好像是一个面试题.假设不过考察递归的话.应该是够了,程序的健壮性和通用性都非常一般的说-- #include <stdio.h> #include <stdlib.h&g ...
- 两个list<Map<String,String>>放入一个list中
// public static void main(String[] args) {// List<Map<String, String>> list2 = new Arra ...
随机推荐
- Git 少用 Pull 多用 Fetch 和 Merge 【已翻译100%】【转】
本文转载自:https://www.oschina.net/translate/git-fetch-and-merge?lang=chs&page=1# 本文有点长而且有点乱,但就像Mark ...
- .NET通用基本权限系统框架源代码
DEMO下载地址: http://download.csdn.net/detail/shecixiong/5372895 一.开发技术:B/S(.NET C# ) 1.Windows XP以上 (支援 ...
- Linux防火墙设置
对于Internet上的系统,不管是什么情况都要明确一点:网络是不安全的.因此,虽然创建一个防火墙并不能保证系统100%安全,但却是绝对必要的. Linux提供了一个非常优秀的防火墙工具-netfil ...
- Tunnel Warfare(树状数组+二分)
http://poj.org/problem?id=2892 题意:输入n,m.n代表数轴的长度,m代表操作数. D x: 摧毁点x Q x: 询问村庄x最左与最右没有被摧毁的点的距离 R :恢复最 ...
- img标签间距问题
关于img标签间距问题:多个img之间有间距,包含img标签的div之间有间距. <!doctype html> 2 <html lang="en"> 3 ...
- [Apple开发者帐户帮助]四、管理密钥(1)创建私钥以访问服务
私钥允许您访问和验证与某些应用服务(如APN,MusicKit和DeviceCheck)的通信.您将在对该服务的请求中使用JSON Web令牌(JWT)中的私钥. 所需角色:帐户持有人或管理员. 在“ ...
- [Apple开发者帐户帮助]二、管理你的团队(3)删除团队成员
如果您已加入Apple开发者计划,您将在App Store Connect中管理团队成员.有关详细信息,请转到App Store Connect帮助中的添加和编辑用户. 如果您已加入Apple Dev ...
- 数据通讯与网络 第五版第24章 传输层协议-UDP协议部分要点
24.1 介绍 本章节主要集中于传输层协议的解读,图24.1展示TCP.UDP.SCTP在TCP\IP协议栈的位置 24.1.1 服务(Service) 每个协议都提供不同的服务,所以应该合理正确的使 ...
- 【POJ2248、LOJ#10021】 Addition Chains
事先预警:由于我太蒻了,本做法只能在POJ.LOJ等小数据(N<=100)平台上通过,在UVa(洛谷)上大数据并不能通过 戳我获得更好的观看效果 本题不用看,爆搜就是了,但是纯爆搜显然会爆时间, ...
- C#Cookie操作类,删除Cookie,给Cookie赋值
using System;using System.Data;using System.Configuration;using System.Web;using System.Web.Security ...