gdx快去学习 2022-05-02 17:22 采纳率: 100%
浏览 208
已结题

MySql中check约束的语法问题

问题遇到的现象和发生背景

想实现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条回答 默认 最新

  • xtasce2012 2022-05-03 00:37
    关注

    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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 5月11日
  • 已采纳回答 5月3日
  • 创建了问题 5月2日

悬赏问题

  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记