【问题标题】:Oracle foreign key甲骨文外键
【发布时间】:2015-01-18 21:05:45
【问题描述】:

所以我有两张桌子

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);

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

【问题讨论】:

  • 您的 alter table 语句未提及 Boss 表。不能工作。检查文档的语法。
  • @Mat 谢谢回复,你能写出应该怎么写吗,因为我检查过语法,我不明白。
  • 说出您遇到的哪些错误总是有帮助的。正如马特所说,你应该做alter table boss,而不是alter table client。但是你为什么要让字符串b_surname 列引用数字id
  • 我认为他的意思是CLIENT 中的b_surname 列引用BOSS 中同名的列:ALTER TABLE Client ADD CONSTRAINT Boss_Client_fk FOREIGN KEY (B_Surname) REFERENCES boss (b_surname);
  • PRIMARY KEY 的语法也有点奇怪。至少看起来像多余的逗号。

标签: sql oracle alter


【解决方案1】:

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

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);

CLIENTb_surname 中将列命名为surnameBOSS 中有点奇怪。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-05
    • 2011-07-19
    相关资源
    最近更新 更多