数据库Mysql事务,JDBC事务

事务和锁

一、事务

事务是逻辑上的一组数据库操作,要么都执行,要么都不执行。

例子: 假如张三要给李四转账200元,这个转账会涉及到两个关键操作就是:将张三的余额减少200元,将李四的余额增加200元。如果两个操作之间突然出现错误,例如银行系统崩溃导致张三余额减少,而李四的余额没有增加,这样的系统是有问题的。事务就是保证这两个关键操作要么都成功,要么都要失败。

mysql事务:
   默认的事务:一条sql语句就是一个事务 默认就开启事务并提交事务
   手动事务:
      1)显示的开启一个事务:start transaction
      2)事务提交:commit代表从开启事务到事务提交 中间的所有的sql都认为有效 真正的更新数据库
      3)事务的回滚:rollback 代表事务的回滚 从开启事务到事务回滚 中间的所有的 sql操作都认为无效数据库没有被更新。
JDBC事务:
    默认是自动事务。
    执行sql语句:executeUpdate() ---- 每执行一次executeUpdate方法 代表 事务自动提交
    通过jdbc的API手动事务:
    开启事务:conn.setAutoComnmit(false);
    提交事务:conn.commit();
    回滚事务:conn.rollback();
    注意:控制事务的connnection必须是同一个
    执行sql的connection与开启事务的connnection必须是同一个才能对事务进行控制
DBUtils事务:
    有参构造:QueryRunner runner = new QueryRunner(DataSource dataSource);
    有参构造将数据源(连接池)作为参数传入QueryRunner,QueryRunner会从连 接池中获得一个数据库连接资源操作数据库,所以直接使用无Connection参数 的update方法即可操作数据库
     无参构造:QueryRunner runner = new QueryRunner();
    无参的构造没有将数据源(连接池)作为参数传入QueryRunner,那么我们在使 用QueryRunner对象操作数据库时要使用有Connection参数的方法

事务的特性

① 原子性: 事务是最小的执行单位,不允许分割。事务的原子性确保动作要么全部完成,要么完全不起作用;例如转账的这两个关键操作(将张三的余额减少200元,将李四的余额增加200元)要么全部完成,要么全部失败。

② 一致性: 确保从一个正确的状态转换到另外一个正确的状态,这就是一致性。例如转账业务中,将张三的余额减少200元,中间发生断电情况,李四的余额没有增加200元,这个就是不正确的状态,违反一致性。又比如表更新事务,一部分数据更新了,但一部分数据没有更新,这也是违反一致性的;

③ 隔离性: 并发访问数据库时,一个用户的事务不被其他事务所干扰,各并发事务之间数据库是独立的;

④ 持久性: 一个事务被提交之后,对数据库中数据的改变是持久的,即使数据库发生故障也不应该对其有任何影响。

二、事务之间的相互影响

事务之间的相互影响分为几种,分别为:脏读,不可重复读,幻读,丢失更新

三、数据库隔离级别及原理

在这里插入图片描述

锁类型简述

** 共享锁(S锁) :** 假设事务T1对数据A加上共享锁,那么事务T2 可以 读数据A,不能 修改数据A。
** 排他锁(X锁): ** 假设事务T1对数据A加上共享锁,那么事务T2 不能 读数据A,不能修改数据A。

关于一些详细数据库原理参考两位博主的文章
事务
jdbc事务

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BiuPsYao

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值