Bonsoir,
Dans le cas, ou les différentes tables sont crées de cette manière :
J'obtiens :
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 /*Création de la table tChannel*/ CREATE TABLE `tChannel` ( `channel_i_id` INTEGER(2) UNSIGNED NOT NULL, /*l'identifiant du canal*/ `channel_s_label` VARCHAR(100) NOT NULL default '', /*le libellé du canal : MMS, GP ou Services*/ PRIMARY KEY (`channel_i_id`) ) TYPE=InnoDB; /*Insertion dans la table tChannel*/ INSERT INTO tChannel (`channel_i_id`, `channel_s_label`) VALUES (1, 'MMS'); INSERT INTO tChannel (`channel_i_id`, `channel_s_label`) VALUES (2, 'GP'); INSERT INTO tChannel (`channel_i_id`, `channel_s_label`) VALUES (3, 'Services'); /*Création de la table tService*/ CREATE TABLE `tService` ( `service_i_id` INTEGER(3) UNSIGNED NOT NULL, /*l'identifiant du service demandeur*/ `service_s_label` VARCHAR(255) NOT NULL, /*libellé du service demandeur*/ `service_s_client_login` VARCHAR(255) NOT NULL, /*l'identifiant côté client*/ `service_s_client_password` VARCHAR(255) NOT NULL, /*le mot de passe côté client*/ PRIMARY KEY (`service_i_id`), UNIQUE KEY (`service_s_client_login`) ) TYPE=InnoDB; -- Service demandeur mock, nécessaire pour le referencement de la clé étrangère de tSource INSERT INTO tService (`service_i_id`, `service_s_label`, `service_s_client_login`, `service_s_client_password`) VALUES (0, 'Dummy Service', '', ''); INSERT INTO tService (`service_i_id`, `service_s_label`, `service_s_client_login`, `service_s_client_password`) VALUES (1, 'Messagerie SFR', 'sfrmes', 'test'); /*Création de la table tSource*/ CREATE TABLE `tSource` ( `source_i_id` INTEGER(3) UNSIGNED NOT NULL, /*l'identifiant de la source*/ `channel_i_id` INTEGER(2) NOT NULL, /*clé étrangère(channel)*/ `service_i_id` INTEGER(3) NOT NULL, /*pas une clé étrangère. Peut prendre la valeur vide (pour channel_i_id appartenant à {1;2} c'est à dire pour MMS et GP*/ `source_s_label` VARCHAR(255) NOT NULL, /*le libellé de la source : MMS, GP ou libelle du service demandeur*/ PRIMARY KEY (`source_i_id`) /*FOREIGN KEY(channel_i_id) REFERENCES tChannel(channel_i_id), FOREIGN KEY(service_i_id) REFERENCES tService(service_i_id) */ ) TYPE=InnoDB;
Tandis que lorsque j'introduit des clés étrangères dans la table tSource, ça ne fonctionne plus :
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 mysql> source mdd.sql Query OK, 0 rows affected (0.03 sec) Query OK, 1 row affected (0.00 sec) Query OK, 1 row affected (0.01 sec) Query OK, 1 row affected (0.00 sec) Query OK, 0 rows affected (0.02 sec) Query OK, 1 row affected (0.01 sec) Query OK, 1 row affected (0.00 sec) Query OK, 0 rows affected (0.03 sec)
J'obtiens :
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 /*Création de la table tChannel*/ CREATE TABLE `tChannel` ( `channel_i_id` INTEGER(2) UNSIGNED NOT NULL, /*l'identifiant du canal*/ `channel_s_label` VARCHAR(100) NOT NULL default '', /*le libellé du canal : MMS, GP ou Services*/ PRIMARY KEY (`channel_i_id`) ) TYPE=InnoDB; /*Insertion dans la table tChannel*/ INSERT INTO tChannel (`channel_i_id`, `channel_s_label`) VALUES (1, 'MMS'); INSERT INTO tChannel (`channel_i_id`, `channel_s_label`) VALUES (2, 'GP'); INSERT INTO tChannel (`channel_i_id`, `channel_s_label`) VALUES (3, 'Services'); /*Création de la table tService*/ CREATE TABLE `tService` ( `service_i_id` INTEGER(3) UNSIGNED NOT NULL, /*l'identifiant du service demandeur*/ `service_s_label` VARCHAR(255) NOT NULL, /*libellé du service demandeur*/ `service_s_client_login` VARCHAR(255) NOT NULL, /*l'identifiant côté client*/ `service_s_client_password` VARCHAR(255) NOT NULL, /*le mot de passe côté client*/ PRIMARY KEY (`service_i_id`), UNIQUE KEY (`service_s_client_login`) ) TYPE=InnoDB; -- Service demandeur mock, nécessaire pour le referencement de la clé étrangère de tSource INSERT INTO tService (`service_i_id`, `service_s_label`, `service_s_client_login`, `service_s_client_password`) VALUES (0, 'Dummy Service', '', ''); INSERT INTO tService (`service_i_id`, `service_s_label`, `service_s_client_login`, `service_s_client_password`) VALUES (1, 'Messagerie SFR', 'sfrmes', 'test'); /*Création de la table tSource*/ CREATE TABLE `tSource` ( `source_i_id` INTEGER(3) UNSIGNED NOT NULL, /*l'identifiant de la source*/ `channel_i_id` INTEGER(2) NOT NULL, /*clé étrangère(channel)*/ `service_i_id` INTEGER(3) NOT NULL, /*clé étrangère(service)*/ `source_s_label` VARCHAR(255) NOT NULL, /*le libellé de la source : MMS, GP ou libelle du service demandeur*/ PRIMARY KEY (`source_i_id`), FOREIGN KEY(channel_i_id) REFERENCES tChannel(channel_i_id), FOREIGN KEY(service_i_id) REFERENCES tService(service_i_id) ) TYPE=InnoDB;
J'ai une version Mysql 4.
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 mysql> source mdd.sql Query OK, 0 rows affected (0.03 sec) Query OK, 1 row affected (0.00 sec) Query OK, 1 row affected (0.01 sec) Query OK, 1 row affected (0.00 sec) Query OK, 0 rows affected (0.04 sec) Query OK, 1 row affected (0.00 sec) Query OK, 1 row affected (0.00 sec) ERROR 1005: Can't create table 'tSource.frm' (errno: 150)
Est-ce que quelqu'un pourrait m'indiquer comment faire en sorte que cette erreur ne soit plus présente avec ma version MySQL 4.
Merci
Partager