INNODB Cascade Sintaxe / Logic Problem
-
05-09-2019 - |
Pergunta
Eu tenho um problema com um banco de dados SQL que eu estou criando. Estou tentando ligá-lo ao longo de usar INNODB mas eu não consigo obter a sintaxe (ou possivelmente lógica) correto para cascata.
Aqui está uma href="http://pastebin.com/m7216314f" rel="nofollow noreferrer"> parte . Ele não gosta de linha 40.
saída de erro na enigmática usual (para mim pelo menos) forma:
ERROR 1005 (HY000) at line 36: Can't create table './school/staff.frm' (errno: 150)
Editar:
Aqui está o href="http://pastebin.com/m45174ae7" rel="nofollow noreferrer"> arquivo SQL Estou tentando tubulação em se isso ajuda.
Solução
As chaves estrangeiras tem que ser índices. ( role.name )
Tente isto:
CREATE TABLE IF NOT EXISTS `role` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` char(30) NOT NULL,
`description` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `name` (`name`)
) ENGINE=InnoDB;
Outras dicas
Você quis dizer para restrição de chave estrangeira a coluna "papel" de estar usando o nome em vez do ID? Parece que a seguinte linha (linha 43):
FOREIGN KEY (role) REFERENCES role(name)
deve ser:
FOREIGN KEY (role) REFERENCES role(id)
Isso executa sem erros.
Em alternativa, o tipo "staff.role" da coluna de dados (linha 40, o papel INT NÃO NULL) poderia ser alterada para CHAR (30) não nulo.