【发布时间】:2019-07-23 09:49:51
【问题描述】:
我正在尝试创建一个触发器来检查是否创建了具有相同主题和对象名称的行。如果没有,我想插入它,否则我会显示一条错误消息。
我查阅了一些示例并编写了下面的代码,但有一些错误。
DELIMITER $$
CREATE TRIGGER insertOnceKB BEFORE INSERT ON knowledgebase FOR EACH ROW
BEGIN
IF NEW.Object, NEW.Subject, NEW.Predicate not in
(SELECT A.Object, A.Subject, A.Predicate FROM knowledgebase as A
where (NEW.Object = A.Object and NEW.Subject = A.Subject and NEW.Predicate = A.Predicate)) THEN
INSERT INTO knowledgebase (Object,Predicate,Subject,Count,botID,Source,EntityTypeID)
VALUES ( NEW.Object, NEW.Predicate, NEW.Subject, NEW.Count, NEW.botID, NEW.Source, NEW.EntityTypeID);
THEN
CALL `Insert not allowed`;
END IF;
END $$
DELIMITER ;
这是 Xampp 服务器显示的错误消息:
1064 - 您的 SQL 语法有错误;检查与您的 MariaDB 服务器版本相对应的手册以了解正确的语法使用
near ' NEW.Subject, NEW.Predicate 不在 (SELECT A.Object, A.Subject, A.第 3 行的谓词 FR'
【问题讨论】:
-
你的第二个 THEN 应该是一个 else 并且建议你声明一些变量并将选择移出 if 语句修改它以插入变量并测试变量或将测试更改为存在/不存在测试。无论哪种方式,样本数据都是有用的。插入的目的是什么 - 你不能插入到触发触发器的表中..
-
插入是对的。如何在插入之前检查 db 上是否已经存在相同的值?谢谢。