事务
来源:互联网 发布:剑三捏脸数据萝莉长歌 编辑:程序博客网 时间:2024/05/16 12:01
一、事务的隔离级别
数据库系统要负责隔离操作,写代码只需要对隔离级别进行设置。
1,如果不考虑事务的隔离级别,会出现以下问题(不正确的)
a,脏读:一个事务读取到了另一个事务“未提交”的数据。
b,不可重复读:在一个事务内读取表中的某一行数据,多次读取结果不同。
c,虚读(幻读):是指在一个事务内读取到了别的事务插入的数据,导致前后读取不一致。
2,MySQL中操作事务隔离级别的命令
mysql>>select @@tx_isolation; #查看当前事务隔离级别
mysql>>set transaction isolation level 你的级别 #更改数据库当前事务隔离级别
隔离级别有四个级别(需要记住,注意是可能):
READ UNCOMMITTED:脏读,不可重复读,虚读都有可能发生
READ COMMITTED:防止脏读的发生,但是不可重复读,虚读都有可能发生
*REPEATABLE READ:防止脏读,不可重复读的发生,但是虚读有可能发生(数据库默认的)
SERIALIZABLE:防止脏读,不可重复读,虚读的发生,(提升到这个级别后,数据库会把整张表都锁住)
隔离级别原理,其实就是给行、表、数据库都加了一个锁。最高的隔离级别,必然有性能的问题,他锁了整张表,别人无法访问。
独占锁:增删改查都锁住了 共享锁:别人只能查
悲观锁:理论上可能发生的都要防住。乐观锁:只要基本上不发生的,就不加锁.
package com.ail.service;import java.sql.Connection;import java.sql.SQLException;import org.junit.Test;import cn.jdbc.utils.JDBCUtil3;import cn.jdbc.utils.JDBCc3p0util;import com.ail.dao.ACCdao;public class AccountS { //转前的案例 aaa dao bbb 1000 public void tranfrom(String from,String to,double money) { ACCdao ad = new ACCdao(); //获得连接 Connection con = null; try{ con = JDBCUtil3.getConnection(); //开启事务 JDBCUtil3.opentransaction(); boolean b = ad.tran(from, to, money); //关闭事务 JDBCUtil3.commit(); }catch (Exception e) { e.printStackTrace(); try { JDBCUtil3.rollback(); } catch (SQLException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } } }@Testpublic void test() { AccountS as = new AccountS(); as.tranfrom("aaa", "bbb", 100);}}package com.ail.dao;import java.sql.Connection;import java.sql.PreparedStatement;import cn.jdbc.utils.JDBCUtil3;public class ACCdao { public boolean tran(String from, String to, double money) { boolean b = true; Connection con = null; PreparedStatement ps = null; try{ //获得连接 con=JDBCUtil3.getConnection(); //String sql= "update account set money=money+"++"; //转钱修改某一个个记录的值 update 表明 set 字段 (money=?) String sql ="update account set money=money+? where name=?"; ps= con.prepareStatement(sql); ps.setDouble(1, money); ps.setString(2, from); ps.executeUpdate(); ps.setDouble(1, -money); ps.setString(2, to); ps.executeUpdate(); return b; }catch (Exception e) { e.printStackTrace(); }finally{ JDBCUtil3.release(null, ps, null); } return false; }}
0 0
- 事务
- 事务
- 事务
- 事务
- 事务
- 事务
- 事务
- 事务
- 事务
- 事务
- 事务
- 事务
- 事务
- 事务
- 事务
- 事务
- 事务
- 事务
- js leetcode
- POJ 1847 Tram(最短路)
- java中关于try、catch、finally中的细节分析
- Quick中的UIButton
- Noip 模拟题 T2 数字对
- 事务
- 【poj3254】Corn Fields 状态压缩dp
- java多线程中join()方法的理解
- 05_02_linux
- mysql学习笔记
- HDU 2546 饭卡 (01背包)
- poj 1182 食物链 //带权并查集
- 常见对象_StringBuffer和String的相互转换
- jQuery自定义类封装