【问题标题】:How do i write a trigger in mysql to check for duplicate records before inserting如何在mysql中编写触发器以在插入之前检查重复记录
【发布时间】:2016-09-02 03:48:32
【问题描述】:

用户(ID、公司、名称)

这是我的表格架构。在插入新行之前,我应该如何编写触发器来检查重复项。我需要检查传入的数据是否与传入的记录重复。如果传入记录存在,则不应将该记录插入到表中。如果它不重复该记录应该插入!

下面是我尝试过的触发器,但它在“最后”行出现错误

DELIMITER $$
CREATE TRIGGER userDuplicate 
BEFORE INSERT ON `users` FOR EACH ROW

BEGIN
    DECLARE recordId VARCHAR(999);

    SET recordId = (SELECT id FROM users WHERE company= NEW.companyAND name = NEW.name);

    IF recordId IS NOT NULL
    THEN
        INSERT INTO users (company,name) VALUES (NEW.name,NEW.company);
    END IF;
END;
$$ DELIMITER;

【问题讨论】:

  • 您是否尝试过创建唯一索引? stackoverflow.com/questions/635937/…
  • 是的!但我需要实现一个触发器。
  • 您需要触发器还是只插入不重复的记录而不会出错?
  • 我需要一个触发器来插入任何不重复且不抛出任何异常或错误的行

标签: mysql sql database triggers relational-database


【解决方案1】:

根据此处接受的答案:How to abort INSERT operation in MySql trigger? 你不能让 MySQL 触发器取消INSERT。在 PostgreSQL 上很容易(BEFORE INSERT 触发器只返回 NULL),但 MySQL 无法处理。

不过,您可以发送INSERT IGNORE

INSERT IGNORE INTO users (company, name) 
VALUES ('ABC','DEF');

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多