【问题标题】:SQL Trigger: Inserting a row in a table after an insert on another table, if a given value doesn't already exist in the first tableSQL触发器:如果第一个表中不存在给定值,则在另一个表上插入后在表中插入一行
【发布时间】:2015-05-09 19:06:44
【问题描述】:

正如标题所说,我试图在一个表中插入一行,在插入另一个表后触发,但前提是第一个表中不存在给定值。

例子:

我有一张表,countries,用于存储国家/地区及其 ID:

国家

id   country 
1    England 
2    France  
...  ...    

我有另一个表,events,它存储有关事件的信息,如下所示:

活动

id  timestamp   city    country
1   13435636    London  England
2   45635742    Paris   France
... ... ... ...

我想要做的:创建一个触发器,以便在 events 表上插入后,在 countries 表中插入一个新行,其中包含事件所在的国家/地区发生在,但前提是 countries 表中尚不存在该国家/地区。

我尝试过的:

CREATE TRIGGER Update
AFTER INSERT ON events FOR EACH ROW
    INSERT INTO countries (country) VALUES (New.country)
    WHERE NOT EXISTS (SELECT country FROM countries WHERE country = New.country)

CREATE TRIGGER Update
AFTER INSERT ON events FOR EACH ROW
    IF NOT EXISTS (SELECT country FROM countries WHERE country = New.country)
    BEGIN
        INSERT INTO countries (country) VALUES (New.country)
    END

CREATE TRIGGER Update
AFTER INSERT ON events FOR EACH ROW
    IF NOT EXISTS (SELECT country FROM countries WHERE country = New.country)
        INSERT INTO countries (country) VALUES (New.country)

除了一些其他变体,我得到的只是语法错误(错误 #1064)。

【问题讨论】:

    标签: mysql sql database triggers sql-insert


    【解决方案1】:

    试试这个

        CREATE TRIGGER Update
        AFTER INSERT ON events FOR EACH ROW
        BEGIN
            INSERT INTO countries (country) VALUES (New.country)
            WHERE New.country NOT IN (SELECT country FROM countries)
       END
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-25
      • 1970-01-01
      • 1970-01-01
      • 2019-01-11
      • 1970-01-01
      相关资源
      最近更新 更多