Mysql如何做到这一点没有锁定

时间:2015-12-08 05:49:27

标签: mysql sql database-performance sqlperformance

我想查询一个表以查看是否存在任何具有'A'类型的行。 所以我用这个sql:

SELECT EXISTS(select * from %T where type = 'A');

然后我需要将另一个表的列值更新为上面的结果。为了防止在更新期间发生带有'A'类型的插入,我打算使用锁。但锁是非常昂贵的,还有其他替代方法来做到这一点没有锁定?

如果我们必须使用lock,我想如果表已经有了类型A,则在更新期间不需要锁定插入,因为结果仍然是1.只有在没有类型A的行时才阻止插入。怎么做?

谢谢!

1 个答案:

答案 0 :(得分:0)

由于您希望在有类型' A'时更新表格,通常我建议您在插入或删除行后立即进行更新或检查。

或者你可以这样做:

UPDATE table1 t1
LEFT JOIN table2 t2 ON t1.type = t2.type
SET t1.column1 = 1
WHERE t2.type IS NOT NULL

UPDATE table1 t1
SET t1.column1 = 1
WHERE EXISTS (
    SELECT ...
    FROM table2
    WHERE type = 'A'
);

请给我更多详细信息,例如您的餐桌是什么以及您想要做什么,以便我们进一步讨论。