sunset Posted April 23, 2021 Report Share Posted April 23, 2021 Boa tarde Estou querendo uma aula sobre o uso de UNIQUE X PRIMARY, atualmente uso a sqlrdd, então, qual a diferença no uso delas, o meu problema tenho que fazer o dump de uma banco para outra base e na outra base o banco esta configurado como primary key, então quando o dump esta subindo apresenta erro, no FW tenho como ja usar PRIMARY inves de UNIQUE. meu banco esta assim atualmente quando e criado o sr_recno ja vem com a unique. Grato por qualquer luz no caminho. Quote Link to comment Share on other sites More sharing options...
Wellington Vieira Posted April 23, 2021 Report Share Posted April 23, 2021 boa tarde, A unique key garante a unicidade de informações na sua tabela. A primary key também porém esta última pode ser utilizada para relacionamentos de foreign key com outras tabelas. Geralmente chaves únicas (unique key) também pode ter registros nulos, por isso não podem ser chave primária Deve-se ficar atento a isso, ou seja é que colunas unique podem ser NULL, enquanto que coluna primary key, não podem. Quote Link to comment Share on other sites More sharing options...
Wellington Vieira Posted April 23, 2021 Report Share Posted April 23, 2021 Criando tabela no FW. if oserver:tableexists("adconfiggeral") else cquery := 'create table adconfiggeral(' cquery += 'seqconf serial primary key,' // PRIMARY KEY... cquery += 'seqcontroledocumento integer,' cquery += 'seqprodutos integer,' cquery += 'seqentradasaida integer,' cquery += 'sequencianotafiscal boolean,' cquery += 'pesqcliente character(20),' cquery += 'pesqfornecedor character(20),' cquery += 'pesqrepresentante character(20),' cquery += 'pesqtransportador character(20),' cquery += 'pesqproduto character(20),' cquery += 'seqgarantias integer,' cquery += 'boletogeral boolean,' cquery += 'seqromaneios integer)' oquery := oserver:query(cquery) if oquery:neterr() // msg de erro endif oquery:destroy() endif Quote Link to comment Share on other sites More sharing options...
emotta Posted April 23, 2021 Report Share Posted April 23, 2021 Primary key é sempre UNIQUE mas nem tudo que é UNIQUE é primary key. Primary key é a chave que nunca se repete na tabela. No caso do SQLRDD como padrão a PK (primary key) é sempre o SR_RECNO que por sua vez é um campo auto incremental. O que deve estar acontecendo no seu caso é que quando você esta gravando os dados do campo DESTINO já existe na tabela o SR_RECNO que está vindo da origem. Por exemplo, um registro na origem tem o SR_RECNO = 1000 e no destino já existe um SR_RECNO = 1000 Se fosse apenas um indice normal INIQUE até da pra desligar a checagem de duplicidade e ligar depois mas para PRIMARY KEY não da pra fazer isso. Talvez o caminho seja deletar a PK fazer o DUMP, corrigir o SR_RECNO para que ele não tenha duplicidade e criar novamente a PK, mas não sei os problemas e nem os comandos para fazer isso. Detalhe: Cada tabela tem apenas 1 PK, porem indices UNIQUE pode ter vários. Então não confunda PK com INDICE. Quote Link to comment Share on other sites More sharing options...
Jmsilva Posted April 23, 2021 Report Share Posted April 23, 2021 3 horas atrás, Wellington Vieira disse: boa tarde, A unique key garante a unicidade de informações na sua tabela. A primary key também porém esta última pode ser utilizada para relacionamentos de foreign key com outras tabelas. Geralmente chaves únicas (unique key) também pode ter registros nulos, por isso não podem ser chave primária Deve-se ficar atento a isso, ou seja é que colunas unique podem ser NULL, enquanto que coluna primary key, não podem. Muito bom! Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.