ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

mysql原子性_MySQL事务的原子性

2022-05-08 09:32:31  阅读:178  来源: 互联网

标签:语句 事务 name +----+------+ MySQL 原子 mysql commit


 

weixin_39630247

于 2021-01-18 23:25:44 发布

274
收藏 1
文章标签: 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),那么整个事务都会回滚。

3)总结

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

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

个人理解:开启一个事务后,错误的语句会被分析器过滤掉,当我们commit的时候对于MySQL来说只有正确的语句(虽然我们知道有条语句是错误的),所以在我们捕捉到异常的时候应当将事务显示的rollback而不是commit。
————————————————
版权声明:本文为CSDN博主「weixin_39630247」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_39630247/article/details/113159889

标签:语句,事务,name,+----+------+,MySQL,原子,mysql,commit
来源: https://www.cnblogs.com/zzn1/p/16244837.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有