MySQL札记16_MySQL事务(面试必备)

浏览: 1134

什么是事务

概念

事务Trunsaction,一个最小的、不可再分的工作单元,通常一个事务对应一个完整的业务。InnoDB引擎是支持事务的,MyISAM不支持事务。

  • 在MySQL中,一条SQL语句就是一个事务。
  • 一个完整的业务需要大量的DML(insert、update、delete)语句来共同完成。只有DML数据操作语句才有事务。
  • 事务保证一组SQL语句要么全部成功,要么全部失败。

栗子:银行转账业务

比如在两个表中,A(原有400)给B(原有200)转200块钱,包含两个过程:A转出200,B转进200,只有当两个过程全部完成才算真正的执行了一个事务过程。

update user set fee=200 where id=1;     # 语句1
# 由于断网断电等不可控制原因,可能下面的语句不能成功执行
update user set fee=400 where id=2; # 语句2
  • 语句1的成功执行,并不能将底层数据库中的第一个账户的数据进行修改,单纯地记录操作,记录在内存中完成
  • 第二条语句成功执行之后,和底层数据库文件中的数据完成同步
  • 若第二条数据执行失败,清空所有的历史记录

事务相关术语

开启事务:start transaction;
事务结束:end transaction;
提交事务:commit transaction;(执行成功)
回滚事务:rollback transaction;(执行失败)
(执行成功);只有进行了commit操作,数据才会从内存中写入磁盘中

事务特点

事务具有四大特点,简称为ACID

  • 原子性Atomicity:一个事务中的语句,要么全部成功,要么全部失败。
  • 一致性Consistency:在事务开始之前或者结束之后,必须保持数据库的一致性。比如上面的栗子中,A减掉200,那么相应的,B一定要加上200。否则数据库中的数据不一致。
  • 隔离性Isolation:比如:当多个用户并发访问数据库,操作同一张表时,数据库为每一个用户开启的事务,不能被其他事务的操作所干扰,多个并发事务之间要相互隔离。用户的操作之间存在独立性。事务A和B之间具有隔离性。
  • 持久性Durability:持久性是指一个事务一旦被提交了,那么对数据库中的数据的改变就是永久性的,即便是在数据库系统遇到故障的情况下也不会丢失提交事务的操作。事务的成功,是硬盘数据上的更改,不仅是内存上的变化。持久性是事务的保证,是事务结束的标志。

事务开始和结束标志

开始标志

任何一条DML语句的执行,标志事务开始

结束标志

  • commit:提交
    • 成功的结束
    • 将所有的DML语句的操作历史记录和底层硬盘中的数据进行了同步。
    • 只有事务成功执行,硬盘中的数据才会进行修改更新。
  • rollback:回滚
    • 失败的结束
    • 将所有的DML语句的操作记录进行全部清空。
推荐 0
本文由 皮大大 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

0 个评论

要回复文章请先登录注册