Mysql 如何创建触发器来验证另一个表上是否存在新数据?

Mysql 如何创建触发器来验证另一个表上是否存在新数据?,mysql,Mysql,我正在尝试创建触发器以将新数据插入项表,但必须检查项表中是否存在新数据。这是我的密码: 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, it

我正在尝试创建触发器以将新数据插入项表,但必须检查项表中是否存在新数据。这是我的密码:

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 ;
错误显示在第8行的“IF;END;”附近有语法错误,但我找不到语法中的任何错误。

在第7行的“THEN”之后有一个额外的“BEGIN”,这可能是导致问题的原因

试一试


使用SQL时,我们不会检查数据是否存在,以确保不会添加重复数据。我们尝试插入它,并放置唯一约束。如果记录存在,数据库会告诉我们“不,不,它已经存在了”,就这样

问题的解决方案不是触发器,而是在
项目名称上放置一个
唯一的
索引。由于
item\u name
可能是一个文本列(char、varchar、text),通常的技术是创建一个额外的列,该列将包含
item\u name
散列,并对该列应用唯一索引


剩下的就是利用SQL的MySQL扩展之一,即
INSERT IGNORE
syntax或
INSERT INTO。。。在重复密钥更新时
您的问题将永远得到解决。

之后删除
开始
,然后
。这不是外键约束的作业吗?不是插入部分,而是“检查”部分。然后你的应用程序必须正确插入。请不要在评论中回答。回答或不回答,但如果回答,请在适当的位置进行,以便我们可以对您的贡献进行同行评审。谢谢,这个。OP,审查;那里没有
BEGIN
。那么,你的意思是如果我们想检查数据是否存在,你必须在SQL之外对其进行编码吗?没有。请仔细阅读我的答案两遍。
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 ;