簡體   English   中英

是否在INSERT / UPDATE查詢中存在多個MySQL子查詢?

[英]Atomicity multiple MySQL subqueries in an INSERT/UPDATE query?

我打算編寫以下查詢:

INSERT INTO summary (user_id, total_points, count_operations)
SELECT 
   15 AS user_id,
   (SELECT SUM(points) FROM operations WHERE user_id = 15) AS total_points,
   (SELECT COUNT(*) FROM operations WHERE user_id = 15) AS count_operations
ON DUPLICATE KEY UPDATE
total_points = VALUES(total_points), 
count_operations = VALUES(count_operations);

整個陳述是原子的嗎? 即MySQL(帶有MyISAM引擎)是否在內部鎖定operations表?

MySQL是否有可能順序執行兩個子查詢,這在某些情況下(如果在該時間段內添加了新操作)可能導致total_pointscount_operations不一致?

MyISAM仍使用表級鎖

這些存儲引擎通過始終在查詢開始時一次請求所有需要的鎖並始終以相同順序鎖定表來避免死鎖。 權衡是該策略減少了並發性。 其他想要修改表的會話必須等待,直到當前DML語句完成。

因此,其他想要更新正在使用的表的進程必須等到事務完成為止。 如果它在表“ operations”上設置了讀取鎖,則所有后續的寫入鎖都將進入隊列並等待。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM