Sql 无法创建外键:缺少右括号错误
它一直在说缺少右括号,但我看不到缺少任何内容。问题在于结尾处的NOTNULL。以下是表达这一定义的一种方式: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
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表,我注释掉了最后一个约束。