Partage
  • Partager sur Facebook
  • Partager sur Twitter

index externe

#1215 - Impossible d'ajouter des contraintes d'index externe

29 juillet 2015 à 19:23:15

bonjour j'essaye de créer des table dans dans ma BD à l'aide de myPHPAdmin mais depuis cette erreur '#1215 - Impossible d'ajouter des contraintes d'index externe' est générée. j'ai l'impression que c'est un problème de type car lorsque j'ai utilisé le type "integer" à la place de "décimal", je n'avais pas cette  erreur. Merci de votre aide

Mon script est le suivant:

DROP DATABASE IF EXISTS projectbd;

CREATE DATABASE IF NOT EXISTS projectbd;
USE projectbd;
# -----------------------------------------------------------------------------
#       TABLE : POP
# -----------------------------------------------------------------------------

CREATE TABLE IF NOT EXISTS POP
 (
   IDPOP INTEGER NOT NULL  PRIMARY KEY AUTO_INCREMENT,
   NOMPOP VARCHAR(127) NOT NULL,
   LIEUPOP VARCHAR(127) NULL,
   LATITUDE DECIMAL(15,8) NULL,
   LONGITUDE DECIMAL(15,8) NULL,
   TYPELIAISON SET('PTP','PTMP','CABLE') NOT NULL
)
 ;


# -----------------------------------------------------------------------------
#       TABLE : CARACTERISTIQUE
# -----------------------------------------------------------------------------

CREATE TABLE IF NOT EXISTS CARACTERISTIQUE
 (
   IDCARACT INTEGER NOT NULL AUTO_INCREMENT ,
   GAIN FLOAT NULL  ,
   NORMEWIFI ENUM('802.11A','802.11B','802.11AC','802.11G','802.11N') NULL  ,
   BEAMWIDTHVERTICAL DECIMAL(15,8) NULL  ,
   BEAMWIDTHORIZONTAL DECIMAL(15,8) NULL  ,
   PUISSANCE_EMISION DECIMAL(15,8) NULL 
   , PRIMARY KEY (IDCARACT)
 )
 comment = "";


# -----------------------------------------------------------------------------
#       TABLE : CLIENT
# -----------------------------------------------------------------------------

CREATE TABLE IF NOT EXISTS CLIENT
 (
   IDCLIENT INTEGER NOT NULL AUTO_INCREMENT,
   IDPOP INTEGER NOT NULL  ,
   NOMCLIENT VARCHAR(127) NOT NULL  ,
   LIEUCLIENT VARCHAR(127) NOT NULL  ,
   LATITUDE DECIMAL(15,8) NULL  ,
   LONGITUDE DECIMAL(15,8) NULL,
   TYPESOUSCRIPTION ENUM('RINGO HOME',' INTERNET DEDIE','INTERCO','CCTV','VOIP') NULL  ,
   DEBIT DECIMAL(15,8) NULL  ,
   TYPELIAISON ENUM('PTP','PTMP','CABLE') NOT NULL 
   , PRIMARY KEY (IDCLIENT)
 )
 comment = "";

# -----------------------------------------------------------------------------
#       INDEX DE LA TABLE CLIENT
# -----------------------------------------------------------------------------


CREATE  INDEX I_FK_CLIENT_POP
     ON CLIENT (IDPOP ASC);


# -----------------------------------------------------------------------------
#       TABLE : MATERIEL
# -----------------------------------------------------------------------------

CREATE TABLE IF NOT EXISTS MATERIEL
 (
   IDCLIENT INTEGER NOT NULL  ,
   IDPOP INTEGER NOT NULL  ,
   NUMSERIE VARCHAR(127) NOT NULL  ,
   IDCARACT DECIMAL(15,8) NOT NULL  ,
   NOM VARCHAR(127) NOT NULL  ,
   AZIMUT DECIMAL(15,8) NULL  ,
   TILT DECIMAL(15,8) NULL  ,
   FREQUENCE FLOAT NULL  ,
   BANDE FLOAT NULL  ,
   SSID VARCHAR(64) NULL  ,
   ROLELIAISON ENUM('SLAVE','MASTER') NOT NULL 
   , PRIMARY KEY (NOM)
 )
 comment = "";

# -----------------------------------------------------------------------------
#       INDEX DE LA TABLE MATERIEL
# -----------------------------------------------------------------------------


CREATE  INDEX I_FK_MATERIEL_CARACTERISTIQUE
     ON MATERIEL (IDCARACT ASC);

CREATE  INDEX I_FK_MATERIEL_POP
     ON MATERIEL (IDPOP ASC);

CREATE  INDEX I_FK_MATERIEL_CLIENT
     ON MATERIEL (IDCLIENT ASC);



# -----------------------------------------------------------------------------
#       TABLE : CONNEXIONPOP
# -----------------------------------------------------------------------------

CREATE TABLE IF NOT EXISTS CONNEXIONPOP
 (
   IDPOP INTEGER NOT NULL  ,
   IDPOP_1 INTEGER NOT NULL 
   , PRIMARY KEY (IDPOP,IDPOP_1)
 )
 comment = "";

# -----------------------------------------------------------------------------
#       INDEX DE LA TABLE CONNEXIONPOP
# -----------------------------------------------------------------------------


CREATE  INDEX I_FK_CONNEXIONPOP_POP
     ON CONNEXIONPOP (IDPOP ASC);

CREATE  INDEX I_FK_CONNEXIONPOP_POP1
     ON CONNEXIONPOP (IDPOP_1 ASC);


# -----------------------------------------------------------------------------
#       CREATION DES REFERENCES DE TABLE
# -----------------------------------------------------------------------------


ALTER TABLE MATERIEL
  ADD FOREIGN KEY FK_MATERIEL_CARACTERISTIQUE (IDCARACT)
      REFERENCES CARACTERISTIQUE (IDCARACT) ;


ALTER TABLE MATERIEL
  ADD FOREIGN KEY FK_MATERIEL_POP (IDPOP)
      REFERENCES POP (IDPOP) ;


ALTER TABLE MATERIEL
  ADD FOREIGN KEY FK_MATERIEL_CLIENT (IDCLIENT)
      REFERENCES CLIENT (IDCLIENT) ;


ALTER TABLE CONNEXIONPOP
  ADD FOREIGN KEY FK_CONNEXIONPOP_POP (IDPOP)
      REFERENCES POP (IDPOP) ;


ALTER TABLE CONNEXIONPOP
  ADD FOREIGN KEY FK_CONNEXIONPOP_POP1 (IDPOP_1)
      REFERENCES POP (IDPOP) ;


  • Partager sur Facebook
  • Partager sur Twitter
30 juillet 2015 à 9:38:50

Bonjour,

L'erreur 1215 est d'après la doc. : "Cannot add foreign key constraint"

Donc en gros tu regardes la création de tes foreign key et tu vois un problème ici je pense :

ALTER TABLE MATERIEL 
  ADD FOREIGN KEY FK_MATERIEL_CARACTERISTIQUE (IDCARACT)
      REFERENCES CARACTERISTIQUE (IDCARACT) ;

Ton IDCARACT(MATERIEL) est différent en type de ton IDCARACT(CARACTERISTIQUE). Et donc logiquement avec integer tu mets le bon type donc il n'y as pas d'erreur.

Cdt,

Kabilou


  • Partager sur Facebook
  • Partager sur Twitter
"Software is like sex, it’s better when it’s free"
23 avril 2021 à 18:58:09

Bonsoir a tous !!!

S'il vous plait comment faire pour récupérer le code SQL d'une table qu'on a depuis crée ???

  • Partager sur Facebook
  • Partager sur Twitter
24 avril 2021 à 23:09:37

tu fait le show create table [table_name]
  • Partager sur Facebook
  • Partager sur Twitter
26 avril 2021 à 9:33:38

Bonjour,

Déterrage

Citation des règles générales du forum :

Avant de poster un message, vérifiez la date du sujet dans lequel vous comptiez intervenir.

Si le dernier message sur le sujet date de plus de deux mois, mieux vaut ne pas répondre.
En effet, le déterrage d'un sujet nuit au bon fonctionnement du forum, et l'informatique pouvant grandement changer en quelques mois il n'est donc que rarement pertinent de déterrer un vieux sujet.

Au lieu de déterrer un sujet il est préférable :

  • soit de contacter directement le membre voulu par messagerie privée en cliquant sur son pseudonyme pour accéder à sa page profil, puis sur le lien "Ecrire un message"
  • soit de créer un nouveau sujet décrivant votre propre contexte
  • ne pas répondre à un déterrage et le signaler à la modération

Je ferme ce sujet. En cas de désaccord, me contacter par MP.

  • Partager sur Facebook
  • Partager sur Twitter
Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL