Pregunta

Tengo dos tablas:

Mesa Autor: ID (INTEGER), author_name (VARCHAR), FIRST_NAME (VARCHAR), last_name (VARCHAR), preferred_name (VARCHAR).

Tabla coautor de: ID (INTEGER) author1ID (INTEGER), author2ID (INTEGER), paper_ID (INTEGER) (ID del papel co-autor referenciado por este enlace)

Quiero añadir restricciones de claves foráneas tales que author1ID y coautor de author2ID en referencia a ID de Autor. He definido las tablas tales como:

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);

Este es mi intento de crear la clave externa:

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

Esto ejecuta muy bien, pero cuando intento agregar una tupla que contiene un author1ID que no existe en la identificación, que permite que lo haga, es decir, la restricción de clave externa no está funcionando.

¿Qué necesito hacer de manera diferente? He intentado hacer tanto las tablas del motor = INNODB en las sentencias CREATE, pero luego me sale un error 1005 no puede crear la tabla.

¿Fue útil?

Solución

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

Con el fin de establecer una relación de clave externa entre dos tablas de MySQL, tres condiciones deben cumplirse:

  1. Las dos tablas deben ser del tipo InnoDB.

  2. Los campos utilizados en la relación de clave externa debe ser indexado.

  3. Los campos utilizados en la relación de clave externa deben ser similares en tipo de datos.

Importante:. Para las tablas no InnoDB, la cláusula FOREIGN KEY se ignora

Otros consejos

Se puede tratar 'ENGINE = InnoDB'

restricciones de clave externa / Restricciones clave trabajar con tablas InnoDB solamente:)

- Saludos

En primer lugar: Es necesario definir todas las tablas involucradas con claves externas para ser InnoDB. MyISAM simplemente no soporta claves foráneas.

Su problema aquí (Error 1005) es un poco confuso. Si usted hace una ALTER TABLE, significa que hay un valor en uno de los campos de clave externa que no tiene ninguna referencia en otra tabla.

Cuando se crean tablas, asegúrese de que va a crear la tabla "padre" en primer lugar, a continuación, la segunda y tercera tabla.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top