zoukankan      html  css  js  c++  java
  • 事务

    事物与存储过程

    把准备工作都做好~~~

    注意!!!在表后面搞一个引擎ENGINE=InnoDB,这对后面有帮助

    1、事务的概念

      事务就是针对数据库的一组操作,它可以由一条或多条SQL语句组成,同一个事务的操作具备同步的特点,事务中的语句要么都执行,要么都不执行。

    事务有很严格的定义,它必须同时满足四个特性

    1)原子性

       原子性是指一个事务必须被视为一个不可分割的最小工作单元,只有事务中所有的数据库操作都执行成功,才算整个事务执行成功,事务中如果有任何一个SQL语句执行失败,已经执行成功的SQL语句也必须撤销,数据库的状态退回到执行事务前的状态。

    2)一致性

    一致性是指事务将数据库从一种状态转变为下一种一致的状态。(例如,在表中有一个字段为姓名,具有唯一约束,即姓名不能重复,如果一个事务对姓名进行了修改,使姓名变得不唯一了,这就破坏了事务的一致性要求,如果事务中的某个动作失败了,系统可以自动撤销事务,返回初始化的状态。)

    3)隔离性

    隔离性还可以称为并发控制、可串行化、锁等,当多个用户并发访问数据库时,数据库为每一个用户开启的事务,不能被其他事务的操作数据所干扰,多个并发事务之间要相互隔离。

    (4)持久性

    事务一旦提交,其所做的修改就会永久保存到数据库中,即使数据库发生故障也不应该对其有任何影响。需要注意的是,事务的持久性不能做到100%的持久,只能从事务本身的角度来保证永久性,而一些外部原因导致数据库发生故障,如硬盘损坏,那么所有提交的数据可能都会丢失。

    ①开启事务

      格式:START TRANSACTION;

    ②提交事务

    当用户确认提交后,事务中的操作才会执行成功,这个过程就是手动提交的过程

    格式:COMMIT

    a、执行转账语句,提交事务

     

    翻译:通过UPDATE语句将a账户的100元钱转给b账户,最后提交事务

    使用SELECT语句来查询account表中的余额

     

    b、执行转账语句,不提交事务

     

    如图,在事务中实现了转账功能。此时最好把三个语句(如图2)写在一起,不要分开(如图1),方便后面演示

    此时,退出数据库然后重新登录,并查询数据库中各账户的余额信息,查询结果如下:

     

    结论:在事务中转账成功后没有提交事务就退出了数据库,由于事务中的语句不能自动提交,因此当前的操作会被自动取消。

    c、执行转账语句,提交事务

     

    在添加了COMMIT后,退出数据库然后再重新登录,使用SELECT语句查询数据库中各账户的余额信息,查询结果如下:

     

    如图,已经实现了转账功能

    结论:事务中的操作都是手动提交的,因此在操作完事务时,一定要使用COMMIT语句提交事务,否则事务操作会失败。

    ③事务的回滚

    格式:ROLLBACK;

    上述b可以看出,a账户成功给b账户转账100元钱,如果此时a账户不想给b账户转账了,由于事务还没有提交,就可以将事务回滚

     

    如图,回滚操作成功,当前事务中的操作取消了

  • 相关阅读:
    Java多线程:sleep()、yield()和join()方法浅析
    Java多线程:InterruptedException出现时的处理方法
    Java多线程:中断机制interrupt以及InterruptedException出现的原因
    Java多线程:哲学家就餐问题和生产者消费者问题
    Java多线程:wait()和notify()方法详解
    Java多线程:多线程的Synchronized详解
    Java多线程:线程的实现、生命周期和优先级以及与进程之间的区别
    ie6下:png图片不透明 和 背景图片为png的节点的内部标签单击事件不响应
    实现每次触发事件后隔一段时间后才能再次触发事件
    window.open窗口居中和窗口最大化
  • 原文地址:https://www.cnblogs.com/CcCyRrR/p/12072701.html
Copyright © 2011-2022 走看看