Mysql
如果記錄存在,MySQL 觸發更新鍵
我正在嘗試在 MariaDB 中建構一個觸發器來遵循這個邏輯:
1. If the primary key val exists, increment the counter column 2. Else, insert the primary key into the table
這是我的散文觸發器:
delimiter // CREATE TRIGGER volume_manager BEFORE INSERT ON individual_key_log FOR EACH ROW BEGIN IF NEW.reference_key not in ( select * From individual_key_log where (NEW.reference_key = 'test') ) THEN -- MISSING THEN CALL `Insert not allowed`; END IF; END; // delimiter ;
為什麼要為此編寫觸發器?我有兩個理由說明你在這種情況下不應該這樣做。
原因 #1
讓我們假設以下內容:
reference_key
- 不是 auto_increment 列
- 是主鍵
counter
- 是要增加的列
- 定義為
INT NOT NULL DEFAULT 1
您可以按如下方式編寫 INSERT
INSERT INTO individual_key_log (reference_key,...) VALUES (...) ON DUPLICATE KEY UPDATE counter = counter + 1;
這是比觸發器更清潔的方法
原因 #2
我注意到你的觸發器中間有一個 CALL。相信我,除非有必要,否則您不想觸發中斷中游的觸發器。在觸發器中呼叫任何東西都需要成本,並且會影響查詢性能。我寫過這個
Jan 13, 2012
:從觸發器呼叫儲存過程我還寫了關於如果沒有正確完成觸發器如何停止正常操作的文章:請參閱我的文章
Apr 25, 2011
:MySQL 中的觸發器以防止插入,其中我展示瞭如何暫停觸發器以防止插入檢查單獨的表。
你必須使用
iNSERT ... ON DUPLICATE KEY
語義:INSERT INTO individual_key_log (reference_key,...) VALUES (...) ON DUPLICATE KEY UPDATE counter=counter+1;