MySQL事务的原子性分析

46次阅读
没有评论

共计 1175 个字符,预计需要花费 3 分钟才能阅读完成。

这篇文章主要讲解了“MySQL 事务的原子性分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着丸趣 TV 小编的思路慢慢深入,一起来研究和学习“MySQL 事务的原子性分析”吧!

一、事务的 ACID 特性:

 1)原子性

 2)一致性

 3)隔离性

 4)持久性

二、对于事务的原子性(A)我们知道事务中的操作要么都做要么都不做。对于这一点许多人有错误的理解,我们来看一个例子:

1)

mysql select * from t4;

+—-+——+

| id | name |

+—-+——+

|  1 | A    |

|  2 | B    |

|  3 | C    |

+—-+——+

3 rows in set (0.00 sec)

2)开启一个事务

mysql start transaction;

Query OK, 0 rows affected (0.00 sec)

mysql update t4 set name= AA where id=1;

Query OK, 1 row affected (0.00 sec)

Rows matched: 1  Changed: 1  Warnings: 0

mysql update t4 set name= BBBBB where id=2;

ERROR 1406 (22001): Data too long for column name at row 2

mysql commit;

Query OK, 0 rows affected (0.03 sec)

mysql select * from t4;

+—-+——+

| id | name |

+—-+——+

|  1 | AA   |

|  2 | B    |

|  3 | C    |

+—-+——+

3 rows in set (0.01 sec)

结果是不是预想的是不一样的,id= 1 的记录怎么会执行成功,难道不应该全部回滚吗?

身边有不少的人错误的理解为:事务中有执行错误的语句(error),那么整个事务都会回滚。

  我们所说的要么全成功要么全失败,成功与失败取决于我们最后是 commit 还是 rollback。commit 将所有的语句执行,rollback 将所有的语句执行撤销。

  上面的例子中,我们是 commit 操作,即便是有错误语句,也会将所有语句执行一次,commit 之后将修改的数据刷新到磁盘持久化。所以对于上面的操作我们应该是 rollback。

  个人理解:开启一个事务后,错误的语句会被分析器过滤掉,当我们 commit 的时候对于 MySQL 来说只有正确的语句(虽然我们知道有条语句是错误的),所以在我们捕捉到异常的时候应当将事务显示的 rollback 而不是 commit。

感谢各位的阅读,以上就是“MySQL 事务的原子性分析”的内容了,经过本文的学习后,相信大家对 MySQL 事务的原子性分析这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是丸趣 TV,丸趣 TV 小编将为大家推送更多相关知识点的文章,欢迎关注!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-24发表,共计1175字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)