MySQL: Perché non questo script creazione db funziona?
-
22-09-2019 - |
Domanda
Per qualche ragione, questo MySQL fallisce:
CREATE SCHEMA IF NOT EXISTS `partB` DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci ;
USE `partB`;
CREATE TABLE Employees ( ssn CHAR(11),
Name CHAR(30),
mlot INTEGER,
PRIMARY KEY(ssn))
ENGINE = InnoDB;
CREATE TABLE Dept_Mgr ( did INTEGER,
dname CHAR(20),
ssn CHAR(11) NOT NULL,
PRIMARY KEY (did),
FOREIGN KEY (ssn) REFERENCES Employees
ON DELETE NO ACTION)
ENGINE = InnoDB;
Si dà l'errore:
ERRORE 1005 (HY000): Impossibile creare la tabella
partb.dept_mgr
(errno: 150)
Che cosa può essere la causa?
Soluzione
Con questo comando:
SHOW ENGINE INNODB STATUS;
è tuo amico quando si hanno problemi a creare chiavi esterne. Uscita (in forma abbreviata)
------------------------
LATEST FOREIGN KEY ERROR
------------------------
100225 2:51:42 Error in foreign key constraint of table test/dept_mgr:
FOREIGN KEY (ssn) REFERENCES Employees
ON DELETE NO ACTION)
ENGINE = InnoDB:
Syntax error close to:
ON DELETE NO ACTION)
ENGINE = InnoDB
Se si cambia la vostra dichiarazione a:
CREATE TABLE Dept_Mgr (
did INTEGER,
dname CHAR(20),
ssn CHAR(11) NOT NULL,
PRIMARY KEY (did),
FOREIGN KEY (ssn) REFERENCES Employees(ssn)
) engine = innodb;
funziona.
Altri suggerimenti
È necessario specificare la colonna (s) nella tabella esterna per la chiave:
FOREIGN KEY (ssn) REFERENCES Employees (ssn) ...
Hai solo la chiave esterna che fa riferimento alla tabella, non la colonna.
Prova: riferimenti Employee.ssn
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow