Domanda

Ho due tabelle:

Tavolo Autore: ID (intero), author_name (VARCHAR), first_name (VARCHAR), last_name (VARCHAR), preferred_name (VARCHAR).

Tabella coautore: ID (intero) author1ID (intero), author2ID (intero), paper_ID (intero) (ID della carta co-autore fa riferimento questo link)

Voglio aggiungere vincoli di chiave esterna che tali author1ID e author2ID in coautore fanno riferimento a ID Autore. Ho definito le tabelle in quanto tali:

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

Questo è il mio tentativo di creare la chiave esterna:

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

Si utilizza per eseguire bene, ma quando provo ad aggiungere un una tupla che contiene un author1ID che non esiste in ID, questo mi permette di farlo, cioè il vincolo di chiave esterna non funziona.

Che cosa devo fare in modo diverso? Ho provato a fare entrambe le tabelle ENGINE = InnoDB nel creare dichiarazioni, ma poi mi piacerebbe ottenere un errore 1005 non può creare la tabella.

È stato utile?

Soluzione

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

Al fine di impostare una relazione di chiave esterna tra due tabelle di MySQL, devono essere soddisfatte tre condizioni:

  1. Entrambe le tabelle devono essere del tipo di tabella InnoDB.

  2. I campi utilizzati nella relazione di chiave esterna deve essere indicizzato.

  3. I campi utilizzati nella relazione di chiave esterna devono essere simili in tipo di dati.

. Importante: Per le tabelle non InnoDB, la clausola FOREIGN KEY viene ignorato

Altri suggerimenti

Puoi provare 'ENGINE = InnoDB'

vincoli di chiave esterna / vincoli di chiave lavorare con le tabelle InnoDB solo:)

- Cin cin

Prima di tutto: È necessario definire tutte le tabelle coinvolte con chiavi esterne per essere InnoDB. MyISAM semplicemente non supporta le chiavi esterne.

Il problema qui (Error 1005) è un po 'di confusione. Se si fa un ALTER TABLE, vuol dire che c'è un valore in uno dei campi di chiave esterna che ha alcun riferimento a un'altra tabella.

Durante la creazione di tabelle, fare in modo, che si sta creando la tabella "padre", poi la seconda e la terza tabella.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top