Ir para conteúdo
Fórum Script Brasil
  • 0

erro na criacao da tabela.


Lafey

Pergunta

Fala pessoal beleza to tentando criar essa tabela seguinte e da um erro... mostro ele abaixo e logo em seguida as outras tabelas. a pergunta é o que tem de errado nessa budega?!

create table if not exists tb_condutores(
    codigo int(10) unsigned zerofill not null auto_increment,
    nome_completo varchar(80) not null,
    endereco varchar(100) not null,
    cep varchar(10) not null,
    cpf varchar(15) not null unique,
    rg varchar(13) not null unique,
    data_nascimento date not null,
    cidade varchar(50) not null,
    estado varchar(20) not null,
    primary key(codigo),
    foreign key (cidade) references tb_cidades(nome) on delete cascade on update no action,
    foreign key (estado) references tb_estados(nome) on delete cascade on update no action)Engine = InnoDB;
erro: Código do erro 1005, estado do SQL HY000: Can't create table 'db_transito.tb_condutores' (errno: 150) Outras tabelas das chaves estrangeiras:
CREATE TABLE `tb_cidades` (
  `id` int(4) unsigned zerofill NOT NULL auto_increment,
  `estado` int(2) unsigned zerofill NOT NULL default '00',
  `uf` varchar(4) NOT NULL default '',
  `nome` varchar(50) NOT NULL default '',
  UNIQUE KEY `id` (`id`),
  KEY `id_2` (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=9715 DEFAULT CHARSET=latin1 AUTO_INCREMENT=9715;
CREATE TABLE `tb_estados` (
  `id` int(2) unsigned zerofill NOT NULL auto_increment,
  `uf` varchar(10) NOT NULL default '',
  `nome` varchar(20) NOT NULL default '',
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=28 DEFAULT CHARSET=latin1 AUTO_INCREMENT=28;

abraços.

Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 0

Oi, 'Lafey'

Você está errando na normalização destas tabelas além de estar errando na ligação de foreign key entre elas.

Faça assim:

CREATE TABLE `tb_estados` (
  `idestados` int(2) unsigned zerofill NOT NULL auto_increment,
  `uf` varchar(10) NOT NULL default '',
  `nome` varchar(20) NOT NULL default '',
  PRIMARY KEY  (`idestados`)
) ENGINE=InnoDB AUTO_INCREMENT=28 DEFAULT CHARSET=latin1 AUTO_INCREMENT=28;
CREATE TABLE `tb_cidades` (
  `idcidades` int(4) unsigned zerofill NOT NULL auto_increment,
  `idestados` int(2) unsigned zerofill NOT NULL default '00',
  `nome` varchar(50) NOT NULL default '',
  PRIMARY KEY (`idcidades`),
  foreign key (idestados) references tb_estados(idestados) on delete cascade on update no action
) ENGINE=InnoDB AUTO_INCREMENT=9715 DEFAULT CHARSET=latin1 AUTO_INCREMENT=9715;
create table if not exists tb_condutores(
    idcondutores int(10) unsigned zerofill not null auto_increment,
    nome_completo varchar(80) not null,
    endereco varchar(100) not null,
    cep varchar(10) not null,
    cpf varchar(15) not null unique,
    rg varchar(13) not null unique,
    data_nascimento date not null,
    `idcidades` int(4) unsigned zerofill NOT NULL DEFAULT '0000',
    primary key(idcondutores),
    foreign key (idcidades) references tb_cidades(idcidades) on delete cascade on update no action
)Engine = InnoDB;

1) Você só pode ligar uma tabela pai a uma tabela fila depois que a tabela filha foi criada. ou seja crie primeiro as tabelas filhas e depois a tabela pai.

2) A ligação entre a tabela filha e a tabela pai é através da chave primária da tabela filha e não através de um campo qualquer.

3) Evide usar campos caracter para ligação entre tabelas.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...