it-swarm.com.de

MySQL create table: error 1005 errno: 150 "Fremdschlüsseleinschränkung ist falsch gebildet"

Dies schlägt fehl, wenn versucht wird, die EXCHANGE-Tabelle zu erstellen:

CREATE TABLE BOOK
(PKACC_NO VARCHAR (20) PRIMARY KEY,
TITLE VARCHAR (50),
AUTHOR VARCHAR (50),
PUBLISHER VARCHAR (50),
EDITION INTEGER (4),
PRICE INTEGER (10));

CREATE TABLE MEMBER
(PKMEMBER_ID VARCHAR (20) PRIMARY KEY,
NAME VARCHAR (50),
TYPE VARCHAR (10),
CONTACT_NO BIGINT (10),
ADHAAR_NO BIGINT(12),
LAST_VISIT DATE );

CREATE TABLE STAFF
(PKSTAFF_ID VARCHAR (20),
NAME VARCHAR(50),
ADHAAR_NO BIGINT (12),
CONTACT_NO BIGINT(10) );

CREATE TABLE EXCHANGE 
(TRANSACTION_ID VARCHAR(20) PRIMARY KEY,
FK1ACC_NO VARCHAR(20),
FK2MEMBER_ID VARCHAR (20),
FK3STAFF_ID VARCHAR(20),
DATE_OF_ISSUE DATE,
DATE_OF_RETURN DATE,
FINE INTEGER(20),
REMARKS VARCHAR(20),
CONSTRAINT FK1 FOREIGN KEY (FK1ACC_NO) REFERENCES BOOK (PKACC_NO)
ON DELETE CASCADE
ON UPDATE CASCADE,
CONSTRAINT FK2 FOREIGN KEY (FK2MEMBER_ID) REFERENCES MEMBER (PKMEMBER_ID)
ON DELETE CASCADE
ON UPDATE CASCADE,
CONSTRAINT FK3 FOREIGN KEY (FK3STAFF_ID) REFERENCES STAFF (PKSTAFF_ID)
ON DELETE CASCADE
ON UPDATE CASCADE);

Die letzte create-Anweisung gibt Folgendes zurück:

ERROR 1005 (HY000): Can't create table `testdb`.`EXCHANGE` (errno: 150 "Foreign key constraint is incorrectly formed")
2
user137978

Manchmal ist der beste Weg, um einen Fehler in Ihrer InnoDB-Tabelle zu beheben, die Überprüfung des InnoDB-Tabellenstatus mit diesem Befehl. SHOW ENGINE INNODB STATUS;

Dies wird Sie darüber aufklären, was Sie falsch machen.

6
Emmanuel Alcime

Das Problem ist, dass Sie vergessen haben, einen Primärschlüssel für die STAFF-Tabelle zu definieren:

CREATE TABLE STAFF
(PKSTAFF_ID VARCHAR (20) PRIMARY KEY,
NAME VARCHAR(50),
ADHAAR_NO BIGINT (12),
CONTACT_NO BIGINT(10) );

Sobald dies geklärt ist, können Sie die EXCHANGE-Tabelle wie in Ihrer Frage erstellen.

5
dbdemon