想实现RESERVATIONS表的resvKey
的值对应 FLIGHTS / HOTELS / BUS 表的一个主键值,用来表示预约的航班号/车号/宾馆号。但写的sql一直报check有错误
# 创建预定表
create table RESERVATIONS(
resvNum char(5) primary key,
custID char(5) not null,
resvType int check(resvType in (1, 2, 3)),
resvKey char(5) check(
resvKey in (
select flightNum from FLIGHTS
union select hotelNum from HOTELS
union select BusNum from BUS
)
),
foreign key (custID) references CUSTOMERS(custID)
) CHARSET=utf8;
[Start] Executing MySQL query
undefined
Error: UNKNOWN_CODE_PLEASE_REPORT: An expression of a check constraint 'reservations_chk_2' contains disallowed function.
[Done] Finished MySQL query.
请问应该怎么修改呀
1、query undefined --查询无法定义
2、UNKNOWN_CODE_PLEASE_REPORT --未知代码请重试
3、An expression of a check constraint 'reservations_chk_2' --检查'reservation_chk_2'这个约束的表达式
4、contains disallowed function --包含不允许的功能。
题主的问题是resvKey的值约束在三张表主键,但是约束不允许使用子查询,因为子查询得出的值不一定是完全一致的,这样无法作为约束条件,举个例子,如果这个约束可以创建成功,但是我后面在这三张表中修改了数据,那么约束是要满足之前的条件还是修改之后的条件呢?这个数据库无法判断,所以check in的约束条件只能是明确的值,而不能是三个sql进行的union