目标:使用具有多个条件的触发器阻止插入数据库表
描述:试图阻止联系人表中的大量不相关条目。我创建了一个包含很多坏/脏话/脏话的亵渎表和一个正则表达式过滤 URL。如果任何条目带有这些坏词或 URL,则不应插入 DB。
分析:在 SO 上搜索了许多不同的解决方案,可能是重复的,但没有找到在单个触发条件中具有多个条件和正则表达式的任何答案。此外,无法使用这些答案创建成功的触发器。在创建时,它会抛出错误。请帮助,提前谢谢。
表格列 电子邮件、消息
扳机
DELIMITER $$
CREATE TRIGGER trg_contact_insert_profanity_check
BEFORE INSERT ON contacts.c
FOR EACH ROW
BEGIN
IF (c.email,c.message IN (SELECT * FROM profanity) OR (c.message REGEXP '/(http|https|ftp|ftps)?(\:\/\/)?[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(\/\S*)?/' ))
THEN
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = "Database Error: BAD REQUEST";
ENDIF;
END;$$
错误
MySQL said: Documentation
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'as c
FOR EACH ROW
BEGIN
IF (c.email,c.message IN (SELECT * FROM profanity) OR' at line 2