Pergunta

Estou tendo problemas para criar uma tabela e eu não entendo o que está errado. phpMyAdmin define o indicador de erro junto à declaração PRIMARY KEY ... Eu não entendo por que isso é errado ...

Esta tabela é uma tabela filho, que tem uma identificação de relacionamento um-para-muitos com outra tabela.

CREATE TABLE IF NOT EXISTS `ruilen`.`Voorwerpen` (
`voorwerpen_id` INT NOT NULL AUTO_INCREMENT ,
`naam` VARCHAR( 45 ) NOT NULL ,
`beschrijving` VARCHAR( 45 ) NULL ,
`Gebruikers_gebruiker_id` INT NOT NULL ,
PRIMARY KEY ( `voorwerpen_id` , `Gebruikers_gebruiker_id` ) ,
CONSTRAINT `fk_Voorwerpen_Gebruikers1` FOREIGN KEY ( `Gebruikers_gebruiker_id` ) REFERENCES `ruilen`.`Gebruikers` (
`gebruiker_id`
) ON DELETE SET NULL ON UPDATE CASCADE
) ENGINE = InnoDB;

MySQL said: Documentation
#1005 - Can't create table 'ruilen.voorwerpen' (errno: 150) 

EDIT: este é toda a documentação sobre o código de erro que pode encontrar: Fazer a ligação

EDIT2: pic removido

EDIT3:

CREATE TABLE `gebruikers` (
 `gebruiker_id` int(11) NOT NULL,
 `naam` varchar(45) NOT NULL,
 `straat` varchar(45) NOT NULL,
 `gemeente` varchar(45) NOT NULL,
 `mail` varchar(45) NOT NULL,
 `beschrijving` varchar(45) DEFAULT NULL,
 PRIMARY KEY (`gebruiker_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
Foi útil?

Solução

Verifique se Gebruikers_gebruiker_id e Gebruikers.gebruiker_id têm o mesmo tipo de dados.

Verifique também se Gebruikers.gebruiker_id é um PRIMARY KEY em Gebruikers

Update:

Você ON DELETE SET NULL definido, enquanto o seu Gebruikers_gebruiker_id é definido como NOT NULL.

Fix it (mudança para ON DELETE CASCADE ou apenas remover a cláusula) e você vai ser capaz de criar a referência.

Outras dicas

Im meu caso sua tipicamente devido a uma incompatibilidade tipo de dados. Lembre-se que é uma verificação de int que ambos são ou não assinado ou não

Esta is'nt muito uma característica de buggy de mysql. Não pode haver duas razões possíveis para isso! 1) os tipos de dados da PK eo jogo não faça FK. 2) Este erro pode surgir em versões anteriores a 4.1, onde você precisa definir explicitamente índices.

Mais uma razão para adicionar:

charset diferente ou motor também irá causar este problema

Na minha pessoa experiência esta uma característica muito buggy de MySQL - e menos incómodo é apenas para despejar a estrutura da tabela e os dados, em seguida, solte a tabela e re-executar o SQL do despejo e, em seguida, recriar manualmente índices e restrições de chave estrangeira quando necessário.

Eu tive uma restrição com o mesmo nome em uma tabela diferente. Tente alterar o nome da sua restrição.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top