在每個基於InnoDB且啓用Autocommit的表的Mysql數據庫中,使用子查詢和/或連接的查詢是否是原子?在MySQL上連接插入/更新是一個原子操作嗎?
實例:
INSERT INTO users SELECT (x,y,z) FROM users, comments WHERE users.id = comments.user_id;
(聯接)UPDATE users, comments SET users.x = x1 WHERE users.age > 30;
(聯接)UPDATE users, comments SET users.x = x1, comments.y = y1 WHERE users.age > 30;
(聯接)UPDATE users, comments SET users.x = x1, comments.y = y1 WHERE users.id IN (SELECT id FROM users WHERE age > 30);
(子查詢)
但是被原子化並不意味着沒有其他查詢會干擾查詢執行?在類似於「INSERT INTO用戶SELECT(x,y,z)FROM用戶,註釋WHERE users.id = comments.user_id AND條件」的查詢中,如果where條件滿足,那麼您將被授予更新權限後。這不正確嗎? –
@DamianoBarbati更新了我的答案。 – fancyPants
同意。我的假設是基於問題中的'sql語句',其中一行正在從另一個表複製,然後該行中的數據被更改。 –