Sql Oracle DB无法创建显示“的表”;ORA-02270:此列列表没有匹配的唯一或主键“;
我试图在ORACLE中创建带有外键和主键的表,但它显示了一个错误。 " 外键(分行ID)引用银行分行(分行ID), * 第10行出错: ORA-02270:此列列表没有匹配的唯一键或主键Sql Oracle DB无法创建显示“的表”;ORA-02270:此列列表没有匹配的唯一或主键“;,sql,oracle,Sql,Oracle,我试图在ORACLE中创建带有外键和主键的表,但它显示了一个错误。 " 外键(分行ID)引用银行分行(分行ID), * 第10行出错: ORA-02270:此列列表没有匹配的唯一键或主键 FOREIGN KEY(Branch_ID) REFERENCES Bank_Branchs(Branch_ID) * 第10行出错: ORA-02270:此列列表没有匹配的唯一键或主键 " 我不知道
FOREIGN KEY(Branch_ID) REFERENCES Bank_Branchs(Branch_ID)
*
第10行出错:
ORA-02270:此列列表没有匹配的唯一键或主键
"
我不知道错误的原因是什么。请看一下我的sql代码
drop table Employees;
drop table Bank_Branchs;
drop table Departments;
drop table Job_Titles;
drop table Accounts;
CREATE TABLE Bank_Branchs(
Branch_ID NUMBER(15) NOT NULL,
Branch_Name VARCHAR2(15),
Country VARCHAR2(35),
City VARCHAR2(35),
Phone VARCHAR2(15),
Manager_ID NUMBER(7) NOT NULL,
PRIMARY KEY (Branch_ID,Manager_ID)
);
CREATE TABLE Departments(
Dept_ID CHAR(3) NOT NULL,
Dept_Name VARCHAR2(25),
Head_of_Dept NUMBER(7),
PRIMARY KEY(Dept_ID)
);
CREATE TABLE Job_Titles(
Title_ID CHAR(3)NOT NULL,
Title_Name VARCHAR2(25),
Title_Desc VARCHAR2(250),
PRIMARY KEY(Title_ID)
);
CREATE TABLE Employees
(Emp_ID NUMBER(7) NOT NULL,
Branch_ID NUMBER(15) NOT NULL,
Title_ID CHAR(3),
Department_ID CHAR(3),
Manager_ID NUMBER(7),
Salary NUMBER(9),
Hourly_Rate NUMBER(9),
PRIMARY KEY(Emp_ID),
FOREIGN KEY(Branch_ID) REFERENCES Bank_Branchs(Branch_ID),
FOREIGN KEY(Title_ID) REFERENCES Job_Titles (Title_ID),
FOREIGN KEY(Department_ID) REFERENCES Departments (Dept_ID),
FOREIGN KEY(Manager_ID) REFERENCES Bank_Branchs (Manager_ID)
);
CREATE TABLE Accounts(
Account_ID NUMBER(7) NOT NULL,
Branch_ID NUMBER(15) NOT NULL,
Customer_ID NUMBER(7),
Acc_Type char(2),
Balance NUMBER(38),
Rate NUMBER(9),
Status VARCHAR(15),
PRIMARY KEY(Account_ID),
FOREIGN KEY(Branch_ID) REFERENCES Bank_Branchs(Branch_ID)
);
我尝试使用start I:/SQLNAME.sql运行此命令,sql命令行显示错误。已测试。。。这会起作用,但请阅读下面的内容
CREATE TABLE Bank_Branchs(
Branch_ID NUMBER(15) NOT NULL,
Branch_Name VARCHAR2(15),
Country VARCHAR2(35),
City VARCHAR2(35),
Phone VARCHAR2(15),
Manager_ID NUMBER(7) NOT NULL,
PRIMARY KEY (Branch_ID,Manager_ID)
);
CREATE TABLE Departments(
Dept_ID CHAR(3) NOT NULL,
Dept_Name VARCHAR2(25),
Head_of_Dept NUMBER(7),
PRIMARY KEY(Dept_ID)
);
CREATE TABLE Job_Titles(
Title_ID CHAR(3)NOT NULL,
Title_Name VARCHAR2(25),
Title_Desc VARCHAR2(250),
PRIMARY KEY(Title_ID)
);
CREATE TABLE Employees
(Emp_ID NUMBER(7) NOT NULL,
Branch_ID NUMBER(15) NOT NULL,
Title_ID CHAR(3),
Department_ID CHAR(3),
Manager_ID NUMBER(7),
Salary NUMBER(9),
Hourly_Rate NUMBER(9),
PRIMARY KEY(Emp_ID),
FOREIGN KEY(Branch_ID, Manager_ID) REFERENCES Bank_Branchs(Branch_ID, Manager_ID),
FOREIGN KEY(Title_ID) REFERENCES Job_Titles (Title_ID),
FOREIGN KEY(Department_ID) REFERENCES Departments (Dept_ID)
);
似乎经理id对应于员工id。。。
看起来他们可能是一家银行分行的不止一名经理。。
基本上,我认为应该从银行分支机构中删除经理id,而应该创建经理id:
create table bank_branch_managers(
branch_id number(14),
manager_id number(7),
effective_date date,
activity_date date,
PRIMARY KEY (branch_id, manager_id),
FOREIGN KEY (branch_id) REFERENCES Bank_Branches(Brand_id),
FOREIGN KEY (manager_id) REFERENCED Employees( Emp_id)
);
但是您需要调整“Employees”的设置,可能还需要为经理添加一个表。外键约束必须仅链接到另一个表中的主键约束;也可以将其定义为引用另一个表中唯一约束的列 在bank_branchs表中,您创建了一个复合主键,即包含多个列的主键
PRIMARY KEY (Branch_ID,Manager_ID)
此语句不会将Brach_ID和Manager_ID作为主键,而是将它们的组合作为主键。由于外键只能引用主键或具有唯一约束的列,因此会抛出错误
尝试在这两列上添加唯一约束
CREATE TABLE Bank_Branchs(
Branch_ID NUMBER(15) UNIQUE NOT NULL,
Branch_Name VARCHAR2(15),
Country VARCHAR2(35),
City VARCHAR2(35),
Phone VARCHAR2(15),
Manager_ID NUMBER(7) UNIQUE NOT NULL,
PRIMARY KEY (Branch_ID,Manager_ID)
))
这可能会解决您的问题。谢谢您的评论和帮助