Impossible de créer une clef étrangère
Bonjour,
Je ne vois pas pourquoi je ne peux pas créer de clef étrangère entre 2 tables de ma base.
Voici les définitions actuelles :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
|
CREATE TABLE `civilite` (
`id` tinyint(2) NOT NULL AUTO_INCREMENT,
`libelle` varchar(32) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `libelle` (`libelle`)
);
CREATE TABLE `personne` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`nom` varchar(100) NOT NULL DEFAULT '-',
`prenom` varchar(50) NOT NULL,
`type` int(1) NOT NULL DEFAULT '0',
`civilite` INT(11) unsigned DEFAULT NULL,
-- ....
); |
Pour créer ma clef, je passe ces commandes :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
|
-- Correction du type de la colonne dans la table personne :
ALTER TABLE `Prisme`.`personne`
CHANGE COLUMN `civilite` `civilite` TINYINT(2) UNSIGNED NULL DEFAULT NULL ;
-- Suppression des valeurs 0 incorrectes :
UPDATE personne
SET civilite = NULL
WHERE civilite = 0;
-- Vérification qu'il n'y a pas eu d'insert avec une valeur incohérente :
SELECT * FROM personne p WHERE NOT EXISTS (SELECT 1 FROM civilite c WHERE c.id = v.civilite) AND p.civilite IS NOT NULL;
-- 0 résultat : OK
ALTER TABLE `Prisme`.`personne`
ADD CONSTRAINT `fk_civilite`
FOREIGN KEY (`civilite`)
REFERENCES `Prisme`.`civilite` (id)
ON DELETE NO ACTION
ON UPDATE NO ACTION;
-- ERROR 1005 (HY000): Can't create table `Prisme`.`#sql-5be8_52582` (errno: 150 "Foreign key constraint is incorrectly formed") |
Je vois vraiment pas ce qui peut bloquer... Une idée ?
Merci :)