mysql - SQL 参照完整性触发器
问题描述
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;
这是我的触发代码,但有一些语法错误。我不知道错误是什么?
解决方案
您可以将计数存储在变量中并检查值,而不是使用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;
推荐阅读
- python - 如何在 Python 中使用 json.loads 获取文本
- eiffel - 对象创建和函数结果的埃菲尔最短语句
- nlp - 使用 Tiger 语料库的德语动词词形还原
- html - 在悬停css上显示下拉菜单
- ios - 如何在 IOS 客户端自定义 Firebase 推送通知消息
- c++ - 如何在编译时“迭代”模板列表?
- node.js - 在 Node JS 中将函数的结果传递给 server.js
- laravel - laravel-5.7:数据未保存到数据库中,找不到对象
- android - 我想将互联网上的图像从主要活动显示到另一个活动?
- c# - Mongo c# ReplaceOne 和 FindOneAndReplace