Eu quero adicionar uma chave estrangeira a uma tabela chamada "katalog".
ALTER TABLE katalog
ADD CONSTRAINT `fk_katalog_sprache`
FOREIGN KEY (`Sprache`)
REFERENCES `Sprache` (`ID`)
ON DELETE SET NULL
ON UPDATE SET NULL;
Quando tento fazer isso, recebo esta mensagem de erro:
Error Code: 1005. Can't create table 'mytable.#sql-7fb1_7d3a' (errno: 150)
Erro no status INNODB:
120405 14:02:57 Erro na restrição de chave estrangeira da tabela mytable. # Sql-7fb1_7d3a:
FOREIGN KEY (`Sprache`)
REFERENCES `Sprache` (`ID`)
ON DELETE SET NULL
ON UPDATE SET NULL:
Cannot resolve table name close to:
(`ID`)
ON DELETE SET NULL
ON UPDATE SET NULL
Quando uso essa consulta, ela funciona, mas com a ação "ao excluir" incorreta:
ALTER TABLE `katalog`
ADD FOREIGN KEY (`Sprache` ) REFERENCES `sprache` (`ID` )
Ambas as tabelas são InnoDB e os dois campos são "INT (11) não nulos". Estou usando o MySQL 5.1.61. Tentando disparar essa consulta ALTER com o MySQL Workbench (mais recente) em um MacBook Pro.
Tabela Criar instruções:
CREATE TABLE `katalog` (
`ID` int(11) unsigned NOT NULL AUTO_INCREMENT,
`Name` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
`AnzahlSeiten` int(4) unsigned NOT NULL,
`Sprache` int(11) NOT NULL,
PRIMARY KEY (`ID`),
UNIQUE KEY `katalogname_uq` (`Name`)
) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci ROW_FORMAT=DYNAMIC$$
CREATE TABLE `sprache` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`Bezeichnung` varchar(45) NOT NULL,
PRIMARY KEY (`ID`),
UNIQUE KEY `Bezeichnung_UNIQUE` (`Bezeichnung`),
KEY `ix_sprache_id` (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8
mysql
foreign-keys
frgtv10
fonte
fonte
SHOW CREATE TABLE
, só posso perguntar - o nome da coluna é realmente ID, em maiúsculas?katalog
temint(11) unsigned
.sprache
não possui ausigned
peça, portanto, duas colunas não são iguais.auto_increment
colunas, o que é ruim. Além disso, o manual MySQL diz:Corresponding columns in the foreign key and the referenced key must have similar internal data types inside InnoDB so that they can be compared without a type conversion. The size and sign of integer types must be the same. The length of string types need not be the same. For nonbinary (character) string columns, the character set and collation must be the same.
. Portanto, sim, tipo de dados semelhante e o mesmo sinal.Respostas:
Para adicionar uma chave estrangeira (grade_id) a uma tabela existente (usuários), siga as seguintes etapas:
fonte
Basta usar esta consulta, tentei de acordo com o meu cenário e funciona bem
fonte
Passos simples ...
fonte
verifique este link. Ele me ajudou com o errno 150: http://verysimple.com/2006/10/22/mysql-error-number-1005-cant-create-table-mydbsql-328_45frm-errno-150/
No topo da minha cabeça, duas coisas me vêm à mente.
Eu estou supondo que o problema está com o conjunto NULL na atualização (se meu cérebro não estiver invertido hoje, como costuma ser ...).
Editar: perdi os comentários em sua postagem original. As colunas int não assinadas / não assinadas talvez tenham resolvido seu caso. Espero que meu link ajude alguém no futuro a pensar.
fonte
Mas sua mesa possui:
Ele não pode definir a coluna Sprache para NULL porque ele é definido como NOT NULL.
fonte
O MySQL executará esta consulta:
Felicidades!
fonte
Como consertar
Error Code: 1005. Can't create table 'mytable.#sql-7fb1_7d3a' (errno: 150) in mysql.
altere sua tabela e adicione um índice a ela ..
Agora adicione a restrição
Observe que se você não adicionar um índice, ele não funcionará.
Depois de lutar por cerca de 6 horas, tive a solução que espero que isso salve uma alma.
fonte
Ao adicionar uma restrição de chave estrangeira a uma tabela usando ALTER TABLE, lembre-se de criar os índices necessários primeiro.
fonte
tente tudo em uma consulta
fonte
isso acontece basicamente porque suas tabelas estão em dois conjuntos de caracteres diferentes. como exemplo, uma tabela criada em charset = utf-8 e outras tabelas são criadas em CHARSET = latin1, para que você possa adicionar uma chave obrigatória a essas tabelas. Se você usar o mesmo conjunto de caracteres nas duas tabelas, poderá adicionar chaves estrangeiras. O erro 1005 restrição de chave estrangeira formada incorretamente pode resolver a partir deste
fonte
eu passei pelo mesmo problema. No meu caso, a tabela já possui dados e havia chave nessa tabela que não estava presente na tabela de referência. Então eu tive que excluir essas linhas que desrespeitam as restrições e tudo funcionou.
fonte
etapa 1: execute este script
etapa 2: adicionar coluna
Etapa 3: adicionar chave estrangeira à coluna adicionada
etapa 4: execute este script
fonte
Exemplo:-
fonte