Cyberoma 5 Denunciar post Postado Março 18, 2012 Eae galera, estou com um problema com FOREIGN_KEY na hora de criar as tabelas. USO o mysql Workbench . O ERRO OCORRE NA TABELA CLIENTES.. Eu dei uma pesquisa sobre o assunto mas não consegui resolver meu problema. Alguem pode ajudar? Error 1005: Can’t create table (errno: 150) SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0; SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0; SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL'; CREATE SCHEMA IF NOT EXISTS `dm_tech` DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci ; USE `dm_tech` ; -- ----------------------------------------------------- -- Table `dm_tech`.`telefones` -- ----------------------------------------------------- CREATE TABLE IF NOT EXISTS `dm_tech`.`telefones` ( `id_telefone` INT NOT NULL AUTO_INCREMENT , `id_empresa` INT NOT NULL , `num1_telefone` DECIMAL(10,0) NOT NULL , `cel1_telefone` DECIMAL(10,0) NOT NULL , `num2_telefone` DECIMAL(10,0) NOT NULL , `cel2_telefone` DECIMAL(10,0) NOT NULL , PRIMARY KEY (`id_telefone`) , UNIQUE INDEX `tel_empresa_UNIQUE` (`id_empresa` ASC) ) ENGINE = InnoDB; -- ----------------------------------------------------- -- Table `dm_tech`.`enderecos` -- ----------------------------------------------------- CREATE TABLE IF NOT EXISTS `dm_tech`.`enderecos` ( `id_endereco` INT NOT NULL AUTO_INCREMENT , `id_empresa` INT NOT NULL , `rua_endereco` VARCHAR(50) NOT NULL , `num_endereco` DECIMAL(10,0) NOT NULL , `bairro_endereco` VARCHAR(50) NOT NULL , `cep_endereco` DECIMAL(10,0) NOT NULL , `cidade_endereco` VARCHAR(45) NOT NULL , `uf_endereco` VARCHAR(45) NOT NULL , `complemento_endereco` VARCHAR(45) NOT NULL , PRIMARY KEY (`id_endereco`) , UNIQUE INDEX `num_endereco_UNIQUE` (`num_endereco` ASC) , UNIQUE INDEX `endereco_empresa_UNIQUE` (`id_empresa` ASC) ) ENGINE = InnoDB; -- ----------------------------------------------------- -- Table `dm_tech`.`empresas` -- ----------------------------------------------------- CREATE TABLE IF NOT EXISTS `dm_tech`.`empresas` ( `id_empresa` INT NOT NULL AUTO_INCREMENT , `id_cliente` INT NOT NULL , `nome_empresa` VARCHAR(50) NOT NULL , `cnpj_empresa` DECIMAL(10,0) NOT NULL , UNIQUE INDEX `nome_empresa_UNIQUE` (`nome_empresa` ASC) , UNIQUE INDEX `cnpj_empresa_UNIQUE` (`cnpj_empresa` ASC) , PRIMARY KEY (`id_empresa`, `id_cliente`) , UNIQUE INDEX `id_cliente_UNIQUE` (`id_cliente` ASC) , CONSTRAINT `fk_empresas_telefones1` FOREIGN KEY (`id_empresa` ) REFERENCES `dm_tech`.`telefones` (`id_empresa` ) ON DELETE NO ACTION ON UPDATE NO ACTION, CONSTRAINT `fk_empresas_endereco1` FOREIGN KEY (`id_empresa` ) REFERENCES `dm_tech`.`enderecos` (`id_empresa` ) ON DELETE NO ACTION ON UPDATE NO ACTION) ENGINE = InnoDB; -- ----------------------------------------------------- -- Table `dm_tech`.`maquinas` -- ----------------------------------------------------- CREATE TABLE IF NOT EXISTS `dm_tech`.`maquinas` ( `id_maquina` INT NOT NULL AUTO_INCREMENT , `id_cliente` INT NOT NULL , `tombo_maquina` VARCHAR(45) NULL , `so_maquina` VARCHAR(50) NOT NULL , `hd_maquina` VARCHAR(45) NOT NULL , `processador_maquina` VARCHAR(45) NOT NULL , `memoria_maquina` VARCHAR(45) NOT NULL , `mobo_maquina` VARCHAR(50) NULL , `vga_maquina` VARCHAR(50) NULL , PRIMARY KEY (`id_maquina`) ) ENGINE = InnoDB; -- ----------------------------------------------------- -- Table `dm_tech`.`solicitacoes` -- ----------------------------------------------------- CREATE TABLE IF NOT EXISTS `dm_tech`.`solicitacoes` ( `id_solicitacao` INT NOT NULL AUTO_INCREMENT , `id_cliente` INT NOT NULL , `numero_solicitacao` DECIMAL(10,0) NOT NULL , `criacao_solicitacao` DATETIME NOT NULL , `status_solicitacao` VARCHAR(50) NOT NULL , `observacao_solicitacao` VARCHAR(50) NOT NULL , `data_alteracao_solicitacao` VARCHAR(45) NOT NULL , `comentario_solicitacao` VARCHAR(45) NOT NULL , PRIMARY KEY (`id_solicitacao`, `id_cliente`) , UNIQUE INDEX `numero_solicitacao_UNIQUE` (`numero_solicitacao` ASC) , UNIQUE INDEX `id_cliente_UNIQUE` (`id_cliente` ASC) ) ENGINE = InnoDB; -- ----------------------------------------------------- -- Table `dm_tech`.`solicitacoes_finalizadas` -- ----------------------------------------------------- CREATE TABLE IF NOT EXISTS `dm_tech`.`solicitacoes_finalizadas` ( `id_solicitacao_finalizada` INT NOT NULL AUTO_INCREMENT , `id_cliente` INT NOT NULL , `numero_solicitacao` DECIMAL(10,0) NOT NULL , `criacao_solicitacao` VARCHAR(45) NOT NULL , `status_solicitacao` VARCHAR(50) NOT NULL , `observacao_solicitacao` VARCHAR(50) NOT NULL , `data_alteracao_solicitacao` VARCHAR(45) NOT NULL , PRIMARY KEY (`id_solicitacao_finalizada`, `id_cliente`) , UNIQUE INDEX `numero_solicitacao_UNIQUE` (`numero_solicitacao` ASC) , UNIQUE INDEX `id_cliente_UNIQUE` (`id_cliente` ASC) ) ENGINE = InnoDB; -- ----------------------------------------------------- -- Table `dm_tech`.`clientes` -- ----------------------------------------------------- CREATE TABLE IF NOT EXISTS `dm_tech`.`clientes` ( `id_cliente` INT NOT NULL AUTO_INCREMENT , `matricula_cliente` DECIMAL(10,0) NOT NULL , `nome_cliente` VARCHAR(50) NOT NULL , `email_cliente` VARCHAR(50) NOT NULL , `login_cliente` VARCHAR(45) NOT NULL , `senha_cliente` VARCHAR(32) NOT NULL , `nivel_acesso_cliente` INT NOT NULL , `status_cliente` INT NOT NULL , UNIQUE INDEX `email_cliente_UNIQUE` (`email_cliente` ASC) , UNIQUE INDEX `login_cliente_UNIQUE` (`login_cliente` ASC) , PRIMARY KEY (`id_cliente`) , UNIQUE INDEX `matricula_cliente_UNIQUE` (`matricula_cliente` ASC) , CONSTRAINT `fk_clientes_empresas1` FOREIGN KEY (`id_cliente` ) REFERENCES `dm_tech`.`empresas` (`id_cliente` ) ON DELETE CASCADE ON UPDATE CASCADE, CONSTRAINT `fk_clientes_maquinas1` FOREIGN KEY (`id_cliente` ) REFERENCES `dm_tech`.`maquinas` (`id_cliente` ) ON DELETE CASCADE ON UPDATE CASCADE, CONSTRAINT `fk_clientes_solicitacoes1` FOREIGN KEY (`id_cliente` ) REFERENCES `dm_tech`.`solicitacoes` (`id_cliente` ) ON DELETE CASCADE ON UPDATE CASCADE, CONSTRAINT `fk_clientes_solicitacoes_finalizadas1` FOREIGN KEY (`id_cliente` ) REFERENCES `dm_tech`.`solicitacoes_finalizadas` (`id_cliente` ) ON DELETE CASCADE ON UPDATE CASCADE) ENGINE = InnoDB; SET SQL_MODE=@OLD_SQL_MODE; SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS; SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS; Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Março 18, 2012 Se o MySQL retornar o erro de número 1005 de uma instrução CREATE TABLE, e a string de mensagem de erro se referir ao errno 150, então a criação da tabela falhou porque um restrição de chaves estrangeiras não foi formada corretamente. Similarmente, se uma ALTER TABLE falhar e se referir ao errno 150, sgnifica que um definição de chave estrangeira foi formada incorretamente na tabela alterada. A partir da versão 4.0.13, você pode usar SHOW INNODB STATUS para ver uma explicação detalhada do ultimo erro de chave estrangeira do InnoDB no servidor. Sua definição parece errada. ... CONSTRAINT `fk_clientes_empresas1` FOREIGN KEY (`id_cliente` ) REFERENCES `dm_tech`.`empresas` (`id_cliente` ) ON DELETE CASCADE ON UPDATE CASCADE, ... Veja o exemplo do manual CREATE TABLE product (category INT NOT NULL, id INT NOT NULL, price DECIMAL, PRIMARY KEY(category, id)) TYPE=INNODB; CREATE TABLE customer (id INT NOT NULL, PRIMARY KEY (id)) TYPE=INNODB; CREATE TABLE product_order (no INT NOT NULL AUTO_INCREMENT, product_category INT NOT NULL, product_id INT NOT NULL, customer_id INT NOT NULL, PRIMARY KEY(no), INDEX (product_category, product_id), FOREIGN KEY (product_category, product_id) REFERENCES product(category, id) ON UPDATE CASCADE ON DELETE RESTRICT, INDEX (customer_id), FOREIGN KEY (customer_id) REFERENCES customer(id)) TYPE=INNOD Um campo da tabela filha é referência na tabela mãe. Fonte Compartilhar este post Link para o post Compartilhar em outros sites
Leandro Leal 0 Denunciar post Postado Agosto 7, 2012 Na verdade está +/- certo, o que faltou é uma vírgula entre CONSTRAIN e FOREIGN, tente abaixo: CREATE TABLE IF NOT EXISTS `dm_tech`.`clientes` ( `id_cliente` INT NOT NULL AUTO_INCREMENT , `matricula_cliente` DECIMAL(10,0) NOT NULL , `nome_cliente` VARCHAR(50) NOT NULL , `email_cliente` VARCHAR(50) NOT NULL , `login_cliente` VARCHAR(45) NOT NULL , `senha_cliente` VARCHAR(32) NOT NULL , `nivel_acesso_cliente` INT NOT NULL , `status_cliente` INT NOT NULL , UNIQUE INDEX `email_cliente_UNIQUE` (`email_cliente` ASC) , UNIQUE INDEX `login_cliente_UNIQUE` (`login_cliente` ASC) , PRIMARY KEY (`id_cliente`) , UNIQUE INDEX `matricula_cliente_UNIQUE` (`matricula_cliente` ASC) , CONSTRAINT `fk_clientes_empresas1`, FOREIGN KEY (`id_cliente` ) REFERENCES `dm_tech`.`empresas` (`id_cliente` ) ON DELETE CASCADE ON UPDATE CASCADE, CONSTRAINT `fk_clientes_maquinas1`, FOREIGN KEY (`id_cliente` ) REFERENCES `dm_tech`.`maquinas` (`id_cliente` ) ON DELETE CASCADE ON UPDATE CASCADE, CONSTRAINT `fk_clientes_solicitacoes1`, FOREIGN KEY (`id_cliente` ) REFERENCES `dm_tech`.`solicitacoes` (`id_cliente` ) ON DELETE CASCADE ON UPDATE CASCADE, CONSTRAINT `fk_clientes_solicitacoes_finalizadas1`, FOREIGN KEY (`id_cliente` ) REFERENCES `dm_tech`.`solicitacoes_finalizadas` (`id_cliente` ) ON DELETE CASCADE ON UPDATE CASCADE) ENGINE = InnoDB; Abraços, Leandro Leal Compartilhar este post Link para o post Compartilhar em outros sites