Ir para conteúdo

POWERED BY:

Arquivado

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

marlowe

problema com chave estrangeira

Recommended Posts

Olá pessoal. estou com um problema que é o seguinte: tenho um cadastro com dados de funcionários que possue muitos campos. Por ser extenso, mesmo se tratando da mesma entidade, resolvi dividir em duas tabelas. Usando o InnoDB, acredito que posso manter a integridade referencial, ligando as duas com chave estrangeira. Tentei fazer isso usando as duas chaves primárias (cpf e CPF_1), mas está dando erro. Se alguém puder ajudar, serei grato.

 

 

 

Abaixo, o SQL das tabelas e o erro apontado pelo MySQL

 

 

CREATE TABLE `dados_1` (

`nome` varchar(60) character set latin1 NOT NULL,

`cpf` char(11) collate latin1_general_ci NOT NULL,

`matricula` varchar(9) collate latin1_general_ci NOT NULL,

`end_residecial` varchar(60) character set latin1 NOT NULL,

`bairro` varchar(30) character set latin1 NOT NULL,

`cidade` varchar(20) character set latin1 NOT NULL,

`cep` varchar(8) collate latin1_general_ci NOT NULL,

`data_nasc` date NOT NULL,

`orgao` char(3) collate latin1_general_ci NOT NULL,

`cargo` varchar(50) character set latin1 NOT NULL,

`nivel_plano_1` char(3) collate latin1_general_ci NOT NULL,

`nivel_plano_2` varchar(20) collate latin1_general_ci NOT NULL,

`admitido_em` date NOT NULL,

`sal_base` decimal(12,2) NOT NULL,

`sal_liquido` decimal(12,2) NOT NULL,

`sal_bruto` decimal(12,2) NOT NULL,

`mensalidade` decimal(12,2) NOT NULL,

`inserido_por` varchar(20) collate latin1_general_ci default 'Marcos e

Júnior',

`inserido_em` date NOT NULL,

`alterado_por` varchar(10) character set latin1 NOT NULL,

`alterado_em` date NOT NULL,

PRIMARY KEY (`cpf`)

) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci

COMMENT='tabela sias dados urgentes';

 

 

 

CREATE TABLE `dados_2` (

`CPF_1` varchar( 11 ) COLLATE latin1_general_ci NOT NULL ,

`rg` varchar( 30 ) COLLATE latin1_general_ci NOT NULL ,

`fone_res` varchar ( 9 ) COLLATE latin1_general_ci NOT NULL ,

`celular` varchar( 12 ) COLLATE latin1_general_ci NOT NULL ,

`email` varchar( 60 ) CHARACTER SET latin1 NOT NULL ,

`nome_da_mae` varchar( 80 ) CHARACTER SET latin1 NOT NULL ,

`nome_do_pai` varchar( 80 ) CHARACTER SET latin1 NOT NULL ,

`estado_civil` varchar( 15 ) COLLATE latin1_general_ci NOT NULL ,

`dependentes` char( 2 ) COLLATE latin1_general_ci NOT NULL ,

`serv_empreg` set( 'servidor', 'empregado' ) COLLATE latin1_general_ci NOT

NULL ,

`concursado` set( 'sim', 'não' ) CHARACTER SET latin1 NOT NULL ,

`unidade_trab` varchar ( 60 ) CHARACTER SET latin1 NOT NULL ,

`end_trabalho` varchar ( 60 ) CHARACTER SET latin1 NOT NULL ,

`bairro_trab` varchar ( 60 ) COLLATE latin1_general_ci NOT NULL ,

`cep_trab` varchar( 8 ) COLLATE latin1_general_ci NOT NULL ,

`fone_trab` varchar( 12 ) COLLATE latin1_general_ci NOT NULL ,

`funcao` varchar( 50 ) CHARACTER SET latin1 NOT NULL ,

`renda_fam` decimal( 12, 2 ) NOT NULL ,

`outra_profissao` varchar( 80 ) CHARACTER SET latin1 NOT NULL ,

`carga_horaria` int( 4 ) NOT NULL ,

`horario_trab` varchar( 10 ) COLLATE latin1_general_ci NOT NULL ,

`hora_extra` set( 'sim', 'não' ) CHARACTER SET latin1 NOT NULL ,

`produtividade` set( 'sim', 'não' ) COLLATE latin1_general_ci NOT NULL ,

`socio_desde` date NOT NULL ,

`ativ_artistica_cult` varchar( 60 ) CHARACTER SET latin1 NOT NULL ,

`tipo_moradia` varchar( 50 ) CHARACTER SET latin1 NOT NULL ,

`area_de_risco` set( 'sim', 'não' ) CHARACTER SET latin1 NOT NULL ,

`escolaridade_formacao` varchar ( 60 ) CHARACTER SET latin1 NOT NULL ,

`estuda` set ( 'sim', 'não' ) CHARACTER SET latin1 NOT NULL ,

`horario_estudo` varchar( 10 ) CHARACTER SET latin1 NOT NULL ,

`cursos_qualificacao` text CHARACTER SET latin1 NOT NULL ,

`acao_judicial` set ( 'sim', 'não' ) CHARACTER SET latin1 NOT NULL ,

`isonomia` set( 'sim' , 'não' ) CHARACTER SET latin1 NOT NULL ,

`processos` text CHARACTER SET latin1 NOT NULL ,

`andamento_proc` text CHARACTER SET latin1 NOT NULL ,

`inserido_por` varchar( 10 ) CHARACTER SET latin1 NOT NULL ,

`inserido_em` date NOT NULL ,

`alterado_por` varchar ( 10 ) CHARACTER SET latin1 NOT NULL ,

`alterado_em` date NOT NULL ,

PRIMARY KEY ( `CPF_1` ) FOREIGN KEY ( `CPF_1` ) REFERENCES dados_1( cpf )

ON DELETE CASCADE ) ENGINE = InnoDB DEFAULT CHARSET = latin1 COLLATE =

latin1_general_ci COMMENT = 'segunda tabela do SIAS Principal'

 

 

Mensagens do MySQL : #1064 - You have an error in your SQL syntax; check

the manual that corresponds to your MySQL server version for the right

syntax to use near 'FOREIGN KEY (`CPF_1`) REFERENCES dados_1(cpf) ON DELETE

CASCADE

) ENGINE=InnoDB' at line 42

Compartilhar este post


Link para o post
Compartilhar em outros sites

repare que os tipos de dados são diferentes:

 

`cpf` char(11)

`CPF_1` varchar( 11 )

 

sendo que eles tem que ser do mesmo tipo

 

espero ter ajudado.

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.