事务

一、事务知识

  1. 概念:由一步或几步操作序列组成的逻辑执行单无(要么全部成功,要么全部失败)
  2. 特性:ACID
    1) 原子性:事务是应用中最小的逻辑执行体
    2) 一致性:事务的执行结果必须使用数据库的数据保持正确
    3) 隔离性:各个事务的执行互不干扰
    4) 持续性:事务提交之后,数据的改变要保存进数据库,也叫持久性
  3. 提交
    1) 自动提交:执行DDL或DCL语句或程序正常退出时会自动提交
    2) 显示提交:Commit
  4. 回滚
    1) 自动回滚:系统错误或强行退出时会自动回滚
    2) 显示回滚:rollback

二、MySql的事务支持

  1. setautocommit = 0 ; // 开启事务(关掉自动提交)
  2. 临时事务:transaction 或begin 后的DML语句就是临时事务,要在commit后才生效
  3. 保存中间点:save point a;
  4. 回滚:rollback;
  5. 回滚到中间点:rollback to a;
  6. 提交:commit
    注:普通的提交、回滚都会结束当前事务,而回滚到中间点时仍处于事务中

三、JDBC的事务支持

  1. JDBC的事务支持由Connection提供,默认关闭事务
  2. Connetion对象关于事务的方法
    setAutoCommit(false); // 开启事务
    rollback(); // 回滚
    commit(); // 提交
    SavePoint setSavepoint(); // 设置中间点,一般不指定名称
    rollback(SavePoint point); // 回滚到中间点
  3. 设置中间点时,一般不指定名称是因为回滚到中间点时,是根据中间点对象来回滚的,与名字无关,所以不用指定。

四、事务的隔离级别

  1. 读未提交:在该级别下,一个事务能读到另一个事务还未提交的事务,即脏读,此级别还会产生不可重复读、幻读这些问题。
  2. 读提交:一个事务只能读到另一个事务提交后的修改结果,此时会产生不可重复读、幻读等问题。
  3. 可重复读:一个事务A在读取数据时添加共享锁,在写数据时添加排他锁,这样另一个事务B只能读到A提交后的结果。但此时还会有幻读的问题的存在。
  4. 序列化:一个事务在对某个范围内的数据进行任何操作时,不允许其他事务对该范围内的数据作任何操作,包括查询。
_级别脏读不可重复读幻读(虚读)
读未提交read uncommitted1YYY
读提交read committed2XYY
可重复读repeatable read4XXY
序列化、串行化Serialization8XXX

问题描述:
1. 脏读:一个事务读到另一个事务未提交的修改结果
2. 不可重复读:一个事务两次查询同一条语句时,由于另一个事务对该数据的修改提交,从而造成两次查询结果不一致的情况。
3. 幻读:一个事务两次查询同一范围内的数据时,由于另一个事务对该范围内的数据进行了添加、修改或删除等操作,从而造成两次查询结果一致的情况

五、关于锁的部分说明

  1. 共享锁:又叫读锁,若一个事务对某条数据加了该锁,则其他事务只能查看该条数据
  2. 排他锁,又叫写锁,若一个事务对某条数据加了该锁,则其他事务不能对该条数据作任何操作,包括查看。
  3. 表锁、行锁等其他关于锁的知识可百度了解下。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值