Frage

Ich habe zwei Tabellen:

Tabelle Autor: ID (integer), author_name (VARCHAR), first_name (VARCHAR), last_name (VARCHAR), preferred_name (VARCHAR).

Tabelle coauthored: ID (INTEGER) author1ID (integer), author2ID (integer), paper_ID (integer) (ID des Co-Autor Papier durch diesen Link verwiesen wird)

Ich möchte für Fremdschlüssel hinzuzufügen, so dass author1ID und author2ID in coauthored zu ID verweisen Autor. I definiert die Tabellen als solche:

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

Dies ist mein Versuch, den Fremdschlüssel zu erstellen:

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

Diese führt eine ganz gut, aber wenn ich versuche, ein ein Tupel hinzufügen, die eine author1ID enthält, die nicht in ID nicht vorhanden ist, es erlaubt mir, es zu tun, der Fremdschlüssel bedeutete nicht funktioniert.

Was muss ich anders machen? Ich habe versucht, machen beide Tabellen ENGINE = BDB in den Anweisungen erstellen, aber dann würde ich einen Fehler 1005 nicht erstellen Tabelle erhalten.

War es hilfreich?

Lösung

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

Um eine Fremdschlüsselbeziehung zwischen zwei MySQL-Tabellen einzurichten, drei Bedingungen müssen erfüllt sein:

  1. Die beiden Tabellen des InnoDB-Tabellentyp sein muss.

  2. Die Felder der Fremdschlüsselbeziehung verwendet wird, muss indiziert werden.

  3. Die Felder der Fremdschlüsselbeziehung verwendet werden, müssen in Datentyp ähnlich sein.

. Wichtig: Für Nicht-InnoDB-Tabellen, die FOREIGN KEY-Klausel ignoriert

Andere Tipps

Können Sie versuchen 'ENGINE = InnoDB'

Fremdschlüssel-Constraints / Key Constraints arbeitet mit InnoDB-Tabellen nur:)

- Prost

Zu allererst: Sie müssen alle Tabellen mit Fremdschlüsseln beteiligt definieren InnoDB sein. MyISAM nicht einfach Fremdschlüssel unterstützen.

Ihr Problem hier (Error 1005) ist eine verwirrende Bit. Wenn Sie eine ALTER TABLE tun, bedeutet dies, dass ein Wert in einem der Fremdschlüsselfelder ist, die keinen Bezug in einer anderen Tabelle hat.

Wenn Sie Tabellen erstellen, stellen Sie sicher, dass Sie die „Eltern“ Tabelle zunächst erstellen, dann die zweite und dritte Tabelle.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top