Hinzufügen des Fremdschlüssels auf mehreren Spalten
-
14-11-2019 - |
Frage
Ich versuche, einen Fremdschlüssel auf zwei Spalten einer Tabelle zu erstellen, um auf dieselbe Spalte einer anderen Tabelle zu zeigen, aber ich scheine einen Fehler zu erhalten ...
hier ist was ich tue: generasacodicetagpre.
aber ich bekomme
ERROR 1005 (HY000): Can't create table 'DB.test2' (errno: 150)
Wenn ich nur eine Spalte habe, wird jedoch die Tabelle korrekt erstellt.
Könnte jemand auf mich darauf hinweisen, wo der Fehler ist?
danke n
Lösung
Tried it here and got the same error. This works though:
CREATE TABLE test2 (
ID INT NOT NULL AUTO_INCREMENT,
col1 INT NOT NULL,
col2 INT NOT NULL,
PRIMARY KEY (ID),
CONSTRAINT fk FOREIGN KEY (col1)
REFERENCES test1(ID)
ON UPDATE CASCADE
ON DELETE RESTRICT,
CONSTRAINT fk2 FOREIGN KEY (col2)
REFERENCES test1(ID)
ON UPDATE CASCADE
ON DELETE RESTRICT
) ENGINE=InnoDB
Yes, I know - your script should work (even if it doesn't seem to make much sense). Yet, I guess this new version is better.
Andere Tipps
The problem would appear to be that you are specifying the same parent column twice in the same foreign key (i.e, (ID, ID)). The following should work:
Create Table Test1
(
PK1 int not null
, PK2 int not null
, Primary Key ( PK1, PK2 )
)
Create Table Test2
(
Id int not null Auto_Increment
, PK1 int not null
, PK2 int not null
, Primary Key ( ID )
, Constraint FK_Test2
Foreign Key ( PK1, PK2 )
References Test1( PK1, PK2 )
)
If it is the case, that you want two columns in a child table referencing the same parent table column, then you must add two foreign key references as shown by rsenna as those represent two independent relations.