MySQL_事务

版权声明:由于作者水平有限,文中难免有误,欢迎各位业界同仁斧正! https://blog.csdn.net/UserPython/article/details/82999535

事务的介绍

事务由一个或多个SQL语句组成的一个不可分割的整体,SQL语句之间相互依赖,要么全都执行,要么全都不执行。比如说:在人员管理系统中,你删除一个人员,你既要要删除人员的基本资料,也要删除和该人员相关的信息,如信箱,文章等等,这样这些数据库操作语句就构成一个事务!

事务必须满足的四个条件

  • 原子性
    事务具备整体性和不可分割性,被认为是一个不可分割的单元。假设一个事务有多种任务组成,其中的语句必须同时操作成功,才可以认为事务是成功的,否则将回滚到初始状态
    原子的执行是一个全部发生或全部失败的整体过程。在一个原子操作中,如果事务中的任何一条语句失败,前面执行的语句都将被返回,以保证数据的整体性不被破坏。这在常用的系统应用中,为保证数据的安全性起到一定作用

  • 一致性
    事务无论是完全成功或是在中途因某些环节失败而导致失败,但事务使系统处于一致的状态时,其必须保证一致性
    在MySQL中,一致性主要有MySQL的日志机制处理,它记录数据库的所有变化,为事务回复提供跟踪记录。如果系统在事务处理中间发生错误,MySQL回复过程将使用这些日志发现事务是否已经完全成功执行或需要返回。一致性属性保证数据库从不返回一个未处理的事务

  • 隔离性
    孤立性是指每个事物在自己的空间发生,与其他发生在系统中的事务隔离,而且事务的结果只在它完全被执行时才能看到
    当系统支持多个同时存在的用户和连接时,系统必须遵守孤立性原则,否则在执行过程中可能导致大量数据被破坏,孤立性保证每个事务完整地在其各自的空间内被顺利执行,保证事务与事务之间不会相互冲突

  • 持久性
    在MySQL中,即便是数据库系统崩溃,一个被提交的事务仍然在坚持。当一个事务完成,数据库的日志已经被更新时,持久性即可发挥其特有功效。在MySQL中,如果系统崩溃或者数据存储介质被破坏,通过使用日志,系统能够恢复在重启前进行的最后一次成功更新,可以反映系统崩溃时处于执行过程的事务的变化
    MySQL的持久性是通过一条记录事务过程中系统变化的二进制事务日志文件来实现的。如果遇到硬件损坏或者系统的异常关机,系统在下一次启动时,通过使用最后的备份和日志就可以恢复丢失数据

控制事务处理

  • ROLLBACK:回滚(撤销)回结束用户的事务,并撤销正在进行的所有未提交的修改
  • COMMIT:提交事务,并使已对数据库进行的所有修改称为永久性的
  • SAVEPOINT identifier:允许在事务中创建一个标记点,一个事务中可以有多个SAVEPOINT
  • ROLLBACK TO identifier:把事务回滚(撤销)到标记点

MySQL事务处理主要有两种方法:
1、用BEGIN、ROLLBACK、COMMIT来实现

  • BEGIN或START TRANSACTION开始一个事务
  • ROLLBACK 事务回滚(撤销事务)
  • COMMIT 提交事务

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

2、直接用SET 来改变MySQL的自动提交模式:

  • SET AUTUCOMMIT = 0 禁止自动提交
  • SET AUTUCOMMIT = 1 开启自动提交

在这里插入图片描述

在这里插入图片描述

通过InnoDB使用事务

InnoDB是事务型数据库的首选引擎,支持事务安全表(ACID)
MySQL5.7中InnoDB作为默认存储引擎,所以事务处理正常处理就可以

需求:利用事务的原理,完成借阅图书的一些操作:
1、向借阅信息表插入借阅记录
2、更新图书信息表的库存
3、更新读者信息表的余额
要求把借阅的相关操作看做一个整体,要么成功,要么都失败。
比如:当库存为零或余额小于等于200时都不可以借书

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/UserPython/article/details/82999535