MariaDB 10.3.17中使用UDF创建CHECK约束报错问题
MariaDB 10.3.17 环境下UDF实现CHECK约束报错问题
基本背景
当前运行的数据库版本为MariaDB 10.3.17,计划为已存在的表添加使用用户定义函数(UDF)实现逻辑的约束。参考官方约束相关说明,该用法本应被允许。
预期实现效果:插入、更新表数据时,自动校验同一u_id下的日期区间不存在重叠。
已定义的表结构
CREATE OR REPLACE TABLE real_estate.sample_two_expected_output ( u_id int (9) NOT NULL, first_date date NOT NULL, last_date date NOT NULL, days int AS (DATEDIFF(last_date,first_date)+1), address varchar(50), price varchar(50), --Constraints CONSTRAINT dates CHECK (last_date >= first_date), PRIMARY KEY (u_id,first_date));
自定义UDF代码
DELIMITER // USE real_estate; CREATE OR REPLACE FUNCTION overlap( u_id INT, first_date DATE, last_date DATE ) RETURNS INT DETERMINISTIC BEGIN DECLARE valid INT; SET valid = 1; IF EXISTS(SELECT * FROM real_estate.sample_two_expected_output t WHERE t.u_id = u_id AND first_date <= t.last_date AND t.first_date <= last_date) THEN SET valid = 0; ELSE SET valid = 1; END IF; RETURN valid; END; \\ DELIMITER;
执行的约束添加语句
尝试通过ALTER TABLE语句将上述UDF逻辑作为约束添加到表中,执行语句为:
ALTER TABLE real_estate.sample_two_expected_output ADD CONSTRAINT overlap CHECK(overlap(u_id,first_date,last_date)=1);
报错信息
执行后返回如下错误,暂不清楚报错原因:
EXECUTE FAIL: ALTER TABLE real_estate.sample_two_expected_output ADD CONSTRAINT overlap CHECK(overlap(u_id,first_date,last_date)=1); Message : Function or expression '`overlap`()' cannot be used in the CHECK clause of `overlap`
内容的提问来源于stack exchange,提问作者Wilze
相关产品推荐
相关产品推荐

