Précédent   Forum des professionnels en informatique > Bases de données > MySQL > Outils
Outils Forum d'entraide sur les outils pour MySQL. Avant de poster -> Outils MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 22/01/2008, 10h30   #1
Membre du Club
 
Développeur Java
Inscription : octobre 2004
Messages : 201
Détails du profil
Informations personnelles :
Âge : 30
Localisation : Royaume-Uni

Informations professionnelles :
Activité : Développeur Java

Informations forums :
Inscription : octobre 2004
Messages : 201
Points : 62
Points : 62
Par défaut Le cascade qui ne cascadai pas

Bonjour,

J'ai un shema assez simple au final, deux tables, dont une contnant une cle etrangere, qui est le cla primaire de l'autre,avec ON DELETE CASCADE.
Lorsque je supprime une ligne dans cette table, elle ne disparait pas de la table fille.
J'utilise MySQL 5.0.45. et une DB InnoDB
Quelqu'un saurait pourquoi ca ne declenche pas le CASCADE?

Merci

edit: D'apres ce que j'ai pu voir, ca serai un bug de MySQL ?
metalcoyote est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/01/2008, 10h43   #2
Expert Confirmé
 
Avatar de qi130
 
Homme Pierre
Ingénieur qualité méthodes
Inscription : mars 2003
Messages : 3 726
Détails du profil
Informations personnelles :
Nom : Homme Pierre
Âge : 51
Localisation : France

Informations professionnelles :
Activité : Ingénieur qualité méthodes
Secteur : Finance

Informations forums :
Inscription : mars 2003
Messages : 3 726
Points : 4 739
Points : 4 739
Tables InnoDB ?

Moteur InnoDB actif sur le serveur ?
__________________
"Il n'y a pas de bonnes réponses à une mauvaise question." (M. Godet)
-----------------------
Pensez à cloturer votre sujet - Aucune réponse aux sollicitations techniques par MP
Usus magister est optimus
qi130 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/01/2008, 10h45   #3
Membre du Club
 
Développeur Java
Inscription : octobre 2004
Messages : 201
Détails du profil
Informations personnelles :
Âge : 30
Localisation : Royaume-Uni

Informations professionnelles :
Activité : Développeur Java

Informations forums :
Inscription : octobre 2004
Messages : 201
Points : 62
Points : 62
Les tables sont InnoBD oui.
Comment on sait si le moteur InnoDB est actif ? Je suis en local.
metalcoyote est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/01/2008, 10h56   #4
Rédactrice
 
Avatar de Fleur-Anne.Blain
 
Inscription : juillet 2006
Messages : 2 662
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 2 662
Points : 5 590
Points : 5 590
Il me semble qu'à partir de MySQL 4.0, InnoDB est activé par défaut.

cf le fichier de configuration se nomme my.ini et est localisé dans le répertoire principal de Windows la ou tu peux activer les tables InnoDB

mettre en commentaire skip-innodb (ajouter un #)

Citation:
Envoyé par metalcoyote Voir le message
Les tables sont InnoBD oui.
Comment on sait si le moteur InnoDB est actif ? Je suis en local.
__________________
la culture c'est comme la confiture moins on en a plus on l'étale.

Vous souhaitez contribuer aux rubriques Solutions d'entreprises ou BI, contactez-moi

Mes tutos
Fleur-Anne.Blain est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/01/2008, 11h01   #5
Membre du Club
 
Développeur Java
Inscription : octobre 2004
Messages : 201
Détails du profil
Informations personnelles :
Âge : 30
Localisation : Royaume-Uni

Informations professionnelles :
Activité : Développeur Java

Informations forums :
Inscription : octobre 2004
Messages : 201
Points : 62
Points : 62
Oui apparement innoDB est active par defaut, et dans le fichier ini, la ligne skip_innoDB est deja commentee...
metalcoyote est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/01/2008, 11h04   #6
Rédactrice
 
Avatar de Fleur-Anne.Blain
 
Inscription : juillet 2006
Messages : 2 662
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 2 662
Points : 5 590
Points : 5 590
Il me semble que pour profiter de l'innoDB il faut ajouter TYPE=INNODB; dans ta création de table comme les exemples du net

Citation:
Envoyé par metalcoyote Voir le message
Oui apparement innoDB est active par defaut, et dans le fichier ini, la ligne skip_innoDB est deja commentee...
__________________
la culture c'est comme la confiture moins on en a plus on l'étale.

Vous souhaitez contribuer aux rubriques Solutions d'entreprises ou BI, contactez-moi

Mes tutos
Fleur-Anne.Blain est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/01/2008, 11h06   #7
Membre du Club
 
Développeur Java
Inscription : octobre 2004
Messages : 201
Détails du profil
Informations personnelles :
Âge : 30
Localisation : Royaume-Uni

Informations professionnelles :
Activité : Développeur Java

Informations forums :
Inscription : octobre 2004
Messages : 201
Points : 62
Points : 62
Oui j'ai cree toutes mes tables en mettant ENGINE=InnoDB
metalcoyote est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/01/2008, 11h13   #8
Rédactrice
 
Avatar de Fleur-Anne.Blain
 
Inscription : juillet 2006
Messages : 2 662
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 2 662
Points : 5 590
Points : 5 590
Essaie avec TYPE=InnoDB;
Citation:
Envoyé par metalcoyote Voir le message
Oui j'ai cree toutes mes tables en mettant ENGINE=InnoDB
__________________
la culture c'est comme la confiture moins on en a plus on l'étale.

Vous souhaitez contribuer aux rubriques Solutions d'entreprises ou BI, contactez-moi

Mes tutos
Fleur-Anne.Blain est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/01/2008, 11h16   #9
Membre du Club
 
Développeur Java
Inscription : octobre 2004
Messages : 201
Détails du profil
Informations personnelles :
Âge : 30
Localisation : Royaume-Uni

Informations professionnelles :
Activité : Développeur Java

Informations forums :
Inscription : octobre 2004
Messages : 201
Points : 62
Points : 62
Je veux bien, mais mes tables on ete crees avec MySQL Query Browser, et il a genere le script automatiquement.
J'avais essaye avec TYPE (g pas verifie si ca marchait) mais il m'a dit que le nouvelle syntaxe etait ENGINE...

Je viens d'essayer ca ne change rien

Code :
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
 
DROP TABLE IF EXISTS `APPLICANT`;
CREATE TABLE `APPLICANT` (
  `idapplicant` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  `idagency` int(10) UNSIGNED NOT NULL,
  `idtitle` int(10) UNSIGNED NOT NULL,
  `firstname` varchar(20) NOT NULL,
  `lastname` varchar(20) NOT NULL,
  PRIMARY KEY  USING BTREE (`idapplicant`),
  KEY `APPLICANT_FKIndex3` USING BTREE (`idagency`),
  KEY `APPLICANT_FKIndex1` USING BTREE (`idtitle`),
  CONSTRAINT `FK_applicant_1` FOREIGN KEY (`idtitle`) REFERENCES `title` (`idtitle`) ON DELETE NO ACTION ON UPDATE NO ACTION,
  CONSTRAINT `FK_applicant_2` FOREIGN KEY (`idagency`) REFERENCES `agency` (`idAgency`) ON DELETE CASCADE ON UPDATE CASCADE
) TYPE=InnoDB AUTO_INCREMENT=20 DEFAULT CHARSET=latin1;
 
DROP TABLE IF EXISTS `APPLICATION`;
CREATE TABLE `APPLICATION` (
  `idApplicant` int(10) UNSIGNED NOT NULL,
  `idPositions` int(10) UNSIGNED NOT NULL,
  PRIMARY KEY  USING BTREE (`idApplicant`,`idPositions`),
  KEY `Index_3` (`idPositions`),
  KEY `Index_2` USING BTREE (`idApplicant`),
#Celle ci qui m'interesse...
  CONSTRAINT `FK_APPLICANT_has_POSITION_1` FOREIGN KEY (`idApplicant`) REFERENCES `applicant` (`idapplicant`) ON DELETE CASCADE ON UPDATE CASCADE,
#// 
 CONSTRAINT `FK_APPLICANT_has_POSITION_2` FOREIGN KEY (`idPositions`) REFERENCES `positions` (`idpositions`) ON DELETE NO ACTION ON UPDATE NO ACTION,
) TYPE=InnoDB DEFAULT CHARSET=latin1;
metalcoyote est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/01/2008, 12h21   #10
Membre du Club
 
Développeur Java
Inscription : octobre 2004
Messages : 201
Détails du profil
Informations personnelles :
Âge : 30
Localisation : Royaume-Uni

Informations professionnelles :
Activité : Développeur Java

Informations forums :
Inscription : octobre 2004
Messages : 201
Points : 62
Points : 62
bon j'ai essaye avec des tables encore plus simples et ca marche pas.
C un bug SQL c pas possible !

Voila un petit script

Code :
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
 
CREATE DATABASE IF NOT EXISTS test;
USE test;
 
DROP TABLE IF EXISTS `fiston`;
CREATE TABLE `fiston` (
  `idfiston` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  PRIMARY KEY  (`idfiston`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1;
 
--
-- Dumping data for table `fiston`
--
 
/*!40000 ALTER TABLE `fiston` DISABLE KEYS */;
INSERT INTO `fiston` (`idfiston`) VALUES 
 (1),
 (2),
 (3);
/*!40000 ALTER TABLE `fiston` ENABLE KEYS */;
 
DROP TABLE IF EXISTS `papa`;
CREATE TABLE `papa` (
  `idpapa` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  `idfiston` int(10) UNSIGNED NOT NULL,
  PRIMARY KEY  (`idpapa`),
  KEY `Index_2` (`idfiston`),
  CONSTRAINT `FK_PAPA_1` FOREIGN KEY (`idfiston`) REFERENCES `fiston` (`idfiston`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1;
 
 
/*!40000 ALTER TABLE `papa` DISABLE KEYS */;
INSERT INTO `papa` (`idpapa`,`idfiston`) VALUES 
 (1,1),
 (2,2),
 (3,3);
Et supprimez un papa et dites moi
metalcoyote est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/01/2008, 12h48   #11
ced
Rédacteur/Modérateur

 
Avatar de ced
 
Homme Cédric Duprez
Inscription : avril 2002
Messages : 3 823
Détails du profil
Informations personnelles :
Nom : Homme Cédric Duprez
Âge : 36
Localisation : France, Loiret (Centre)

Informations professionnelles :
Secteur : Agroalimentaire - Agriculture

Informations forums :
Inscription : avril 2002
Messages : 3 823
Points : 6 413
Points : 6 413
Bonjour,

Pour que la cascade ait une chance de fonctionner, c'est plutôt un fiston qu'il faut supprimer (un enfanticide, quoi ).
Personnellement, en MySQL 5.0.41, ça marche : mon fiston et mon papa sont bien supprimés .

ced
ced est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/01/2008, 13h10   #12
Membre du Club
 
Développeur Java
Inscription : octobre 2004
Messages : 201
Détails du profil
Informations personnelles :
Âge : 30
Localisation : Royaume-Uni

Informations professionnelles :
Activité : Développeur Java

Informations forums :
Inscription : octobre 2004
Messages : 201
Points : 62
Points : 62
jvai essayer dans ce sens la !
j'avais peur pour le ptit
metalcoyote est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/01/2008, 13h12   #13
Membre du Club
 
Développeur Java
Inscription : octobre 2004
Messages : 201
Détails du profil
Informations personnelles :
Âge : 30
Localisation : Royaume-Uni

Informations professionnelles :
Activité : Développeur Java

Informations forums :
Inscription : octobre 2004
Messages : 201
Points : 62
Points : 62
ARF
C'est dans ce sens la que ca marche !!!

bon Merci bien
metalcoyote est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/01/2008, 13h19   #14
Membre du Club
 
Développeur Java
Inscription : octobre 2004
Messages : 201
Détails du profil
Informations personnelles :
Âge : 30
Localisation : Royaume-Uni

Informations professionnelles :
Activité : Développeur Java

Informations forums :
Inscription : octobre 2004
Messages : 201
Points : 62
Points : 62
C'est un peu mal foutu je trouve,
Si je veux suprimer un papa, je veux aussi supprimer sa descendence.

Alors que la je dois d'abord me faire tous les rejetons, apres chercher qui est le pere

Pas pratique non ?
metalcoyote est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/01/2008, 13h43   #15
ced
Rédacteur/Modérateur

 
Avatar de ced
 
Homme Cédric Duprez
Inscription : avril 2002
Messages : 3 823
Détails du profil
Informations personnelles :
Nom : Homme Cédric Duprez
Âge : 36
Localisation : France, Loiret (Centre)

Informations professionnelles :
Secteur : Agroalimentaire - Agriculture

Informations forums :
Inscription : avril 2002
Messages : 3 823
Points : 6 413
Points : 6 413
C'est un problème purement conceptuel... Il faut mettre la clef étrangère dans la table des enfants, référençant la table des parents...

ced
ced est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 05h59.


 
 
 
 
Partenaires

Hébergement Web