2015-12-08 112 views
0

我想查詢一個表以查看是否存在具有'A'類型的任何行。 所以我用這個SQL:Mysql如何在不鎖定的情況下執行此操作

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

那麼我就需要另一個表的列值更新上述結果。爲了防止更新期間發生'A'類型的插入,我想使用鎖。但鎖定非常昂貴,有沒有其他的替代方法來做到這一點,而不鎖定?

如果我們必須使用鎖,我想如果表已經有類型A,在更新期間不需要鎖定插入,因爲結果仍然是1.只有當沒有類型A的行時才阻止插入。 怎麼做?

謝謝!

+1

您是否嘗試過SQL中的「Transaction」?我想你可以使用它。此鏈接將幫助你「http://dev.mysql.com/doc/refman/5.7/en/commit.html」 –

+0

你不能只更新another_table SET字段=(SELECT ... EXISTS)? – StanislavL

+0

當然,任何鎖定都比進行更新要便宜。你的實際目標是什麼?你可能想,而不是有明確鎖定嘴硬是['開始transaction' ...'commit'](http://dev.mysql.com/doc/refman/5.7/en/commit.html) – wallyk

回答

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' 
); 

請給我更多的細節,比如什麼是你的表像,你想這樣做,我們可以討論什麼進一步。

+0

謝謝!如果我使用UPDATE table1的T1 SET t1.column1 = 1 WHERE EXISTS( SELECT ... FROM table2的 WHERE類型= 'A' );會在更新期間允許插入type ='A'到table2? – Jess

相關問題