加入收藏 | 设为首页 | 会员中心 | 我要投稿 南通站长网 (https://www.0513zz.cn/)- 专有云、图像技术、经验、数据治理、专属主机!
当前位置: 首页 > 站长资讯 > 外闻 > 正文

MySQL的事务和ACID

发布时间:2021-03-04 11:41:52 所属栏目:外闻 来源:互联网
导读:ID A:Atomicity(原子性) C:Consistency(一致性) I:Isolation(隔离性) D:Durability(持久性) 1. Atomicity(原子性) 先谈两个重要的概念:提交(commit)和回滚(rollback),当我们执行提交操作后,将对数据库进行永久性的修改,执行回滚操作,意味着数据库将

ID

  • A:Atomicity(原子性)
  • C:Consistency(一致性)
  • I:Isolation(隔离性)
  • D:Durability(持久性)

1. Atomicity(原子性)

先谈两个重要的概念:提交(commit)和回滚(rollback),当我们执行提交操作后,将对数据库进行永久性的修改,执行回滚操作,意味着数据库将撤销正在进行的所有没有提交的修改。注意这里的永久性并不意味着事务一完成就把数据刷到磁盘上,即使没有刷入磁盘,MySQL 也有日志机制来保证修改不会丢失。

事务是支持提交和回滚的工作单元,原子性,就是说事务对数据库进行多次更改时,要么在提交事务的时候所有更改都成功,要么在回滚事务的时候撤销所有更改。这是官方文档的表述,但有的人似乎错误理解了 commit 语句,实际上,哪怕事务里某一语句出现了错误,一旦你执行 commit,前面正常的修改仍然会被提交,MySQL 不会自动判断事务中的 SQL 执行成功与否。

我们接下来用例子来看看 commit 和 rollback:



 

我们可以看到,在执行 INSERT INTO deposit_table VALUES('D', 9000) 的时候,由于前一条语句已经插入了 D,所以这一句 SQL 语句执行失败,报出 1062 - Duplicate entry 'D' for key 'PRIMARY' 错误,但执行 COMMIT后,前面的修改仍然得到了提交,这显然是不符合我们的预期的。

注意:如果你是使用 Navicat 的查询界面,将执行不到 COMMIT 语句,只能执行到报错的地方,建议使用命令行来执行。

所以在实际情况中,我们需要根据 MySQL 的错误返回值来确定,是使用 ROLLBACK 还是 COMMIT 。就像这样:

 

(编辑:南通站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读