一个事务中的未提交数据可以被其他事务访问..为什么?

时间:2017-10-30 12:42:39

标签: mysql

在一个事务中插入查询或更新查询得到自动提交,即使我没有在该事务下提交它,插入的数据也可以被其他事务访问?为什么会这样。 例如:

我在两个不同的会话中尝试以下两个交易: 第1节:

START TRANSACTION;

INSERT INTO test (id) VALUES (1);

会话2:

START TRANSACTION;

 select * from test where id=1

执行此操作并为我提供id 1;

的数据

现在,我想问一下,如果我不在第一个事务中提交插入查询,那么如何在第二个事务中访问插入查询的数据。

我阅读了stackoverflow上的大多数链接,但他们说

您在同一事务中执行的所有操作都可在同一事务中的后续命令中看到。 在提交之前不要进行其他交易。除了Read uncommitted之外的所有隔离级别都是如此。

我的innodb配置设置如下:

autocommit ON

innodb_commit_concurrency 0

innodb_flush_log_at_trx_commit 1

tx_isolation REPEATABLE-READ

此设置会影响交易期间的数据:

1 个答案:

答案 0 :(得分:0)

您可能使用引擎类型MyISAM的表格。这些不支持交易。请改用引擎类型InnoDB。您只需使用

转换表格即可
ALTER TABLE foo ENGINE=InnoDB;

要检查,使用了哪个引擎,请检查

的最后一行
SHOW CREATE TABLE foo\G
相关问题