Mysql

MySQL 並發 INSERT

  • March 13, 2014

我有一個帶有 InnoDB 表的 MySQL 數據庫。有不同的客戶端程序製作SELECT(檢查值的存在)和INSERTUPDATE(取決於選擇的結果)語句。我擔心的是對數據的可能並發訪問導致只有INSERTs 和沒有UPDATEs。LOCK Table WRITE是唯一的解決方案嗎?

看起來你需要SELECT ... FOR UPDATE

虛擬碼:

START TRANSACTION;
SELECT some_column INTO @value FROM table_name WHERE ... FOR UPDATE;
IF @value = 'some value' THEN
 INSERT INTO table_name VALUES(...);
END IF;
INSERT INTO referenced_table VALUES(...);
COMMIT;

如果此表沒有附加其他外鍵,您可以嘗試 INSERT … ON DUPLICATE KEY UPDATE 或 REPLACE INTO(此表刪除現有行並插入新行)

這將使您不必先選擇然後插入或更新,但是它要求您有一個唯一的鍵來進行檢查

引用自:https://dba.stackexchange.com/questions/30553