我有一个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?
答案 0 :(得分:0)
使用时可以使用:
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
CREATE TEMPORARY TABLE tmp AS (SELECT * FROM t LIMIT 10);
然后它没有被阻止,但可能包含旧数据(在我的情况下也没问题)。