Salut nike7414 .
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 CONSTRAINT `fk_driver_client_detail_driver1` FOREIGN KEY (`driver_id`) REFERENCES `choosedriver`.`driver` (`driver_id`) ON DELETE NO ACTION ON UPDATE NO ACTION,Je suppose que vous parlez du nom de la 'foreign key' ou de 'index'.Envoyé par nike7414
La seule règle concernant ce nom est qu'il soit unique dans toute la base de données.
Donc il ne doit pas donner le nom d'une table, d'une colonne, d'une procédure stockée ...
Si je reprends l'exemple de ci-dessus, le nom de votre table est `choosedriver`.`driver_client_detail`.
Et comme il s'agit d'une 'foreign key', il suffit de mettre :
--> fk pour dire que c'est la foreign key.
--> le nom de la table
--> le nom de la colonne dans la table.
ce qui donne : "fk_driver_client_detail_driver_id".
Mais si vous n'aimez pas les noms en rallonge, vous pouvez le baptiser 'fk_01'.
Votre problème ne concerne pas ce nom.
J'ai testé votre exemple. J'obtiens le message d'erreur suivant :
1) je crois que vous n'avez pas compris ce que représente une clef étrangère.
Code : Sélectionner tout - Visualiser dans une fenêtre à part ERROR 1215 (HY000) at line 38: Impossible d'ajouter des contraintes d'index externe
Vous avez deux tables, l'une 'pere' et l'autre fils.
Dans la table 'pere', votre clef primaire se nomme 'clef'.
Dans la table 'fils', vous désirez une clef étrangère sur la table 'pere' pour la colonne 'clef'.
Et bien sûr, dans la table fils, vous nommez cette colonne 'pere_clef'.
Quelles sont les conditions pour que cela fonctionne correctement.
a) la table 'pere' doit être créé et remplie avant la table 'fils'.
b) 'clef' de la table 'pere' doit être une clef primaire.
Ce qui implique que doit être unique, non null.
c) la table 'fils' doit être créé après la table 'pere'.
d) quand vous insérez une nouvelle ligne dans la table 'fils', la valeur de la colonne 'fils_clef' doit déjà exister dans la table 'pere'.
2) les clefs étrangères ne fonctionnent que sur 'engine=innodb'.
Votre table "`choosedriver`.`driver`" est en 'engine=myisam'. Donc c'est pas bon !
3) le message d'erreur indique que vous faites références à une table qui n'est pas présente, au moment où vous créez la table `driver_client_detail`.
Vous ne pouvez pas faire référence à une clef étrangère sur une table qui n'existe pas.
Voici quelques modifications que j'ai apporté à votre base de données :
Et comme vous le constatez, il n'y a pas d'erreur.
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
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91 -------------- SET AUTOCOMMIT = 0 -------------- -------------- START TRANSACTION -------------- -------------- DROP DATABASE IF EXISTS `choosedriver` -------------- -------------- CREATE DATABASE `choosedriver` DEFAULT CHARACTER SET `latin1` DEFAULT COLLATE `latin1_general_ci` -------------- -------------- drop table if exists `driver` -------------- -------------- CREATE TABLE `driver` ( `driver_id` INTEGER NOT NULL AUTO_INCREMENT, `description` LONGTEXT NOT NULL, `city_id` INTEGER NOT NULL, PRIMARY KEY (`driver_id`), INDEX `idx_01` (`city_id` ASC) ) ENGINE=InnoDB DEFAULT CHARSET=`latin1` COLLATE=`latin1_general_ci` ROW_FORMAT=COMPRESSED -------------- -------------- drop table if exists `client` -------------- -------------- CREATE TABLE `client` ( `client_id` INTEGER NOT NULL AUTO_INCREMENT, `description` LONGTEXT NOT NULL, PRIMARY KEY (`client_id`) ) ENGINE=InnoDB DEFAULT CHARSET=`latin1` COLLATE=`latin1_general_ci` ROW_FORMAT=COMPRESSED -------------- -------------- drop table if exists `driver_client_detail` -------------- -------------- CREATE TABLE `driver_client_detail` ( `driver_client_detail_id` INTEGER NOT NULL AUTO_INCREMENT, `email` VARCHAR(255) NOT NULL, `pass` VARCHAR(255) NOT NULL, `date_inscription` DATETIME NOT NULL, `first_name` VARCHAR(255) NOT NULL, `last_name` VARCHAR(255) NOT NULL, `company` VARCHAR(255) NOT NULL, `driver_id` INTEGER NOT NULL, `client_id` INTEGER NOT NULL, CONSTRAINT `PK_driver_client_detail` PRIMARY KEY (`driver_client_detail_id`, `driver_id`, `client_id`), CONSTRAINT `fk_01` FOREIGN KEY (`driver_id`) REFERENCES `driver` (`driver_id`) ON DELETE NO ACTION ON UPDATE NO ACTION, CONSTRAINT `fk_02` FOREIGN KEY (`client_id`) REFERENCES `client` (`client_id`) ON DELETE NO ACTION ON UPDATE NO ACTION ) ENGINE=InnoDB DEFAULT CHARSET=`latin1` COLLATE=`latin1_general_ci` ROW_FORMAT=COMPRESSED -------------- -------------- COMMIT -------------- -------------- SET AUTOCOMMIT = 1 -------------- Appuyez sur une touche pour continuer...
@+
Partager