Fefes 0 Denunciar post Postado Novembro 21, 2007 Pessoal, dentro de uma tabela no Mysql, é possível criar uma chave secundária (sem ser estrangeira) ? Outra pergunta : alguém pode me explicar ou me indicar algum documento que explica melhor: regras de validação, integridade e consistência no MySQL ? Obrigadinha Compartilhar este post Link para o post Compartilhar em outros sites
eriva_br 7 Denunciar post Postado Novembro 21, 2007 movido de SQL Server para mySql Compartilhar este post Link para o post Compartilhar em outros sites
Wagner Bianchi 0 Denunciar post Postado Novembro 21, 2007 Opa, São as chaves estrangeiras implícitas, ou seja, desvinculadas...quando se trabalha com tabelas MyISAM pode se ter esse tipo de chave, mas a engenharia de armazenamento MyISAM não dá suporte à integridade referencial, o que de vez em quando nos dá um pouco de dor de cabeça, pois você facilmente consegue inserir na tabela filha, registros que não fazem parte da chave primária da tabela pai. Já as tabelas que são gerenciadas sob a engenharia de arnazenamento InnoDB, dá suporte a integridade referencial e tipo possibilita somente cadastrar na tabela filha, registros que façam parte da tabela pai. Caso você tente inserir no filho um registro que não faz parte da chave primária na tabela pai, um erro de CONSTRAINT será emitido e o INSERT ou UPDATE será descartado. Tendo a tabela A: CREATE TABLE A (id int(5) PRIMARY KEY, nome char(50)) Engine=INNODB; Tendo a tabela B: CREATE TABLE B (id int(5), idade tinyint, constraint fk_b_a FOREIGN KEY (id) REFERENCES A(id)) Engine=INNODB; Para que o comando de criação de foreign key funcione, siga as seguintes diretrizes: -> As duas tabelas devem ser do tipo InnoDB (a tabela não é INNODB, ela somente é controlada pela engenharia de armazenamento INNODB, pois o MySQL trabalha de forma modular "MySQL 5.0 Certification Guide - página 354, tópico 23.3"); -> os tipos de dados da PRIMARY KEY e da FOREIGN KEY devem ser o mesmo; -> o nome da coluna pode ser diferente; Faça os inserts em A depois em B. Tente inserir em B algum registro que não tem em A e veja o que acontece. No exemplo acima não indexamos os campos envolvidos na criação da foreign key, o MySQL faz isso automaticamete se você não fizer. Uma referência completa desse assunto, pode ser acessada em: http://dev.mysql.com/doc/refman/5.0/en/inn...onstraints.html Abração, DEUS abençõe!! http://forum.imasters.com.br/public/style_emoticons/default/natal_tongue.gif Compartilhar este post Link para o post Compartilhar em outros sites