Domanda

ho questo clausole 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`);

Ma io sono gettin questo errore:

  

Errore query SQL:

     

ALTER TABLE ADD sedi_i18n   VINCOLO sedi_i18n_FK_1 STRANIERA   CHIAVE (id) RIFERIMENTI sedi (   id) ON DELETE CASCADE, ADD   VINCOLO sedi_i18n_FK_2 STRANIERA   CHIAVE (culture) RIFERIMENTI   culture (code), VINCOLO ADD   sedi_i18n_FK_3 FOREIGN KEY (   nation) RIFERIMENTI nations (   iso_code_2);

     

Messaggio di MySQL:

     

1005 - Impossibile creare tabella (errno: 150) 'test_javier_4 # sql-528_aed.'

Qualche idea?

Saluti

Javi

È stato utile?

Soluzione

Il problema è che 2 dei tuoi 3 chiavi esterne riferimento alle colonne nella tabella padre che non sono né le chiavi primarie e non hanno un indice univoco su di loro.

Tutte le colonne chiave esterna deve fare riferimento sia la chiave primaria o una chiave univoca nella tabella padre.

Queste sono le due chiavi esterne cattivi:

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

Se queste colonne sono destinate ad essere unico nella tabella padre, allora si può risolvere questo con l'aggiunta di indici univoci su di loro in questo modo:

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

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

Altri suggerimenti

MySQL documentazione :

  

1005 (ER_CANT_CREATE_TABLE)

     

non può creare la tabella. Se il messaggio di errore si riferisce all'errore 150, creazione di tabelle non riuscita a causa di un vincolo di chiave esterna non è stata formata correttamente.

Si può isolare quale dei tre aggiunte vincolo di chiave esterna causa l'errore, eseguendo uno alla volta? Come:

ALTER TABLE `sedi_i18n`
  ADD CONSTRAINT `sedi_i18n_FK_1` FOREIGN KEY (`id`) REFERENCES `sedi` (`id`) ON DELETE CASCADE
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top