Jump to content


Photo

Criar Tabelas No Mysql


  • Faça o login para participar
4 replies to this topic

#1 gutostraube

gutostraube

    Normal

  • Usuários
  • 71 posts
  • Sexo:Não informado

Posted 27/09/2006, 21:54

Olá pessoal!

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. 1005
Pelo 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!!!
Gustavo Straube
Analista de Sistemas

#2 Petry

Petry

    Veterano

  • Usuários
  • 1132 posts
  • Sexo:Masculino
  • Localidade:Caxias do Sul - RS
  • Interesses:- desenvolvimento WEB<br />- websemântica<br />- microformatos

Posted 28/09/2006, 10:04

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 servidor aonde tu tah colocando o banco permite colocar tabelas do tipo INNODB? tem servidores que não permitem....

Posted Image

- Desenvolvedor Python/ZOPE/Plone + ArchGenXML/Poseidon - Python + Django na Universidade de Caxias do Sul
- Desenvolvedor Python + Django na World News

Blog

#3 gutostraube

gutostraube

    Normal

  • Usuários
  • 71 posts
  • Sexo:Não informado

Posted 28/09/2006, 14:25

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 servidor aonde tu tah colocando o banco permite colocar tabelas do tipo INNODB? tem servidores que não permitem....


Permite sim...

Uma amiga DBA achou o problema! :D

É que eu coloquei tipos diferentes para referências e chaves...

Por exemplo, a PK da tb_status é:

status TINYINT UNSIGNED NOT NULL,
E na tb_empresa, a referência, é:

status TINYINT NOT NULL DEFAULT 0,
O problema está na falta do UNSIGNED. ;)
Gustavo Straube
Analista de Sistemas

#4 themols

themols

    Novato no fórum

  • Usuários
  • 1 posts
  • Sexo:Masculino
  • Localidade:Maringa - PR

Posted 04/05/2010, 08:48

Bom dia, embora o topico a cima seja estremamente velho, ultimamente tenho tido um problema semelhante na criaçao de FK no mysql hoje consultando uns foruns constatei a soluçao para o erro no caso o famoso #errno 1005 segue o exemplo de acordo com o manual do mesmo e a solução.


CREATE TABLE Pais (
pais_cod INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
pais_nome VARCHAR(100) NULL,
PRIMARY KEY(pais_cod)
);


CREATE TABLE estado (
id_estado INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
pais INTEGER UNSIGNED NOT NULL,
uf CHAR(4) NULL,
logo VARCHAR(50) NULL,
estado VARCHAR(50) NULL,
PRIMARY KEY(id_estado),
INDEX(pais),
FOREIGN KEY(pais)
REFERENCES Pais(pais_cod)
ON DELETE NO ACTION
ON UPDATE NO ACTION
);


CREATE TABLE municipios (
id_municipio INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
estado INTEGER UNSIGNED NOT NULL,
municipio VARCHAR(150) NULL,
PRIMARY KEY(id_municipio),
INDEX(estado),
FOREIGN KEY(estado)
REFERENCES estado(id_estado)
ON DELETE NO ACTION
ON UPDATE NO ACTION
);

#5 RonsisM

RonsisM

    Super Veterano

  • Usuários
  • 15724 posts
  • Sexo:Masculino
  • Localidade:Plovdiv

Posted 11/10/2017, 12:47

Kamagra Chewable Generic Hydrochlorothiazide Saturday Delivery Viagra Aux Herbes Forum levitra from canada Serevent
Amoxicillin Safe Dose Fluoxetine 40mg buy accutane online safe buy cialis Comprar Cialis Generico Con Garantia Amoxicillin Eg
Cialis 20 Mg Wikipedia Cialis Y Para Que Sirve viagra Viagra Extra Dose Reputable Ed Pills Canada




0 user(s) are reading this topic

0 membro(s), 0 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq