sql:在cmd中创建表

时间:2015-07-20 00:46:47

标签: sql oracle

SQL> create table reservation(
           reservationid varchar2(6) primary key,
           userid varchar2(6) references userprofile(userid),
           vehicleid varchar2(6) references vehicle(vehicleid),
           routeid varchar2(8) references route(routeid),
           bookingdate date not null,
           journeydate date not null,
           driverid varchar2(6) references driver(driverid),
           bookingstatus varchar2(20) not null,
           totalfare number(10) not null,
           boardingpoint varchar2(30) not null,
           droppoint varchar2(30) not null,
           vname varchar2(20) not null
);

我收到一个错误:                                           * 第1行的错误:

  

ORA-02270:此列列表没有匹配的唯一键或主键

1 个答案:

答案 0 :(得分:1)

错误很清楚。您的一个外键引用指向另一个表中既不是主键也不唯一的列。

因此请检查以下内容,表/列,并确保它们是主键,或者它们至少具有在其上定义的唯一约束:

  • userprofile.userid
  • vehicle.vehicleid
  • route.routeid
  • driver.driverid

因此,例如,以下简单示例失败,并且完全出现了错误:

create table groups (
  group_id number(10) not null -- not a pk or unique key.
)
/

create table users (
  user_id number(10) not null primary key,
  group_id number(10) references groups(group_id) -- this causes an error.
)
/

演示:SQLFiddle。

嗯,无法获得到有错误的架构的正确SQLFiddle链接。我得到的错误就像你的错误:

  

ORA-02270:此列列表没有匹配的唯一键或主键

使groups.group_id成为主键,修复错误:

create table groups (
  group_id number(10) not null primary key
)
/

create table users (
  user_id number(10) not null primary key,
  group_id number(10) references groups(group_id)
)
/

演示:SQLFiddle

使groups.group_id成为唯一键也可以修复错误:

create table groups (
  group_id number(10) not null unique
)
/

create table users (
  user_id number(10) not null primary key,
  group_id number(10) references groups(group_id)
)
/

演示:SQLFiddle

编辑:关于外键约束语法

OP使用的外键约束语法是有效的,并在此处记录: