Mysql
MySQL 並發 INSERT
我有一個帶有 InnoDB 表的 MySQL 數據庫。有不同的客戶端程序製作
SELECT
(檢查值的存在)和INSERT
或UPDATE
(取決於選擇的結果)語句。我擔心的是對數據的可能並發訪問導致只有INSERT
s 和沒有UPDATE
s。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(此表刪除現有行並插入新行)
這將使您不必先選擇然後插入或更新,但是它要求您有一個唯一的鍵來進行檢查