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

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 把VMware项目复制到另一台电脑
  • ¥15 onlyoffice编辑完后立即下载,下载的不是最新编辑的文档
  • ¥15 求caverdock使用教程
  • ¥15 Coze智能助手搭建过程中的问题请教
  • ¥15 12864只亮屏 不显示汉字
  • ¥20 三极管1000倍放大电路
  • ¥15 vscode报错如何解决
  • ¥15 前端vue CryptoJS Aes CBC加密后端java解密
  • ¥15 python随机森林对两个excel表格读取,shap报错
  • ¥15 基于STM32心率血氧监测(OLED显示)相关代码运行成功后烧录成功OLED显示屏不显示的原因是什么