Sql 无法创建外键:缺少右括号错误

Sql 无法创建外键:缺少右括号错误,sql,oracle,ddl,Sql,Oracle,Ddl,它一直在说缺少右括号,但我看不到缺少任何内容。问题在于结尾处的NOTNULL。以下是表达这一定义的一种方式: CREATE TABLE hotel_reservation( hotel_code VARCHAR2(5), room_type VARCHAR2(75), CONSTRAINT check_room_type CHECK(room_type LIKE 'DELUXE' or room_type LIKE 'SUPERIOR' or room_type LIKE 'M

它一直在说缺少右括号,但我看不到缺少任何内容。

问题在于结尾处的NOTNULL。以下是表达这一定义的一种方式:

CREATE TABLE hotel_reservation(
    hotel_code VARCHAR2(5),
    room_type  VARCHAR2(75), CONSTRAINT check_room_type CHECK(room_type LIKE 'DELUXE' or room_type LIKE 'SUPERIOR' or room_type LIKE 'MASTERS SUITE') NOT NULL, 
    room_id number(3), CONSTRAINT fk_room_id FOREIGN KEY(room_id) REFERENCES rooms(room_id) NOT NULL
);
我还将第一个检查约束更改为在中使用,而不是在ors中使用。

问题在于最后的NOTNULL。以下是表达这一定义的一种方式:

CREATE TABLE hotel_reservation(
    hotel_code VARCHAR2(5),
    room_type  VARCHAR2(75), CONSTRAINT check_room_type CHECK(room_type LIKE 'DELUXE' or room_type LIKE 'SUPERIOR' or room_type LIKE 'MASTERS SUITE') NOT NULL, 
    room_id number(3), CONSTRAINT fk_room_id FOREIGN KEY(room_id) REFERENCES rooms(room_id) NOT NULL
);

我还将第一个检查约束更改为在中使用,而不是在ors中使用。

我更喜欢将约束保持在行外,或者-也许/有时甚至更好-保持在CREATE TABLE脚本之外。为什么?如果有必要,可以更容易地重新创建它们

一种选择:

CREATE TABLE hotel_reservation (
    hotel_code VARCHAR2(5),
    room_type  VARCHAR2(75)  NOT NULL,
    CONSTRAINT check_room_type CHECK (room_type in ('DELUXE', 'SUPERIOR', 'MASTERS SUITE')), 
    room_id number(3) NOT NULL,
    CONSTRAINT fk_room_id FOREIGN KEY (room_id) REFERENCES rooms(room_id)
);
还有一个:

CREATE TABLE hotel_reservation
(
   hotel_code   VARCHAR2 (5),
   room_type    VARCHAR2 (75) NOT NULL,
   room_id      NUMBER (3) NOT NULL,
   --
   CONSTRAINT check_room_type CHECK
      (   room_type LIKE 'DELUXE'
       OR room_type LIKE 'SUPERIOR'
       OR room_type LIKE 'MASTERS SUITE'),
   CONSTRAINT fk_room_id FOREIGN KEY (room_id) REFERENCES rooms (room_id)
);

我更喜欢将约束保持在行外,或者-也许/有时甚至更好-保持在createtable脚本之外。为什么?如果有必要,可以更容易地重新创建它们

一种选择:

CREATE TABLE hotel_reservation (
    hotel_code VARCHAR2(5),
    room_type  VARCHAR2(75)  NOT NULL,
    CONSTRAINT check_room_type CHECK (room_type in ('DELUXE', 'SUPERIOR', 'MASTERS SUITE')), 
    room_id number(3) NOT NULL,
    CONSTRAINT fk_room_id FOREIGN KEY (room_id) REFERENCES rooms(room_id)
);
还有一个:

CREATE TABLE hotel_reservation
(
   hotel_code   VARCHAR2 (5),
   room_type    VARCHAR2 (75) NOT NULL,
   room_id      NUMBER (3) NOT NULL,
   --
   CONSTRAINT check_room_type CHECK
      (   room_type LIKE 'DELUXE'
       OR room_type LIKE 'SUPERIOR'
       OR room_type LIKE 'MASTERS SUITE'),
   CONSTRAINT fk_room_id FOREIGN KEY (room_id) REFERENCES rooms (room_id)
);

我更喜欢与列内联的单列约束,因为它是一种更紧凑的语法,而且您还可以让子表从父表继承其数据类型

CREATE TABLE hotel_reservation
(
   hotel_code   VARCHAR2 (5),
   room_type    VARCHAR2 (75) NOT NULL,
   room_id      NUMBER (3) NOT NULL
);

ALTER TABLE hotel_reservation ADD
  CONSTRAINT check_room_type CHECK
      (   room_type LIKE 'DELUXE'
       OR room_type LIKE 'SUPERIOR'
       OR room_type LIKE 'MASTERS SUITE');

ALTER TABLE hotel_reservation ADD
  CONSTRAINT fk_room_id FOREIGN KEY (room_id) 
  REFERENCES rooms (room_id);

注意hotel_reservation.room_id从rooms.room_id继承其数据类型。

我更喜欢与列内联的单列约束,因为它是一种更紧凑的语法,而且您还可以让子表从父表继承其数据类型

CREATE TABLE hotel_reservation
(
   hotel_code   VARCHAR2 (5),
   room_type    VARCHAR2 (75) NOT NULL,
   room_id      NUMBER (3) NOT NULL
);

ALTER TABLE hotel_reservation ADD
  CONSTRAINT check_room_type CHECK
      (   room_type LIKE 'DELUXE'
       OR room_type LIKE 'SUPERIOR'
       OR room_type LIKE 'MASTERS SUITE');

ALTER TABLE hotel_reservation ADD
  CONSTRAINT fk_room_id FOREIGN KEY (room_id) 
  REFERENCES rooms (room_id);

注意hotel_reservation.room_id从rooms.room_id继承其数据类型。

创建表hotel_reservation 瓦查5号酒店, 房间类型为VARCHAR75

房间id整数, 约束fk_房间id外部钥匙室id引用房间房间id, 约束检查\u房间\u类型检查 房间类型如“豪华” 或房间类型,如“高级” 或者像“主人套房”这样的房间类型 ;


NOT Null用于定义列。不受限制

创建表酒店预订 瓦查5号酒店, 房间类型为VARCHAR75

房间id整数, 约束fk_房间id外部钥匙室id引用房间房间id, 约束检查\u房间\u类型检查 房间类型如“豪华” 或房间类型,如“高级” 或者像“主人套房”这样的房间类型 ;


NOT Null用于定义列。不适用于约束

将Not NULL从fk定义移动到列定义。将Not NULL从fk定义移动到列定义。感谢您UUU无论如何,您忘记了Not NULL hehe,但无论如何,谢谢:@AedanWulf。这是因为我实际上测试了代码,但没有rooms表,我注释掉了最后一个约束。谢谢你UUU无论如何你忘了,在不是空的hehe但是无论如何谢谢:@AedanWulf。这是因为我实际上测试了代码,但是没有rooms表,我注释掉了最后一个约束。