Die zusammengesetzten Fremdschlüsselindizes funktionieren nicht so, wie ich dachte. Im folgenden Beispiel möchte ich nur die 10 Kombinationen in der untergeordneten Tabelle erlaubt sein. Die letzte INSERT-Anweisung ist jedoch erfolgreich, auch wenn in der übergeordneten Tabelle keine passende Kombination vorhanden ist. Gibt es eine andere Möglichkeit, diese Art von Einschränkung zu erreichen?Zusammengesetzte Fremdschlüsseleinschränkung
drop table if exists child;
drop table if exists parent;
CREATE TABLE parent(
`ID` int(11) default NULL,
`name` varchar(100) default NULL,
`city` varchar(100) default NULL,
key (name,city),
key (ID)
) ENGINE=InnoDB;
create table child(
userID int not null,
`name` varchar(100) default NULL,
`city` varchar(100) default NULL,
key (name,city),
FOREIGN KEY (name,city) REFERENCES parent(name,city),
primary key (userID)
) ENGINE=InnoDB;
insert into parent values (1, 'Amar', 'mumbai');
insert into parent values (2, 'Amar', 'Delhi');
insert into parent values (3, 'Amar', NULL);
insert into parent values (4, 'Akbar', 'mumbai');
insert into parent values (5, 'Akbar', 'Delhi');
insert into parent values (6, 'Akbar', NULL);
insert into parent values (7, 'Anthony', 'mumbai');
insert into parent values (8, 'Anthony', 'Delhi');
insert into parent values (9, 'Anthony', NULL);
insert into parent values (10, NULL, NULL);
insert into child values (2, NULL, 'mumbai');