Frage

Ich habe diese SQL-Klauseln:

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`);

Aber ich bin gettin dieser Fehler:

  

Errore SQL-Abfrage:

     

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

     

Messaggio di MySQL:

     

1005 - kann nicht erstellt werden Tisch (errno: 150) 'test_javier_4 # SQL-528_aed.'

Jede Idee?

Viele Grüße

Javi

War es hilfreich?

Lösung

Das Problem ist, dass zwei Ihrer drei Fremdschlüssel Spalten in der übergeordneten Tabelle beziehen, die weder Primärschlüssel sind noch haben sie ihnen einen eindeutigen Index haben.

Alle Fremdschlüsselspalten müssen entweder den Primärschlüssel oder einen eindeutigen Schlüssel in der übergeordneten Tabelle verweisen.

Dies sind die beiden schlechten Fremdschlüssel:

  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`);

Wenn diese Spalten in der übergeordneten Tabelle eindeutig sein sollen, dann können Sie dieses Problem zu beheben, indem das Hinzufügen eindeutige Indizes auf sie wie folgt aus:

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

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

Andere Tipps

Von der MySQL Dokumentation :

  

1005 (ER_CANT_CREATE_TABLE)

     

Tabelle kann nicht erstellen. Wenn die Fehlermeldung 150 auf Fehler bezieht, Tabellenerstellung ist fehlgeschlagen, da ein Fremdschlüssel wurde nicht richtig ausgebildet ist.

Können Sie isolieren, welche der drei Fremdschlüssel Additionen den Fehler verursacht, indem sie einer nach dem anderen ausgeführt wird? Wie:

ALTER TABLE `sedi_i18n`
  ADD CONSTRAINT `sedi_i18n_FK_1` FOREIGN KEY (`id`) REFERENCES `sedi` (`id`) ON DELETE CASCADE
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top