我的MYSQL有问题。我有一个表格"筛选",包括scrreningID(PK(、movieID(FK(和roomID(FK(。我想检查一下,如果电影是3d的,房间可以播放3d,插入功能可以执行。否则,如果电影不是3d,房间可以播放3d,则无法进行插入。
我试图更改我的tabla并添加一个Check约束。我为Check约束创建了一个函数。然而,它总是得到错误
这是我的功能代码:
CREATE DEFINER=`root`@`localhost` FUNCTION `is3d`(mov int, roo int) RETURNS int(11)
READS SQL DATA
DETERMINISTIC
BEGIN
declare movie_3d integer;
declare room_3d integer;
select is3d into movie_3d from movie where movieID = mov;
select canplay3d into room_3d from room_auditorium where roomID = roo;
if (movie_3d = 1 && room_3d =1) then
RETURN 1;
else
return 0;
end if;
END
该功能是成功的,并且运行良好。但当我将其添加到检查约束时
alterter table screening_show add constraint
checkisthreedy check (is3d(movieID, roomID) = 1)
它总是显示一个错误:
错误代码:3814。检查约束xontraintname的表达式包含不允许的函数:CustomerLevel
。
我也尝试制作基本函数,但当我将其用于Check约束时,结果仍然相同。
我遇到了同样的问题,当我查看MYSQL用户手册时,我发现了这一点。
CHECK条件表达式必须遵守以下规则。如果表达式包含不允许的构造,则会发生错误。
- 不允许使用存储函数和用户定义函数
- 不允许使用存储过程和函数参数
您可以在THIS LINK 上查阅更多关于检查约束的信息
解决这个问题的唯一方法是手动调用函数,如下所示:
insert into table_name (a, b, с)
select 1, 2, 3
where is3d(1, 1) = 1