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 :
Pour créer ma clef, je passe ces commandes :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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, -- .... );
Je vois vraiment pas ce qui peut bloquer... Une idée ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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")
Merci
Partager