没有与此列列表匹配的唯一键或主键:SQL
我正在使用SQL,并且遇到了错误ORA-02270。没有与此列列表匹配的唯一键或主键:SQL
SQL> drop table employee;
Table dropped.
SQL> Create Table Employee(
age varchar(2),
gender char(1),
employee_no char(6),
references worksite(employee_no),
Primary Key(age, gender)
);
Table created.
SQL> Create Table Employee_type(
age varchar(2)
references Employee(age),
gender char(1)
references Employee(gender),
employee_type Varchar(12),
Primary Key (age, gender, employee_type)
);
ERROR at line 3:
ORA-02270: no matching unique or primary key for this column-list.
我已阅读其他帖子,但我仍然不明白这个错误?我认为这可能是因为我有一个组合键,但我引用组合键的所有列。
我想你打算使用“复合”外键约束,它具有以下语法。
CREATE TABLE Employee_type(
age varchar(2),
gender char(1),
employee_type Varchar(12),
PRIMARY KEY (age, gender, employee_type),
CONSTRAINT fk_employee FOREIGN KEY(age,gender) REFERENCES Employee(age,gender)
);
这可以让你从你的表中的多个领域,并与另一个表匹配的字段连接两个(一起)。
手段正是它说......在:-)
一些模糊的方式在this page MySQL的医生说:
建议您使用只引用键外键是 都UNIQUE(或PRIMARY)和NOT NULL。
换句话说,当您编写age varchar(2) references Employee(age)
时,必须将Employee(年龄)定义为UNIQUE或PRIMARY KEY。
员工(性别)会相同。
我以为这就是我所做的,将它声明为主键,还是因为它是一个复合键,所以年龄实际上不是主键,而是年龄和性别的组合是一个复合键? – sudobangbang 2015-04-05 22:50:32
我如何将年龄/性别定义为独特?即时通讯新的SQL语法? – sudobangbang 2015-04-05 22:54:22
CONSTRAINT uc_gender UNIQUE(年龄,性别) – sudobangbang 2015-04-05 22:55:42
您应该使用CONSTRAINT来设置复合外键。 我希望它适合你。
CREATE TABLE Employee_type(
age varchar(2),
gender char(1),
employee_type Varchar(12),
PRIMARY KEY (age, gender, employee_type),
CONSTRAINT fk_employee_age_gender FOREIGN KEY(age,gender)
REFERENCES Employee(age,gender)
);
@Farhęg,谢谢,你能给我一个我需要做什么来定义一个唯一约束的例子吗?我是新来的SQL,我不完全确定我完全理解!感谢您的快速答复! – sudobangbang 2015-04-05 22:34:05
uhm,这是为mysql,sql-server和oracle吗? – Mackan 2015-04-05 22:43:57
没有抱歉,只是SQL,我一定有意外点击了建议,生病的修复 – sudobangbang 2015-04-05 22:44:26