J'utilise MySQL 5 pour essayer de créer deux tables. Voici les deux tableaux:Pourquoi MySQL n'autorise pas cette clé étrangère?
DROP TABLE IF EXISTS `users` ;
CREATE TABLE IF NOT EXISTS `users` (
`username` VARCHAR(50) not null ,
`password` VARCHAR(50) not null,
`enabled` boolean not null,
`accountNonExpired` boolean not null,
`accountNonLocked` boolean not null,
`credentialsNonExpired` boolean not null,
PRIMARY KEY (`username`)
) ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8;
DROP TABLE IF EXISTS `authorities` ;
create table IF NOT EXISTS `authorities` (
`username` VARCHAR(50) not null ,
`authority` varchar(50) not null,
foreign key (`username`) references `users` (`username`),
unique index authorities_idx_1 (username, authority)
) engine = InnoDb;
Lorsque je tente d'exécuter cette instruction, la table des utilisateurs est créé, mais je reçois l'erreur:
Error Code: 1005
Can't create table 'dental.authorities' (errno: 150)
Je ne vois pas pourquoi cette clé étrangère échoue lorsque les deux colonnes référencées sont identiques. Y at-il
Cela se construit avec succès pour moi: http://sqlfiddle.com/#!2/1e9acf et semble bien. Quelle version de MySQL utilisez-vous? (tant que 'users' est créé en premier) –
Pourquoi utilisez-vous une clé étrangère varchar et non un if? Utilisez un champ varchar comme une clé primaire est une mauvaise ideia – Lefsler
avez-vous vérifié les commentaires d'une question similaire: http://stackoverflow.com/questions/1457305/mysql-creating-tables-with-foreign-keys-giving- errno-150? rq = 1 – Kaffee