首页 / MYSQL / mysql中的并行事务
mysql中的并行事务
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了mysql中的并行事务,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2430字,纯文字阅读大概需要4分钟。
内容图文
我的数据库包含名为sample_table的表,其中包含一个名为user_first_name的列,该表为空
假设我有2个这样的交易
START TRANSACTION;
INSERT INTO sample_table VALUES("TEJA");
INSERT INTO sample_table VALUES("TEJA");
INSERT INTO sample_table VALUES("TEJA");
INSERT INTO sample_table VALUES("TEJA");
INSERT INTO sample_table VALUES("TEJA");
INSERT INTO sample_table VALUES("TEJA");
INSERT INTO sample_table VALUES("TEJA");
//......... till 10000 times
COMMIT
START TRANSACTION;
SELECT * FROM sample_table;
SELECT * FROM sample_table;
SELECT * FROM sample_table;
SELECT * FROM sample_table;
SELECT * FROM sample_table;
SELECT * FROM sample_table;
//........ till 10000 times
COMMIT
我以这种方式并行运行这两个事务,首先是transaction1启动,然后是transaction1运行时的transaction2.我希望结果会有一些名为TEJA的行.但我得到一个空洞的结果.
请帮我解释为什么结果是空的?
解决方法:
这一切都取决于你设定的隔离水平.
您可以看到使用此查询设置的那个:
select @@global.tx_isolation, @@session.tx_isolation;
在解释不同的隔离级别之前,让我解释一下他们试图避免的问题:
>脏读:尚未完成的事务的数据由另一个事务读取.
>丢失的更新:两个事务并行修改表中的条目.两个事务完成后,只应用一个修改.
>不可重复的读取:重新读取读取会导致不同的结果.
>幻像读取:在事务期间,另一个事务添加,删除或修改表条目.
现在针对不同的隔离级别.
读未提交:
使用此隔离级别读取操作会忽略任何类型的锁定,因此可能会出现上述任何问题.
阅读提交:
此隔离级别为应修改的对象上的整个事务设置写锁定.读锁仅在读取数据时设置.因此,可能发生不可重复的读取和幻像读取.
可重复阅读:
通过该隔离级别确保,当参数相同时,重新读取操作总是产生相同的结果.锁定被设置为在事务的总持续时间内进行读取和写入操作.因此,只能进行幻像读取.
序列化:
最高隔离级别保证并行运行事务的结果与事务一个接一个地运行的结果相同.大多数数据库并不是真的一个接一个地运行这些事务,而是会造成太多的性能损失.因此,可能会发生一个事务中止.例如,MySQL通过MVCC(多版本并发控制)实现了这一点.谷歌,如果你想了解更多.对于这个答案来说太过分了.
总而言之,这个表格也解释了它:
| Lost updates | Dirty Read | Non-Repeatable Read | Phantom Read
---------------------------------------------------------------------------------
Read Uncommitted | possible | possible | possible | possible
Read Committed | impossible | impossible | possible | possible
Repeatable Read | impossible | impossible | impossible | possible
Serializable | impossible | impossible | impossible | impossible
>在这个manual entry中有更多关于它的信息以及如何设置隔离级别.
内容总结
以上是互联网集市为您收集整理的mysql中的并行事务全部内容,希望文章能够帮你解决mysql中的并行事务所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。