MySQL erro 150, não pode criar a tabela
-
22-07-2019 - |
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
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.