MySql事务:为什么在CREATE TABLE(SELECT)不允许时允许SELECT?

时间:2018-04-09 09:25:51

标签: mysql

我有一个innoDB-Table。我正在做第一个帖子:

_subplots

之后,我在第二个帖子中做到了:

START TRANSACTION;
SELECT 1 FROM t GROUP BY 1 LOCK IN SHARE MODE;
UPDATE t SET ...=...;

我的问题:SELECT *来自t LIMIT 10;在第二个线程工作没有问题,相同的选择进入tmp-table阻止它。为什么会这样?

https://dev.mysql.com/doc/refman/5.7/en/innodb-locking-reads.html说: 阻止其他事务更新这些行,从进行SELECT ... LOCK IN SHARE MODE,或者从某些事务隔离级别读取数据。 但是这些"某些交易隔离级别是什么"没有"手动"有没有办法避免它从t中选择所有数据并将其插入到tmp?

1 个答案:

答案 0 :(得分:0)

使用时可以使用:

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
CREATE TEMPORARY TABLE tmp AS (SELECT * FROM t LIMIT 10);

然后它没有被阻止,但可能包含旧数据(在我的情况下也没问题)。