【发布时间】:2017-10-30 21:39:25
【问题描述】:
在一个事务中插入查询或更新查询会自动提交,即使我没有在该事务下提交它并且插入的数据可以被其他事务访问?为什么会这样。 例如:
我在两个不同的会话中尝试以下两个事务: 会话 1:
START TRANSACTION;
INSERT INTO test (id) VALUES (1);
第 2 节:
START TRANSACTION;
select * from test where id=1
这会被执行并给我 id 1 的数据;
现在,我想问一下,如果我不在第一个事务中提交插入查询,那么如何在第二个事务中访问插入查询的数据。
我阅读了 stackoverflow 上的大部分链接,但他们都这么说
您在同一事务中所做的一切对同一事务中的后续命令都是可见的。 在提交之前不要对其他事务进行。这适用于所有隔离级别,读取未提交除外。
我的 innodb 配置设置如下:
自动提交开启
innodb_commit_concurrency 0
innodb_flush_log_at_trx_commit 1
tx_isolation 可重复读取
此设置是否影响交易期间的数据:
【问题讨论】:
-
您自己回答了您的问题。设置为
autocommit ON,因此无论何时发生某些 DML,它都会自动提交。 -
如果我在 conf 文件中更改我的设置并将 autocommit 设置为 OFF 那么它会起作用吗?
-
它应该处于理想状态..
-
那么事务有什么用呢?
-
可重复阅读
标签: mysql