千锋教育-做有情怀、有良心、有品质的职业教育机构

400-811-9990
手机站
千锋教育

千锋学习站 | 随时随地免费学

千锋教育

扫一扫进入千锋手机站

领取全套视频
千锋教育

关注千锋学习站小程序
随时随地免费学习课程

上海
  • 北京
  • 郑州
  • 武汉
  • 成都
  • 西安
  • 沈阳
  • 广州
  • 南京
  • 深圳
  • 大连
  • 青岛
  • 杭州
  • 重庆
当前位置:重庆千锋IT培训  >  技术干货  >  一分钟带你了解MySQL事务全攻略

一分钟带你了解MySQL事务全攻略

来源:千锋教育
发布人:lxl
时间: 2023-05-16 10:49:35

MySQL事务

  一. 事务

  事务这个概念不太容易理解,所以健哥通过下面一个模拟转账的案例来让各位小伙伴理解事务到底是什么。

  模拟转账

  生活当中转账是转账方账户扣钱,收账方账户加钱。我们用数据库操作来模拟现实转账。

  举个栗子:数据库模拟转账。

#A 账户转账给 B 账户 1000 元。
#A 账户减1000
UPDATE account SET MONEY = MONEY-1000 WHERE id=1;

#B 账户加 1000
UPDATE account SET MONEY = MONEY+1000 WHERE id=2;

   上述代码完成了两个账户之间转账的操作。

  举个栗子:模拟转账错误。

#A 账户转账给 B 账户 1000 元。
#A 账户减1000 元
UPDATE account SET MONEY = MONEY-1000 WHERE id=1;
#断电、异常、出错...

#B 账户加 1000 元
UPDATE account SET MONEY = MONEY+1000 WHERE id=2;

   上述代码在减操作后过程中出现了异常或加钱语句出错,会发现,减钱仍旧是成功的,而加钱失败了!

  注意:每条 SQL 语句都是一个独立的操作,一个操作执行完对数据库是永久性的影响。

  2. 事务的概念

  事务是一个原子操作。是一个最小执行单元。可以由一个或多个SQL语句组成,在同一个事务当中,所有的SQL语句都成功执行时,整个事务成功,有一个SQL语句执行失败,整个事务都执行失败。

  各位小伙伴是否理解了呢?那么健哥再做个小小的总结:

  事务就是让多个操作形成一个整体,在这个整体中的多个操作要么执行全成功,要么执行全失败。这就是事务的作用。

  3. 事务的执行过程

  开始过程:连接到数据库,执行一条DML语句。 上一个事务结束后,又输入了一条DML语句,即事务的开始。

  结束过程如下:

  1).提交:

  a.显示提交:commit;

  b.隐式提交:一条创建、删除的语句,正常退出(客户端退出连接)。

  2).回滚:

  a.显示回滚:rollback;

  b.隐式回滚:非正常退出(断电、宕机),执行了创建、删除的语句,但是失败了,会为这个无效的语句执行回滚。

  4. 事务的原理

  数据库会为每一个客户端都维护一个空间独立的缓存区(回滚段),一个事务中所有的增删改语句的执行结果都会缓存在回滚段中,只有当事务中所有SQL语句均正常结束(commit),才会将回滚段中的数据同步到数据库。否则无论因为哪种原因失败,整个事务将回滚(rollback)。

  5. 事务的特性

  下面健哥给各位小伙伴系统的说一下事务都具有哪些特性和功能。通常叫做ACID原则,因为ACID是由下面四个单词的首字母构成的。

  Atomicity(原子性):表示一个事务内的所有操作是一个整体,要么全部成功,要么全部失败

  Consistency(一致性):表示一个事务内有一个操作失败时,所有的更改过的数据都必须回滚到修改前状态

  Isolation(隔离性):事务查看数据操作时数据所处的状态,要么是另一并发事务修改它之前的状态,要么是另一事务修改它之后的状态,事务不会查看中间状态的数据。

  Durability(持久性):持久性事务完成之后,它对于系统的影响是永久性的。

  6. 事务应用

  应用环境:基于增删改语句的操作结果(均返回操作后受影响的行数),可通过程序逻辑手动控制事务提交或回滚。

  举个栗子:事务完成转账,A账户给B账户转账。

#1.开启事务
START TRANSACTION;|setAutoCommit=0;#禁止自动提交 setAutoCommit=1;#开启自动提交
#2.事务内数据操作语句
UPDATE ACCOUNT SET MONEY = MONEY-1000 WHERE ID = 1;
UPDATE ACCOUNT SET MONEY = MONEY+1000 WHERE ID = 2;
#3.事务内语句都成功了,执行 COMMIT
COMMIT;
#4.事务内如果出现错误,执行 ROLLBACK;
ROLLBACK;

   注意:开启事务后,执行的语句均属于当前事务,成功再执行 COMIIT,失败要进行 ROLLBACK。

声明:本站稿件版权均属千锋教育所有,未经许可不得擅自转载。

猜你喜欢LIKE

如何进行mysql数据备份?

2023-05-30

从零开始学Java之Java中的内部类是怎么回事?

2023-05-29

什么是事件流以及事件流的传播机制 ?

2023-05-29

最新文章NEW

什么是servlet的生命周期?servlet请求处理流程是怎样的?

2023-05-30

在java中,super关键字怎样使用

2023-05-29

什么是JavaScript伪数组?

2023-05-25

相关推荐HOT

更多>>

快速通道 更多>>

最新开班信息 更多>>

网友热搜 更多>>