使用MySQL 5.6。我有兩張桌子。一個有一個哈希的白名單。當我向另一個表中插入新行時,我想首先將插入語句中的散列與白名單進行比較。如果它在白名單中,我不想執行插入操作(稍後要處理的數據較少)。插入是從另一個程序生成的,並且是帶有sql語句的文本文件。Mysql使用觸發器刪除插入內容
我一直在玩的觸發器,幾乎有工作:
CREATE TRIGGER `Filelist` BEFORE INSERT ON `filelist`
FOR EACH ROW BEGIN IF(
SELECT count(md5hash) FROM whitelist WHERE md5hash = new.hash) >0
THEN
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = 'Can not have duplicates';
END IF ;
END
但是有一個問題。拋出錯誤的信號停止導入。我想跳過這一行,而不是停止整個導入。
一些搜索沒有找到任何方法來默默跳過導入。
我的下一個想法是創建一個重複的表定義,並將插入重定向到該dup表。但新舊似乎不適用於表名。
其他然後添加一個忽略列到我的表,然後在導入後基於該列進行質量下降,有什麼辦法來實現我的目標?我也有這個問題[忽略是tinyint(1)]:
DELIMITER $$
CREATE TRIGGER whitelisted
BEFORE INSERT ON filelist
FOR EACH ROW BEGIN
IF (select count(md5hash) from whitelist where md5hash=new.hash) > 0 THEN
SET Ignore = true;
END IF;
END$$
/* This is now "END$$" not "END;" */
/* Reset the delimiter back to ";" */
DELIMITER ;
#1064 - You have an error in your SQL syntax; check the manual that corresponds to
your MySQL server version for the right syntax to use near ') THEN SET Ignore = true;
END IF; END' at line 4
有什麼建議嗎?我也試過
SET Ignore = 1;
SET Ignore = '1';
SET new.Ignore = {all of the above};
如果這是可能的,我不知道如何。對於閱讀本文的任何人,我都會在插入完成後運行刪除操作來解決問題,以刪除白名單中包含匹配哈希的任何行。我使用的查詢是:從filelist中刪除其中(從白名單中選擇計數(md5hash),其中md5hash =散列)> 0我會繼續觀察此情況,以便我得到有效的答案。 – user2891127