MySQL插入查询如果条件匹配在插入触发器之后

Posted

技术标签:

【中文标题】MySQL插入查询如果条件匹配在插入触发器之后【英文标题】:MySQL insert query if condition matches in after insert trigger 【发布时间】:2016-07-13 19:16:00 【问题描述】:

我正在使用带有 mysql 版本:5.7.9 和 phpMyAdmmin 版本:4.5.2 的 WampServer

我正在尝试在 Table1 上编写一个插入后触发器,以便在 Table2 中不存在数据时在 Table2 中插入数据。以下是我的查询:

DROP TRIGGER IF EXISTS `insert_customer`;
CREATE TRIGGER `insert_customer` AFTER INSERT ON `installations`
FOR EACH ROW BEGIN
    IF (SELECT COUNT(*) FROM `customers` WHERE `customers`.`phone` = NEW.`phone`) = 0
    THEN INSERT INTO `customers` (`phone`, `imei`, `platform`, `version_code`) VALUES (NEW.`phone`, NEW.`imei`, NEW.`platform`, NEW.`version_code`);
    END IF;
END;

这给了我以下错误:

#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 '' at line 4

我也尝试过使用分隔符:

DROP TRIGGER IF EXISTS `insert_customer`;
DELIMITER |
CREATE TRIGGER `insert_customer` AFTER INSERT ON `installations`
FOR EACH ROW BEGIN
    IF (SELECT COUNT(*) FROM `customers` WHERE `customers`.`phone` = NEW.`phone`) = 0
    THEN INSERT INTO `customers` (`phone`, `imei`, `platform`, `version_code`) VALUES (NEW.`phone`, NEW.`imei`, NEW.`platform`, NEW.`version_code`)
    END IF;
END;
|
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 'END IF;
END' at line 5

我在这里做错了什么?有什么帮助吗?

【问题讨论】:

而他们给出的错误是......? 【参考方案1】:

我的猜测是额外的分隔符;尝试改变

END;
|

END|

【讨论】:

即使在应用您的建议后仍然会遇到相同的错误。 :(【参考方案2】:

我终于明白了。正确的 SQL 是:

DROP TRIGGER IF EXISTS `insert_customer`;
DELIMITER |
CREATE TRIGGER `insert_customer` AFTER INSERT ON `installations`
FOR EACH ROW BEGIN
    IF (SELECT COUNT(*) FROM `customers` WHERE `customers`.`phone` = NEW.`phone`) = 0 THEN
        INSERT INTO `customers` (`phone`, `imei`, `platform`, `version_code`) VALUES (NEW.`phone`, NEW.`imei`, NEW.`platform`, NEW.`version_code`);
    END IF;
END;|
DELIMITER ;

;在我的 INSERT 查询结束时解决了我的问题。 :D

【讨论】:

以上是关于MySQL插入查询如果条件匹配在插入触发器之后的主要内容,如果未能解决你的问题,请参考以下文章

MySQL触发器将日期插入具有唯一匹配ID的行

(10)MySQL触发器(同时操作两张表)

插入后的MySQL触发器

SQL AFTER 插入更新触发器

mysql内置功能—触发器

MySQL触发器更新和插入操作