我正在尝试创建触发器以将新数据插入到项目表中,但是必须检查项目表中是否存在新数据。这是我的代码:
DELIMITER //
CREATE TRIGGER addItem
AFTER INSERT ON tempitem FOR EACH ROW
BEGIN
IF NOT EXISTS (SELECT * FROM item WHERE item_name = NEW.item_name) THEN
BEGIN
INSERT INTO item (item_code, item_name, kategori, satuan)
SELECT item_code, item_name, kategori, satuan FROM tempitem WHERE tempitem.item_name = NEW.item_name ;
END IF;
END;
//
DELIMITER ;
该错误表明“ IF; END;”附近存在语法错误。在第8行中,但是我在语法上找不到任何错误。
答案 0 :(得分:2)
使用SQL时,我们不会检查数据是否存在,以确保不会添加重复项。我们尝试将其插入,并放置唯一约束。如果记录存在,数据库会告诉我们“不不不,它已经在那里” 就是这样。
解决问题的方法不是触发器,它是在unique
上放置一个item_name
索引。由于item_name
可能是 文本列(char,varchar,text),因此通常的技术是创建一个附加列,其中将包含{{1 }},然后将唯一索引应用于该索引。
剩下的就是利用MySQL的一种SQL扩展,即item_name
语法或INSERT IGNORE
,您的问题将永远得到解决。
答案 1 :(得分:0)
第7行中的“ THEN”之后有一个额外的“ BEGIN”,这可能是导致问题的原因。
尝试
DELIMITER //
CREATE TRIGGER addItem
AFTER INSERT ON tempitem FOR EACH ROW
BEGIN
IF NOT EXISTS (SELECT * FROM item WHERE item_name = NEW.item_name) THEN
INSERT INTO item (item_code, item_name, kategori, satuan)
SELECT item_code, item_name, kategori, satuan FROM tempitem WHERE tempitem.item_name = NEW.item_name ;
END IF;
END;
//
DELIMITER ;