Fórum Transações concorrentes #38420

29/08/2003

0

Bom dia a todos.

Vejam o seguinte exemplo:

* inicio a Transação A.
* SELECT maior codigo de chave primaria into codigo;
* codigo:=codigo+1;
* INSERT novo registro com a chave primária ´codigo´;
* COMITT a Transação A;

Se acontecer o seguinte:

* inicio a Transação A.
* SELECT maior codigo de chave primaria into codigo;

// a Transação B faz o mesmo ´SELECT maior codigo de chave primaria into codigo´ já que a Transação A não travou o registro para leitura//

* codigo:=codigo+1;
* INSERT novo registro com a chave primária ´codigo´;
* COMITT a Transação A;

Não iria gerar uma violação de chave primária ou a Transação B não teria acesso aos registros até que a Transação A fosse comitada?


Matche

Matche

Responder

Posts

29/08/2003

Afarias

|Não iria gerar uma violação de chave primária ou a Transação B não
|teria acesso aos registros até que a Transação A fosse comitada?

Por isso q o código q vc descreveu é completamente inaceitável em sistemas multi-usuário. Cada SGBD possui uma solução para códigos sequenciais q deve ser utilizada! No caso do Interbase/Firebird, SEMPRE use GENERATORS.


T+


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar