Question

i ont cette clause sql:

CREATE TABLE IF NOT EXISTS `culture` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `code` char(6) NOT NULL DEFAULT 'it',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=11 ;


CREATE TABLE IF NOT EXISTS `nations` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `culture_id` int(11) NOT NULL,
  `iso_code_2` char(2) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `nations_FI_1` (`culture_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=245 ;


CREATE TABLE IF NOT EXISTS `sedi` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `nome` varchar(255) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=13 ;


CREATE TABLE IF NOT EXISTS `sedi_i18n` (
  `id` int(11) NOT NULL,
  `culture` char(6) NOT NULL,
  `nation` char(2) NOT NULL,
  `indirizzo` text NOT NULL,
  PRIMARY KEY (`id`,`culture`),
  KEY `sedi_i18n_FI_2` (`culture`),
  KEY `sedi_i18n_FI_3` (`nation`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;


ALTER TABLE `sedi_i18n`
  ADD CONSTRAINT `sedi_i18n_FK_1` FOREIGN KEY (`id`) REFERENCES `sedi` (`id`) ON DELETE CASCADE,
  ADD CONSTRAINT `sedi_i18n_FK_2` FOREIGN KEY (`culture`) REFERENCES `culture` (`code`),
  ADD CONSTRAINT `sedi_i18n_FK_3` FOREIGN KEY (`nation`) REFERENCES `nations` (`iso_code_2`);

Mais je suis gettin cette erreur:

  

Errore requête SQL:

     

ALTER TABLE ADD sedi_i18n   CONTRAINTE ÉTRANGER sedi_i18n_FK_1   CLÉS (id) RÉFÉRENCES sedi (   id) ON CASCADE SUPPRIMER, ADD   CONTRAINTE ÉTRANGER sedi_i18n_FK_2   CLÉS (culture) RÉFÉRENCES   culture (code), ADD CONTRAINTE   sedi_i18n_FK_3 FOREIGN KEY (   nation) RÉFÉRENCES nations (   iso_code_2);

     

Messaggio di MySQL:

     

1005 - Impossible de créer la table (errno: 150) 'test_javier_4 # sql-528_aed.

Toute idée?

Cordialement

Javi

Était-ce utile?

La solution

Le problème est que 2 de vos 3 clés étrangères font référence à des colonnes dans la table des parents qui ne sont ni les clés primaires et ils n'ont un index unique sur eux.

Toutes les colonnes clés étrangères doivent référencer la clé primaire ou une clé unique dans la table parent.

Ce sont les deux mauvaises clés étrangères:

  ADD CONSTRAINT `sedi_i18n_FK_2` FOREIGN KEY (`culture`) REFERENCES `culture` (`code`),
  ADD CONSTRAINT `sedi_i18n_FK_3` FOREIGN KEY (`nation`) REFERENCES `nations` (`iso_code_2`);

Si ces colonnes sont destinées à être unique dans la table parent, vous pouvez résoudre ce problème en ajoutant des index uniques sur eux comme ceci:

alter table `culture`
  add unique key (`code`);

alter table `nations`
  add unique key (`iso_code_2`);

Autres conseils

De la documentation MySQL :

  

1005 (ER_CANT_CREATE_TABLE)

     

Impossible de créer la table. Si le message d'erreur fait référence à l'erreur 150, la création de la table a échoué en raison d'une contrainte de clé étrangère n'a pas été correctement formée.

Pouvez-vous isoler lequel des trois additions de contrainte de clé étrangère est à l'origine de l'erreur, en les faisant passer un à la fois? Comme:

ALTER TABLE `sedi_i18n`
  ADD CONSTRAINT `sedi_i18n_FK_1` FOREIGN KEY (`id`) REFERENCES `sedi` (`id`) ON DELETE CASCADE
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top