Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Cyberoma

Error 1005: Can’t create table (errno: 150)

Recommended Posts

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
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

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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.