JDBC与MySql:事务

什么是事务?

 事务的概念:

事务是指逻辑上的一组操作,这组操作要么同时完成要么同时不完成.

案例:
有一个很经典的银行转账案例,解释了什么是事务,事务的重要性:
假设有a,b两个人分别有1000元,a向b转账200元,那么对应地在数据库的操作就是把a的余额值减200,给b的余额值加200。这两个操作分别是由两条sql语句完成的,那么假设在执行第一条sql语句之后数据库发生故障,第二条语句未能执行,等到数据库恢复之后a的账户被减去200变成了800,而因为在执行第二条语句的时候数据库发生故障所以第二条语句没有自信,b的余额没有改变依然是1000.显示中银行发生这种事故无疑是致命的,但是我们使用银行转账功能的时候为何没有遇到这种情况呢?这是因为使用了事务机制。把转账的两条sql语句看做一组操作,如果这组操作中的任何一步操作失败或没有操作,那么就不对数据库进行修改。

事物的四大特性:

一个事务具有的最基本的特性,一个设计良好的数据库可以帮我们保证事务具有这四大特性(ACID)

        原子性:原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。 
        一致性:如果事务执行之前数据库是一个完整性的状态,那么事务结束后,无论事务是否执行成功,数据库仍然是一个完整性状态.
            数据库的完整性状态:当一个数据库中的所有的数据都符合数据库中所定义的所有的约束,此时可以称数据库是一个完整性状态.
        隔离性:事务的隔离性是指多个用户并发访问数据库时,一个用户的事务不能被其它用户的事务所干扰,多个并发事务之间数据要相互隔离。
        持久性:持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来即使数据库发生故障也不应该对其有任何影响。

    其中,隔离性:
        将数据库设计成单线程的数据库,可以防止所有的线程安全问题,自然就保证了隔离性.但是如果数据库设计成这样,那么效率就会极其低下.

在MySql中使用事务:

在MySql中是MySql数据库自动管理事务的,自动把每条sql语句都当成独立一个事务。
但是这种自动管理事务的方法显然没什么卵用~~~
最终还是要我们开发人员按照实际情况去使用事务,下面将说说如何使用事务:

在MySql中输入start transaction之后所输入的sql语句都视为同一组操作在同一个事务内。
如果在start transaction之后所修改的数据库最终没执行commit命令,则之前所做的修改将会全部无效。
如果在start transaction之后需要回滚则使用  rollback,但是需要注意的是在start transaction后,使用了commit,那么rollback操作将无效。
下面就以银行转账操作来做例子示范一下如何使用事务:
start transaction;
update account set balance=balance-200 where name='a';
update account set balance=balance+200 where name='b';
commit;

在JDBC中使用事务:

在jdbc中使用事务是依靠connection对象来操作的,上文说了,MySql的事务是MySql自动管理的,所以在jdbc中我们首先要把自动管理关闭,

先关闭自动管理事务
 conn.setAutoCommit(false);
//再使用Statement的对象执行作为同一组操作的sql语句,这里不再写出来,如果不知道jdbc的基础使用可以参考笔者的博客
conn.cmooit();//最后提交事务




               







  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值