Oracle外键

时间:2015-01-18 21:05:45

标签: sql oracle alter

所以我有两张桌子

CREATE TABLE Client(
ID NUMBER(10) NOT NULL, (PRIMARY KEY)
Name VARCHAR(30) NOT NULL,
Surname VARCHAR(30) NOT NULL,
Phone NUMBER(11) NOT NULL,
Email VARCHAR(70));

CREATE TABLE Boss(
B_Surname VARCHAR(30) NOT NULL, (PRIMARY KEY)
B_Name VARCHAR(30) NOT NULL);

我需要将外键(来自Boss表的B_surname)放到Client表中。我尝试过使用ALTER TABLE:

ALTER TABLE Client ADD CONSTRAINT Boss_Client_fk FOREIGN KEY (B_Surname) REFERENCES Client(ID);

之后我得到了错误。 谢谢你的帮助。

1 个答案:

答案 0 :(得分:1)

我想你想要以下内容。请注意,您可能应该在Oracle中使用VARCHAR2而不是VARCHAR。它们目前的工作方式相同,但Oracle可能会更改VARCHAR的功能,使其符合ANSI标准(其中空字符串''与{{1}区别开来} ...但我离题了):

NULL

然后:

CREATE TABLE client
( id NUMBER(10) NOT NULL PRIMARY KEY
, name VARCHAR2(30) NOT NULL
, surname VARCHAR2(30) NOT NULL
, phone NUMBER(11) NOT NULL
, email VARCHAR2(70) );

CREATE TABLE boss
( b_surname VARCHAR2(30) NOT NULL PRIMARY KEY
, b_Name VARCHAR2(30) NOT NULL );

有点奇怪的是,该列在ALTER TABLE client ADD CONSTRAINT boss_client_fk FOREIGN KEY (surname) REFERENCES boss (b_surname); 中的surnameCLIENT中的b_surname

如果您希望BOSS中的b_surname引用BOSS中的surname - 那么您需要将CLIENT作为主键,或者至少唯一的。