Jump to content
Fivewin Brasil

UNIQUE X PRIMARY


sunset

Recommended Posts

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.

image.png.fdbad346084ad87be7cf1c3b6c1dfa08.png

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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

 

Link to comment
Share on other sites

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.

 

 

Link to comment
Share on other sites

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!

 

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...