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 :

Echec de création de table avec jointure


Sujet :

MySQL

  1. #1
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 386
    Points : 5 733
    Points
    5 733
    Billets dans le blog
    1
    Par défaut Echec de création de table avec jointure
    Bonsoir,

    sous MySQL, je tente une création de table avec jointure et ça échoue :

    Code sql : 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
    CREATE TABLE IF NOT EXISTS `machinenew` (
    	mach_id smallint(6) not null auto_increment
    	, mach_name varchar(20)
    	, type_id smallint(6)
    	, pos_id smallint(6),
      `localization` varchar(30) COLLATE latin1_bin DEFAULT NULL,
      `pays` varchar(30) COLLATE latin1_bin NOT NULL DEFAULT '',
      `entite` varchar(20) COLLATE latin1_bin DEFAULT NULL,
      `perimetre` set('Oui','Non') COLLATE latin1_bin DEFAULT NULL,
      `type` varchar(20) COLLATE latin1_bin DEFAULT NULL,
      `comment` varchar(100) COLLATE latin1_bin DEFAULT NULL,
      `ip` varchar(15) COLLATE latin1_bin DEFAULT NULL,
      `contact_name` varchar(50) COLLATE latin1_bin DEFAULT NULL,
      `contact_phone` varchar(50) COLLATE latin1_bin DEFAULT NULL,
     CONSTRAINT pk_machine PRIMARY KEY(mach_id)
    	, CONSTRAINT fk_machine_type FOREIGN KEY(type_id)
    		REFERENCES serveur_type(type_id)
    	, CONSTRAINT fk_machine_position FOREIGN KEY(pos_id)
    		REFERENCES position(pos_id)
    ) ENGINE=MyISAM  DEFAULT CHARSET=latin1 COLLATE=latin1_bin AUTO_INCREMENT=427 ;

    avec la table position :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    CREATE TABLE IF NOT EXISTS `position` (
      `pos_id` smallint(6) NOT NULL AUTO_INCREMENT,
      `positionX` int(10) DEFAULT NULL,
      `positionY` int(10) DEFAULT NULL,
      PRIMARY KEY (`pos_id`)
    ) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=6 ;

    dnne ce message
    #1064 - Erreur de syntaxe près de 'position(pos_id)
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_bin AUT' Ã la ligne 19
    Je ne vois pas le problème...
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  2. #2
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 381
    Points : 19 065
    Points
    19 065
    Par défaut
    Salut laurentSc.

    Il y a essentiellement deux points qui ne vont pas :

    1) Les foreign key fonctionnent sous MySql avec le moteur "INNODB".
    Avec MyIsam, il n'y a pas d'erreurs, mais cela ne fonctionne pas.
    Donc toutes les tables doivent être en INNODB.

    2) ne faites pas un panachage avec des tables en UTF8 et d'autres en LATIN1.
    C'est soit l'un soit l'autre, mais pas les deux à la fois.

    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
    --------------
    set autocommit = 0
    --------------
     
    --------------
    start transaction
    --------------
     
    --------------
    DROP DATABASE IF EXISTS `base`
    --------------
     
    --------------
    CREATE DATABASE `base`
            default character set `latin1`
            default collate       `latin1_general_ci`
    --------------
     
    --------------
    DROP TABLE IF EXISTS `position`
    --------------
     
    --------------
    CREATE TABLE `position`
    ( `pos_id`    smallint not null auto_increment,
      `positionX` integer      null default null,
      `positionY` integer      null default null,
      primary key (`pos_id`)
    ) engine=innoDB
      default charset=latin1 collate=latin1_general_ci
      row_format=compressed
    --------------
     
    --------------
    DROP TABLE IF EXISTS `machinenew`
    --------------
     
    --------------
    CREATE TABLE `machinenew`
    ( `mach_id`       smallint     not null auto_increment,
      `mach_name`     varchar(255)     null,
      `type_id`       smallint         null,
      `pos_id`        smallint         null,
      `localization`  varchar(255)     null default null,
      `pays`          varchar(255) not null default '',
      `entite`        varchar(255)     null default null,
      `perimetre`     set('Oui','Non') null default null,
      `type`          varchar(255)     null default null,
      `comment`       varchar(255)     null default null,
      `ip`            varchar(255)     null default null,
      `contact_name`  varchar(255)     null default null,
      `contact_phone` varchar(255)     null default null,
      constraint `pk_machine`          primary key(`mach_id`),
     
      constraint `fk_machine_position` foreign key(`pos_id`)  references `position`     (`pos_id`)  on delete restrict on update cascade
    ) engine=innoDB
      default charset=latin1 collate=latin1_general_ci
      row_format=compressed
    --------------
     
    --------------
    commit
    --------------
     
    --------------
    set autocommit = 1
    --------------
     
     
    Appuyez sur une touche pour continuer...
    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

  3. #3
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 386
    Points : 5 733
    Points
    5 733
    Billets dans le blog
    1
    Par défaut
    Merci beaucoup agent secret
    Ca marche. Au début, j'ai copié intégralement votre script mais comme y avait une erreur, je l'ai exécuté par morceaux (sans le commit et le start transaction) et ça a marché...
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  4. #4
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 381
    Points : 19 065
    Points
    19 065
    Par défaut
    Salut laurentSc.

    Chut ! Je suis là incognito.

    Ce n'est pas un script mais une exécution. Si vous le prenez tel quel, cela risque de ne pas fonctionner.
    A la fin des requête, le point virgule ne s'affiche pas.

    Ce script fonctionne sous MySql 5.7.11 avec ENGINE=INNODB.

    Et comme c'est une exécution, il y a aucune erreur chez moi. Il faut le réadapter à votre environnement.

    Voici le script :
    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
    set autocommit = 0;
    start transaction;
     
    -- ======================
    -- Base de Données `base`
    -- ======================
     
    DROP DATABASE IF EXISTS `base`;
     
    CREATE DATABASE `base`
    	default character set `latin1`
    	default collate       `latin1_general_ci`;
     
    USE `base`;
     
    -- ================
    -- Table `position`
    -- ================
     
    DROP TABLE IF EXISTS `position`;
     
    CREATE TABLE `position`
    ( `pos_id`    smallint not null auto_increment,
      `positionX` integer      null default null,
      `positionY` integer      null default null,
      primary key (`pos_id`)
    ) engine=innoDB
      default charset=latin1 collate=latin1_general_ci
      row_format=compressed;
     
    -- ==================
    -- Table `machinenew`
    -- ==================
     
    DROP TABLE IF EXISTS `machinenew`;
     
    CREATE TABLE `machinenew`
    ( `mach_id`       smallint     not null auto_increment,
      `mach_name`     varchar(255)     null,
      `type_id`       smallint         null,
      `pos_id`        smallint         null,
      `localization`  varchar(255)     null default null,
      `pays`          varchar(255) not null default '',
      `entite`        varchar(255)     null default null,
      `perimetre`     set('Oui','Non') null default null,
      `type`          varchar(255)     null default null,
      `comment`       varchar(255)     null default null,
      `ip`            varchar(255)     null default null,
      `contact_name`  varchar(255)     null default null,
      `contact_phone` varchar(255)     null default null,
      constraint `pk_machine`          primary key(`mach_id`),
    --  constraint `fk_machine_type`     foreign key(`type_id`) references `serveur_type` (`type_id`) on delete restrict on update cascade,
      constraint `fk_machine_position` foreign key(`pos_id`)  references `position`     (`pos_id`)  on delete restrict on update cascade
    ) engine=innoDB
      default charset=latin1 collate=latin1_general_ci
      row_format=compressed;
     
    -- ===
    -- Fin
    -- ===
     
    commit;
    set autocommit = 1;
    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

  5. #5
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 386
    Points : 5 733
    Points
    5 733
    Billets dans le blog
    1
    Par défaut
    OK, j'avais pas remarqué qu'il n'y avait pas de point-virgule...
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Création des tables avec les jointures.
    Par alexandrebergercyr dans le forum Langage SQL
    Réponses: 6
    Dernier message: 06/03/2007, 15h25
  2. Réponses: 10
    Dernier message: 27/03/2006, 14h40
  3. Création de table avec Null par defaut
    Par MaitrePylos dans le forum PostgreSQL
    Réponses: 9
    Dernier message: 15/02/2006, 09h20
  4. Création de tables avec postgresql
    Par angiosfr dans le forum JDBC
    Réponses: 6
    Dernier message: 28/09/2005, 20h43
  5. Création de table avec index
    Par Seb7 dans le forum Requêtes
    Réponses: 2
    Dernier message: 10/04/2003, 16h11

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