Escrevi um script SQL que não roda de jeito nenhum.
Ou melhor, é executado pela metade...
Todas as tabelas são criadas, mas as foreign keys não.
O que eu faço?
O seguinte erro é retornado:
Can't create table '.\assolari\#sql-530-62' (errno. 150) ErroNr. 1005Pelo que percebi o último número depois do '-', nesse caso 62, é um hexadecimal que vai incrementando sempre. Acho que é como se fosse uma tabela temporária.
O script é o seguinte:
SET FOREIGN_KEY_CHECKS = 0; DROP TABLE IF EXISTS tb_status; CREATE TABLE tb_status ( status TINYINT UNSIGNED NOT NULL, nome VARCHAR(20) NOT NULL, CONSTRAINT pk_status PRIMARY KEY(status) ) TYPE = InnoDB; INSERT INTO tb_status VALUES (0,'Inativo'),(1,'Ativo'); DROP TABLE IF EXISTS tb_documento_tipo; CREATE TABLE tb_documento_tipo ( tipo INT UNSIGNED NOT NULL AUTO_INCREMENT, nome VARCHAR(20) NOT NULL, CONSTRAINT pk_documento_tipo PRIMARY KEY(tipo) ) TYPE = InnoDB; DROP TABLE IF EXISTS tb_departamento; CREATE TABLE tb_departamento ( departamento INT UNSIGNED NOT NULL AUTO_INCREMENT, nome VARCHAR(20) NOT NULL, CONSTRAINT pk_departamento PRIMARY KEY(departamento) ) TYPE = InnoDB; DROP TABLE IF EXISTS tb_empresa; CREATE TABLE tb_empresa ( empresa INT UNSIGNED NOT NULL AUTO_INCREMENT, cnpj_cpf INT UNSIGNED ZEROFILL NOT NULL, status TINYINT NOT NULL DEFAULT 0, nome VARCHAR(50) NOT NULL, email VARCHAR(50) NOT NULL, telefone VARCHAR(8), ddd VARCHAR(3), KEY status(status), CONSTRAINT pk_empresa PRIMARY KEY(empresa) ) TYPE = InnoDB; ALTER TABLE tb_empresa ADD CONSTRAINT fk_empresa_status FOREIGN KEY(status) REFERENCES tb_status (status); DROP TABLE IF EXISTS tb_usuario; CREATE TABLE tb_usuario ( usuario INT UNSIGNED NOT NULL AUTO_INCREMENT, status TINYINT NOT NULL DEFAULT 0, login VARCHAR(16) NOT NULL, senha VARCHAR(32) NOT NULL, empresa INT NOT NULL, nome VARCHAR(50) NOT NULL, email VARCHAR(50) NOT NULL, telefone VARCHAR(8), ddd VARCHAR(3), KEY status(status), KEY empresa(empresa), CONSTRAINT pk_usuario PRIMARY KEY(usuario) ) TYPE = InnoDB; ALTER TABLE tb_usuario ADD CONSTRAINT fk_usuario_status FOREIGN KEY(status) REFERENCES tb_status (status); ALTER TABLE tb_usuario ADD CONSTRAINT fk_usuario_empresa FOREIGN KEY(empresa) REFERENCES tb_empresa (empresa); DROP TABLE IF EXISTS tb_documento; CREATE TABLE tb_documento ( documento INT UNSIGNED NOT NULL AUTO_INCREMENT, status TINYINT NOT NULL DEFAULT 0, empresa INT NOT NULL, url VARCHAR(32) NOT NULL, tipo INT NOT NULL, departamento INT NOT NULL, inclusao DATETIME NOT NULL, validade DATETIME, observacoes VARCHAR(255), KEY status(status), KEY empresa(empresa), KEY tipo(tipo), KEY departamento(departamento), CONSTRAINT pk_documento PRIMARY KEY(documento) ) TYPE = InnoDB; ALTER TABLE tb_documento ADD CONSTRAINT fk_documento_status FOREIGN KEY(status) REFERENCES tb_status (status); ALTER TABLE tb_documento ADD CONSTRAINT fk_documento_empresa FOREIGN KEY(empresa) REFERENCES tb_empresa (empresa); ALTER TABLE tb_documento ADD CONSTRAINT fk_documento_tipo FOREIGN KEY(tipo) REFERENCES tb_documento_tipo (tipo); ALTER TABLE tb_documento ADD CONSTRAINT fk_documento_departamento FOREIGN KEY(departamento) REFERENCES tb_departamento (departamento); DROP TABLE IF EXISTS tb_visualizacao; CREATE TABLE tb_visualizacao ( visualizacao INT UNSIGNED NOT NULL AUTO_INCREMENT, documento INT NOT NULL, usuario INT NOT NULL, data DATETIME NOT NULL, KEY documento(documento), KEY usuario(usuario), CONSTRAINT pk_visualizacao PRIMARY KEY(visualizacao) ) TYPE = InnoDB; ALTER TABLE tb_visualizacao ADD CONSTRAINT fk_visualizacao_documento FOREIGN KEY(documento) REFERENCES tb_documento (documento); ALTER TABLE tb_visualizacao ADD CONSTRAINT fk_visualizacao_usuario FOREIGN KEY(usuario) REFERENCES tb_usuario (documento); DROP TABLE IF EXISTS tb_nota; CREATE TABLE tb_nota ( empresa INT NOT NULL, nota BLOB, KEY empresa(empresa), CONSTRAINT pk_nota PRIMARY KEY(empresa) ) TYPE = InnoDB; ALTER TABLE tb_nota ADD CONSTRAINT fk_nota_empresa FOREIGN KEY(empresa) REFERENCES tb_empresa (empresa); DROP TABLE IF EXISTS tb_visita; CREATE TABLE tb_visita ( usuario INT NOT NULL, data DATETIME NOT NULL, KEY usuario(usuario), CONSTRAINT pk_visita PRIMARY KEY(usuario) ) TYPE = InnoDB; ALTER TABLE tb_visita ADD CONSTRAINT fk_visita_usuario FOREIGN KEY(usuario) REFERENCES tb_usuario (usuario); DROP TABLE IF EXISTS tb_senha_alt; CREATE TABLE tb_senha_alt ( usuario INT NOT NULL, status TINYINT NOT NULL DEFAULT 0, KEY usuario(usuario), KEY status(status), CONSTRAINT pk_senha_alt PRIMARY KEY(usuario) ) TYPE = InnoDB; ALTER TABLE tb_senha_alt ADD CONSTRAINT fk_senha_alt_usuario FOREIGN KEY(usuario) REFERENCES tb_usuario (usuario); ALTER TABLE tb_senha_alt ADD CONSTRAINT fk_senha_alt_status FOREIGN KEY(status) REFERENCES tb_status (status); DROP TABLE IF EXISTS tb_acesso; CREATE TABLE tb_acesso ( usuario INT NOT NULL, departamento INT NOT NULL, status TINYINT NOT NULL DEFAULT 0, KEY usuario(usuario), KEY departamento(departamento), KEY status(status), CONSTRAINT pk_acesso PRIMARY KEY(usuario,departamento) ) TYPE = InnoDB; ALTER TABLE tb_acesso ADD CONSTRAINT fk_acesso_usuario FOREIGN KEY(usuario) REFERENCES tb_usuario (usuario); ALTER TABLE tb_acesso ADD CONSTRAINT fk_acesso_departamento FOREIGN KEY(departamento) REFERENCES tb_departamento (departamento); ALTER TABLE tb_acesso ADD CONSTRAINT fk_acesso_status FOREIGN KEY(status) REFERENCES tb_status (status); DROP TABLE IF EXISTS tb_colaborador; CREATE TABLE tb_colaborador ( colaborador INT UNSIGNED NOT NULL AUTO_INCREMENT, nome VARCHAR(50) NOT NULL, email VARCHAR(50) NOT NULL, CONSTRAINT pk_colaborador PRIMARY KEY(colaborador) ) TYPE = InnoDB; DROP TABLE IF EXISTS tb_colaborador_departamento; CREATE TABLE tb_colaborador_departamento ( colaborador INT NOT NULL, departamento INT NOT NULL, KEY colaborador(colaborador), KEY departamento(departamento), CONSTRAINT pk_colaborador_departamento PRIMARY KEY(colaborador,departamento) ) TYPE = InnoDB; ALTER TABLE tb_colaborador_departamento ADD CONSTRAINT fk_colaborador_departamento_colaborador FOREIGN KEY(colaborador) REFERENCES tb_colaborador (colaborador); ALTER TABLE tb_colaborador_departamento ADD CONSTRAINT fk_colaborador_departamento_departamento FOREIGN KEY(departamento) REFERENCES tb_departamento (departamento); DROP TABLE IF EXISTS tb_solicitacao; CREATE TABLE tb_solicitacao ( solicitacao INT UNSIGNED NOT NULL AUTO_INCREMENT, status TINYINT NOT NULL DEFAULT 0, empresa INT NOT NULL, descricao VARCHAR(255) NOT NULL, departamento INT NOT NULL, inclusao DATETIME NOT NULL, responsavel INT NOT NULL, KEY status(status), KEY empresa(empresa), KEY departamento(departamento), KEY responsavel(responsavel), CONSTRAINT pk_solicitacao PRIMARY KEY(solicitacao) ) TYPE = InnoDB; ALTER TABLE tb_solicitacao ADD CONSTRAINT fk_solicitacao_status FOREIGN KEY(status) REFERENCES tb_status (status); ALTER TABLE tb_solicitacao ADD CONSTRAINT fk_solicitacao_empresa FOREIGN KEY(empresa) REFERENCES tb_empresa (empresa); ALTER TABLE tb_solicitacao ADD CONSTRAINT fk_solicitacao_departamento FOREIGN KEY(departamento) REFERENCES tb_departamento (departamento); ALTER TABLE tb_solicitacao ADD CONSTRAINT fk_solicitacao_responsavel FOREIGN KEY(responsavel) REFERENCES tb_colaborador (colaborador); DROP TABLE IF EXISTS tb_andamento_tipo; CREATE TABLE tb_andamento_tipo ( tipo INT UNSIGNED NOT NULL AUTO_INCREMENT, nome VARCHAR(20) NOT NULL, CONSTRAINT pk_andamento_tipo PRIMARY KEY(tipo) ) TYPE = InnoDB; DROP TABLE IF EXISTS tb_andamento; CREATE TABLE tb_andamento ( andamento INT UNSIGNED NOT NULL AUTO_INCREMENT, solicitacao INT NOT NULL, tipo INT NOT NULL, contato DATETIME, observacoes BLOB, KEY solicitacao(solicitacao), KEY tipo(tipo), CONSTRAINT pk_andamento PRIMARY KEY(andamento) ) TYPE = InnoDB; ALTER TABLE tb_andamento ADD CONSTRAINT fk_andamento_solicitacao FOREIGN KEY(solicitacao) REFERENCES tb_solicitacao (solicitacao); ALTER TABLE tb_andamento ADD CONSTRAINT fk_andamento_tipo FOREIGN KEY(tipo) REFERENCES tb_andamento_tipo (tipo);Alguém consegue identificar o erro?
Valeu!!!