Pergunta

Eu tenho duas tabelas:

Tabela Autor:ID (INTEIRO), author_name (VARCHAR), nome (VARCHAR), sobrenome (VARCHAR), preferred_name (VARCHAR).

Tabela De Co-Autoria:ID (INTEIRO) author1ID (INTEIRO), author2ID (INTEIRO), paper_ID (INTEGER) (IDENTIFICAÇÃO dos co-autoria de papel referenciado por este link)

Eu quero adicionar restrições de chave estrangeira de tal forma que author1ID e author2ID em co-autoria consulte ID de Autor.Eu definidas as tabelas, como tal:

CREATE TABLE Author(ID INT, author_name VARCHAR(100), preferred_name VARCHAR(100), first_name VARCHAR(100), last_name VARCHAR(100), PRIMARY KEY(ID)) ENGINE=INNODB;

CREATE TABLE CoAuthored(ID INT, author1ID INT, author2ID INT, paper_ID INT);

Esta é a minha tentativa de criar a chave estrangeira:

ALTER TABLE CoAuthored ADD foreign key (author1ID) references Author(ID) on delete cascade on update cascade;

Este executa perfeitamente, mas quando tento adicionar um uma tupla que contém um author1ID que não existe no ID, ele me permite fazê-lo, ou seja, a restrição de chave externa não está funcionando.

O que eu preciso fazer de forma diferente?Eu tentei fazer ambas as tabelas ENGINE=INNODB em criar declarações, mas, em seguida, gostaria de obter um ERRO 1005 não pode criar tabela.

Foi útil?

Solução

a partir de: https://web.archive.org/web/1/http://articles.techrepublic%2ecom%2ecom/5100-10878_11-6035435.html

A fim de estabelecer uma relação de chave externa entre duas tabelas do MySQL, três condições devem ser atendidas:

  1. Ambas as tabelas devem ser do tipo de tabela InnoDB.

  2. Os campos utilizados no relacionamento de chave estrangeira deve ser indexada.

  3. Os campos utilizados no relacionamento de chave estrangeira devem ser semelhantes em tipo de dados.

Importante:Para os não-tabelas InnoDB, a cláusula FOREIGN KEY é ignorado.

Outras dicas

Você pode tentar 'mecanismo = innoDB'

Restrições de chave estrangeira/restrições -chave funcionam apenas com tabelas Innodb :)

--Felicidades

Primeiro de tudo: você precisa definir todas as tabelas envolvidas com chaves estrangeiras para serem innodb. Myisam simplesmente não suporta chaves estrangeiras.

Seu problema aqui (erro 1005) é um pouco confuso. Se você fizer um ALTER TABLE, isso significa que existe um valor em um dos campos de chave estrangeira que não tem referência em outra tabela.

Ao criar tabelas, verifique se você está criando a tabela "pai" primeiro e depois a segunda e a terceira tabela.

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