【问题标题】:Adding a foreign key to existing table向现有表添加外键
【发布时间】:2018-04-17 20:01:12
【问题描述】:

我一直在尝试将这些键添加到我的表中,但出现错误

ORA-01735: 无效的 ALTER TABLE 选项

我的代码:

ALTER TABLE Room
ADD FOREIGN KEY (RoomType_ID) REFERENCES RoomType(RoomType_ID), 
ADD FOREIGN KEY (Reservation_ID) REFERENCES Reservation(Reservation_ID), 
ADD FOREIGN KEY (Gust_ID) REFERENCES Gust(Gust_ID);

表格

CREATE TABLE Gust ( Gust_ID INT NOT NULL PRIMARY KEY, First_Name VARCHAR(50), Last_Name VARCHAR(50), Email VARCHAR(20), phone_number INT(10), Address VARCHAR(30) )

CREATE TABLE Reservation ( Reservation_ID INT NOT NULL PRIMARY KEY, Start_Date Date, End_Date Date )

CREATE TABLE Room ( Room_ID INT NOT NULL PRIMARY KEY, Price INT )

CREATE TABLE RoomType ( RoomType_ID INT NOT NULL PRIMARY KEY, Class VARCHAR(10), ExtraPrice INT )

【问题讨论】:

  • 您的语法似乎有误,您需要包含 ADD CONSTRAINT 。见底部:techonthenet.com/oracle/foreign_keys/foreign_keys.php
  • 向我们展示您如何创建表 RoomType、Reservation 和 Gust。这些表在您的代码引用的列上必须有一个主键。
  • 我用表格编辑了帖子.. 谢谢

标签: database oracle foreign-keys constraints ddl


【解决方案1】:

ALTER 用于多个 FOREIGN KEYS 的语句不起作用。

每个CONSTRAINT 应单独添加:

CREATE TABLE Gust ( Gust_ID INT PRIMARY KEY, First_Name VARCHAR(50), Last_Name VARCHAR(50), Email VARCHAR(20), phone_number INT, Address VARCHAR(30) );
CREATE TABLE Reservation ( Reservation_ID INT PRIMARY KEY, Start_Date Date, End_Date Date );
CREATE TABLE RoomType ( RoomType_ID INT NOT NULL PRIMARY KEY, Class VARCHAR(10), ExtraPrice INT );

CREATE TABLE Room(Room_ID int PRIMARY KEY, Price INT, Reservation_ID int,Gust_ID int );

ALTER TABLE Room ADD FOREIGN KEY (Room_ID) REFERENCES RoomType(RoomType_ID);

ALTER TABLE Room ADD FOREIGN KEY (Reservation_ID) REFERENCES Reservation(Reservation_ID); 
-- the table Room is assumed to have a column Reservation_ID 

ALTER TABLE Room ADD FOREIGN KEY (Gust_ID) REFERENCES Gust(Gust_ID);
    -- the table Room is assumed to have a column Gust_ID

如果不需要系统生成的约束名称,则使用这些;

ALTER TABLE Room ADD CONSTRAINT fk_RoomType_ID FOREIGN KEY (Room_ID) 
                                               REFERENCES RoomType(RoomType_ID);

ALTER TABLE Room ADD CONSTRAINT fk_Reservation_ID FOREIGN KEY (Reservation_ID) 
                                                REFERENCES Reservation(Reservation_ID); 

ALTER TABLE Room ADD CONSTRAINT fk_Gust_ID FOREIGN KEY (Gust_ID) 
                                           REFERENCES Gust(Gust_ID);

可能是首选。

附: :

  • 不要将NOT NULLPRIMARY KEYPRIMARY KEY 一起使用 包括NOT NULL
  • 无法为INT 列定义长度。

【讨论】:

  • 我收到此错误 "ORA-00904: "ROOMTYPE_ID": invalid identifier"
  • @MissSHOOSH 假设您在 Room 表中有一个名为 ROOMTYPE_ID 的列,我使用了该列。
  • 我必须先更改表才能添加列吗?然后添加 fk?
  • @MissSHOOSH 当然,您应该先添加列。
  • 谢谢!!做到了..我完全忘记了我必须先添加列..再次感谢..
猜你喜欢
  • 2010-12-25
  • 1970-01-01
  • 1970-01-01
  • 2012-04-19
  • 1970-01-01
  • 2014-02-20
  • 1970-01-01
  • 2019-01-11
  • 1970-01-01
相关资源
最近更新 更多