Oracle中的外键创建

时间:2014-04-24 06:24:19

标签: sql oracle

我尝试创建外键和PRIMARY KEY

我的代码可以使用Table1

CREATE TABLE Persons
(
P_Id int NOT NULL PRIMARY KEY,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
);

Table2

CREATE TABLE Orders
(
O_Id int NOT NULL PRIMARY KEY,
OrderNo int(10),
P_Id int FOREIGN KEY REFERENCES Persons(P_Id)
);

错误:-ORA-00907:缺少右括号

不知道错误是什么。

3 个答案:

答案 0 :(得分:2)

当您声明FK"内联"您不得指定foreign key关键字:

CREATE TABLE Orders
(
  O_Id int NOT NULL PRIMARY KEY,
  OrderNo int(10),
  P_Id int REFERENCES Persons(P_Id)
);

顺便说一句:在使用内联定义时,您甚至不需要列出列名,P_Id int REFERENCES Persons就足够了。

这将生成一个以系统命名的约束(例如SYS_C0066866),因此通常最好使用可以指定约束名称的格式:

CREATE TABLE Orders
(
  O_Id int NOT NULL PRIMARY KEY,
  OrderNo int(10),
  P_Id int,
  constraint fk_orders_person foreign key (p_id) REFERENCES Persons(P_Id)
);

答案 1 :(得分:0)

如果您在列的定义中内联外键定义,则不需要foreign key短语:

CREATE TABLE Orders
(
O_Id int NOT NULL PRIMARY KEY,
OrderNo int(10),
P_Id int REFERENCES Persons(P_Id)
);

答案 2 :(得分:0)

对于MySql

CREATE TABLE Orders
(
O_Id int NOT NULL PRIMARY KEY,
OrderNo int(10),
P_Id int,
FOREIGN KEY(P_Id) REFERENCES Persons(P_Id)
);

对于SQL

 CREATE TABLE Orders
    (
    O_Id int NOT NULL PRIMARY KEY,
    OrderNo int(10),
    P_Id int FOREIGN KEY REFERENCES Persons(P_Id)
    );

Check Manual