MySQL基础学习笔记——事务

事物

  • 介绍:事物就是用户定义的一些列执行SQL语句的操作,这些操作要么完全地执行,要么完全地不执行,它是一个不可分割的工作执行单元。
使用场景
  • 在日常生活中,有时我们需要进行银行转账,这个银行转账操作背后就是需要执行多个SQL语句,假如这些SQL执行到一半突然停电了,那么就会导致这个功能只能完成了一半,这种情况是不允许出现的,要想解决这个问题需要通过事物来完成。

四大特性(ACID

  • 原子性Atomicity):一个事务必须被视为一个不可分割的最小工作单元整个事务中的所有操作要么全部提交成功,要么全部失败回滚,对于一个事务来说,不可能只执行其中的一部分操作,这就是事务的原子性。
  • 一致性Consistency):数据库总是从一个一致性的状态转换到另一个一致性的状态。(在前面的例子中,一致性确保了,即使在转账过程中系统崩溃,支票账户中也不会损失200美元,因为事务最终没有提交,所以事务中所做的修改也不会保存到数据库中。)
  • 隔离性Isolation):通常来说,一个事务所做的修改操作在提交事务之前,对于其他事务来说是不可见的。(在前面的例子中,当执行完第三条语句、第四条语句还未开始时,此时有另外的一个账户汇总程序开始运行,则其看到支票帐户的余额并没有被减去200美元。)
  • 持久性Durability):一旦事物提交,则其所做的修改会永久保存到数据库

说明:事物能够保证数据的完整性和一致性,让用户的操作更加安全。

事物的使用

在使用事物之前,先要确保表的存储引擎是InnoDB类型,只有这个类型才可以使用事物,MySQL数据库中表的存储引擎默认是InnoDB类型。
开始事物、提交事物、回滚事物

begin;
# 或
start transaction;

说明

  • 开启事务后修改命令,变更数据会保存到MySQL服务端的缓存文件中,而不维护到物理表中;
  • MySQL数据库默认采用自动提交(autocommit)模式,如果没有显式的开启一个事物,那么每条SQL语句都会被当作一个事物执行提交的操作;
  • 当设置autocommit=0就是取消了自动提交事物模式,直到显式的执行commitrollback才表示该事务结束;
  • set autocommit = 0表示取消自动提交事物模式,需要手动执行commit完成事物的提交:
# 取消事物的自动提交,如果设置=1表示自动提交
set autocommit = 0;
# 开始事物,下面忘了begin,commit表示提交上面的所有操作
begin;
# 提交事务:将本地文件中的数据提交扫物理表中,完成数据的更新
commit;
# 事物回滚:放弃本地缓存文件中的存储数据,表示回到开始事物前的状态
rollback;

MySQL基础学习笔记——事务_第1张图片

隐式提交

altercreatedrop(除表数增删改之外)等的大多数操作都是隐式提交,这些SQL语句不能放在事物中,即使放在事物中也会立即生效,不能回滚。

你可能感兴趣的:(学习笔记,MySQL)