MySQL: Por que esse script de criação de banco de dados não funciona?
-
22-09-2019 - |
Pergunta
Por alguma razão, este MySQL falha:
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;
Dá o erro:
Erro 1005 (hy000): Não é possível criar a tabela
partb.dept_mgr
(Errno: 150)
O que pode estar causando isso?
Solução
Este comando:
SHOW ENGINE INNODB STATUS;
é seu amigo quando você tem problemas para criar chaves estrangeiras. Saída (resumido)
------------------------
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 você alterar sua declaração para:
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;
Funciona.
Outras dicas
Você deve especificar as colunas na tabela estrangeira para a chave:
FOREIGN KEY (ssn) REFERENCES Employees (ssn) ...
Você tem apenas a chave estrangeira referenciando a tabela, não a coluna.
Tente: Referências Employee.ssn
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow