Pergunta

O que há de errado com este comando alter -tabela:

ALTER TABLE `lp` 
ADD COLUMN `RuleId` INT(10) NOT NULL DEFAULT -111 AFTER `Weight` , , 
ADD CONSTRAINT `fk_1` FOREIGN KEY (`RuleId` ) REFERENCES `Rules` (`RuleId` ) ON DELETE NO ACTION ON UPDATE NO ACTION,
ADD INDEX `fk_1` (`RuleId` ASC) ;

Se eu largar a linha

  ADD CONSTRAINT `fk_1` FOREIGN KEY (`RuleId` ) REFERENCES `Rules` (`RuleId` ) ON DELETE NO ...

isso funciona ,

O erro que recebo é:

Error Code : 1005
Can't create table '..' (errno: 121)

Como posso adicionar uma chave estrangeira e índice no mesmo campo ?

Atualizar:

Eu tento me separar de 2 consultas, primeiro adicionar índice e, depois disso, adicione a chave estrangeira, o índice adicionou, mas a segunda consulta não funciona!

Quando eu mudo o nome da chave estrangeira (como: 'fk_2') e tento executá -la, recebo um erro: o código de erro: 1452 não pode adicionar ou atualizar uma linha infantil: uma restrição de chave estrangeira falha

Foi útil?

Solução

Primeiro, crie o índice e segundo a restrição de chave estrangeira. O MySQL precisa de um índice para criar a chave estrangeira, é por isso que você precisa criar o índice primeiro. Use declarações separadas também.

Outras dicas

Eu tive o mesmo problema exatamente.

O que eu descobri é que você não pode adicionar uma chave estrangeira se já existir outra chave estrangeira no seu banco de dados com exatamente o mesmo nome. Mesmo que essa outra chave estrangeira esteja em uma tabela diferente.

Erro 1005 (hy000): Não é possível criar tabela './mydb/#sql-e4a_c715.frm' (errno: 121) Como mencionado acima, você receberá essa mensagem se estiver tentando adicionar uma restrição com um nome que é já usado em outro lugar.

(Tirado de aqui)

Então, apenas renomeie -o para algo aleatório para verificar se estou correto ..

Recebi esse erro depois de combinar DDLs de esquema de aplicativos n django usando o comando "gerencia.py sqlall".

Descobri que o DDL do MySQL exige que as declarações sejam agrupadas por Gentil nesta ordem. Especificamente, toda a tabela alterada ... adicione ... chave estrangeira ... devo ocorrer por último, ou o MySQL aumentará esse erro.

  1. CRIAR A TABELA ...
  2. Criar índice ...
  3. ALTER TABLE TABLE_NAME Adicionar nome de restrição Chave estrangeira ...
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top