【问题标题】:SQL Referential Integrity TriggerSQL 参照完整性触发器
【发布时间】:2019-07-30 07:44:48
【问题描述】:

CREATE TRIGGER FK_INTEGRITY_CHECK BEFORE INSERT ON sch_book_list FOR EACH ROW BEGIN SELECT CASE WHEN ((SELECT resource_cd FROM sch_resource WHERE resource_cd = NEW.resource_cd) IS NULL) THEN RAISE(ABORT, 'insert on table "sch_book_list" violates foreign key '|| 'constraint "FK9qti8knho9i047jd1lrwqwy2x"') END END;

这是我的触发代码,但有一些语法错误。不知道是什么错误?

【问题讨论】:

  • RAISE() 的功能是什么? MySQL 没有它.. MySQL 也不支持|| string concat 除非启用所以我非常怀疑你在这里使用 MySQL。

标签: mysql sql triggers database-trigger


【解决方案1】:

您可以将计数存储在变量中并检查值,而不是使用CASE,例如:

CREATE TRIGGER FK_INTEGRITY_CHECK
BEFORE INSERT ON sch_book_list
FOR EACH ROW BEGIN 
    DECLARE row_count INT;
    SET row_count = (SELECT COUNT(*) FROM sch_resource WHERE resource_cd = NEW.resource_cd)
    IF (row_count = 0) THEN
      RAISE(ABORT, 'insert on table "sch_book_list" violates foreign key '|| 'constraint "FK9qti8knho9i047jd1lrwqwy2x"');
    END IF;
END;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-17
    相关资源
    最近更新 更多