IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MySQL Discussion :

mysqldump et ordre de création et d'insertion


Sujet :

MySQL

  1. #1
    Membre régulier
    Inscrit en
    Mai 2007
    Messages
    183
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 183
    Points : 121
    Points
    121
    Par défaut mysqldump et ordre de création et d'insertion
    Bonjour a tous,

    Une petite question, concernant mysqldump. Quand je lance..
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    mysqldump --opt -uroot -ppassword_du_root --all-databases
    ..et que je j'inspecte le contenu de l'export, je vois que le fichier crée les tables et fait les insertions "dans le désordre" (dans un contexte relationnel InnoDB).
    En clair, si une table A dépend de la table B (cad que A contient des références qu'elle doit impérativement piocher dans B), je constate que l'export me créé d'abord la table A, fait les insertions .. alors que la table B n'est pas créée !

    Je suppose que c'est normal, mais je ne comprend pas trop :
    1. Si je restaure, y aura pas de problème ?
    2. Il y a un moyen pour forcer un export dans l'ordre des contraintes relationnelles (utile si je veux restaurer uniquement les données sur une base déjà créée avec les contraintes) ?


    Merci aux experts

  2. #2
    Membre régulier
    Profil pro
    None
    Inscrit en
    Mars 2008
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : None

    Informations forums :
    Inscription : Mars 2008
    Messages : 58
    Points : 80
    Points
    80
    Par défaut
    Si mes souvenirs sont exacts, les insertions se font effectivement dans le désordre MAIS les contraintes se trouvent réunies en toutes fin de script, c'est à dire une fois que TOUTES les insertions ont eu lieu.

  3. #3
    Membre régulier
    Inscrit en
    Mai 2007
    Messages
    183
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 183
    Points : 121
    Points
    121
    Par défaut
    Non, voici un extrait avec deux tables (j'ai limité les INSERT à 2 pour plus de lisibilité) :
    * country (respect de l'iso 3611), avec une clé étrangère qui qui pointe sur 3'char_4217'
    * currency_4217 (respect de l'iso 4217), qui contient la clé primaire 3'char_4217'

    A un pays correspond une devise monétaire: il faut donc d'abord créer et "charger" la table devise (currency_4217) et seulement ensuite la table country.

    Et bien ici, le contenu du sqldump fait le contraire :


    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
     
    --
    -- Table structure for table `country`
    --
     
    DROP TABLE IF EXISTS `country`;
    /*!40101 SET @saved_cs_client     = @@character_set_client */;
    /*!40101 SET character_set_client = utf8 */;
    CREATE TABLE `country` (
      `iso` char(2) COLLATE utf8_unicode_ci NOT NULL,
      `name` varchar(80) COLLATE utf8_unicode_ci NOT NULL,
      `printable_name` varchar(80) COLLATE utf8_unicode_ci NOT NULL,
      `iso3` char(3) COLLATE utf8_unicode_ci NOT NULL,
      `3char_4217` char(3) COLLATE utf8_unicode_ci NOT NULL,
      `numcode` smallint(6) DEFAULT NULL,
      PRIMARY KEY (`iso3`),
      KEY `fk_devise_of` (`3char_4217`),
      CONSTRAINT `fk_devise_of` FOREIGN KEY (`3char_4217`) REFERENCES `currency_4217` (`3char_4217`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
    /*!40101 SET character_set_client = @saved_cs_client */;
     
    --
    -- Dumping data for table `country`
    --
     
    LOCK TABLES `country` WRITE;
    /*!40000 ALTER TABLE `country` DISABLE KEYS */;
    INSERT INTO `country` VALUES ('AW','ARUBA','Aruba','ABW','AWG',533),('AF','AFGHANISTAN','Afghanistan','AFG','AFN',4),('ZW','ZIMBABWE','Zimbabwe','ZWE','ZWL',716);
    /*!40000 ALTER TABLE `country` ENABLE KEYS */;
    UNLOCK TABLES;
     
    --
    -- Table structure for table `currency_4217`
    --
     
    DROP TABLE IF EXISTS `currency_4217`;
    /*!40101 SET @saved_cs_client     = @@character_set_client */;
    /*!40101 SET character_set_client = utf8 */;
    CREATE TABLE `currency_4217` (
      `3char_4217` char(3) COLLATE utf8_unicode_ci NOT NULL,
      `num_4217` int(11) NOT NULL,
      `currency_4217` varchar(70) COLLATE utf8_unicode_ci NOT NULL,
      PRIMARY KEY (`3char_4217`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
    /*!40101 SET character_set_client = @saved_cs_client */;
     
    --
    -- Dumping data for table `currency_4217`
    --
     
    LOCK TABLES `currency_4217` WRITE;
    /*!40000 ALTER TABLE `currency_4217` DISABLE KEYS */;
    INSERT INTO `currency_4217` VALUES 
    ('AFN',971,'Afghani '),('ALL',8,'Lek '),
    ('ZWL',932,'Zimbabwe Dollar ');
    /*!40000 ALTER TABLE `currency_4217` ENABLE KEYS */;
    UNLOCK TABLES;
    Pardon d'insister.

  4. #4
    Membre actif
    Homme Profil pro
    Analyst
    Inscrit en
    Juillet 2008
    Messages
    150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Analyst
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2008
    Messages : 150
    Points : 217
    Points
    217
    Par défaut
    Bonjour,
    Je n'ai pas vu d'option le permettant (mysqdump --help)

    Cependant, cela fonctionne car il y'a en début de script:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    /*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
    et en fin de script:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    /*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
    Cela veut donc dire prudence quand tu injectes les données dans ta base cible (import partiel).

    A+

  5. #5
    Membre régulier
    Inscrit en
    Mai 2007
    Messages
    183
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 183
    Points : 121
    Points
    121
    Par défaut
    Donc pas de solution automatique pour générer des inserts dans le bon ordre ?

    Je trouve cela curieux.. ..je laisse encore un peu cette discussion.

Discussions similaires

  1. Réponses: 1
    Dernier message: 24/08/2007, 16h42
  2. ordre de création des insert
    Par marti dans le forum Langage SQL
    Réponses: 3
    Dernier message: 07/07/2006, 18h42
  3. Contrôler l'ordre de création de classes globales
    Par 10_GOTO_10 dans le forum C++
    Réponses: 4
    Dernier message: 24/04/2006, 20h39
  4. Ordre d'enregistrement d'un INSERT
    Par minusette dans le forum Requêtes
    Réponses: 3
    Dernier message: 18/04/2006, 16h19
  5. Ordre de création de composant
    Par bobby-b dans le forum Composants VCL
    Réponses: 4
    Dernier message: 15/09/2003, 19h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo