O que é uma sequência (base de dados)? Para quando precisaríamos dele?

Porque criaríamos uma sequência, mesmo que houvesse uma chave primária?

 29
Author: Nickz2, 2009-10-30

3 answers

A chave primária é uma coluna numa tabela.

A chave primária precisa de um valor único, que tem de vir de algum lado.

A sequência é uma característica de alguns produtos de base de dados que apenas cria valores únicos. Só aumenta um valor e devolve-o. A coisa especial sobre ele é: não há isolamento de transação, por isso várias transações não podem obter o mesmo valor, o aumento também não é enrolado para trás. Sem uma sequência de banco de dados é muito difícil de gerar números únicos a aumentar.

Outros produtos de base de dados suportam colunas que são automaticamente inicializadas com um número crescente.

Existem outros meios para criar valores únicos para as chaves primárias, por exemplo Guids.

 37
Author: Stefan Steinegger, 2009-10-30 10:51:08

A chave primária é (em termos técnicos) meramente um índice que reforça a singularidade (bem como o desempenho da consulta em excesso de velocidade). Há alguma informação semântica ao longo disso sendo a "chave" para a entidade que a linha descreve, mas é isso.

Uma sequência é uma entidade completamente diferente; existe separada das tabelas (como um procedimento armazenado Faria) e pode ser chamada para produzir números sequenciais.

Os dois são frequentemente utilizados em conjunto, para gerar teclas primárias automáticas para entidades que não têm chaves "nativas" sensatas. Mas eles são dois conceitos separados; você pode ter tabelas onde a chave primária é explicitamente povoada durante uma inserção, e você pode ter sequências que são usadas para povoar colunas não-PK (ou mesmo usadas imperativamente durante um procedimento armazenado, distinto de inserir registros).

 5
Author: Andrzej Doyle, 2009-10-30 10:51:33

A sequência permitir-lhe-á preencher a chave primária com um número único e serializado.

É diferente de uma chave primária {[[0]} ou auto_incremement no sentido de que:

  • É um objecto de base de dados real (é preciso criá-lo):

    sql> create sequence NAME_OF_YOUR_SEQUENCE;

  • Pode atribuir-lhe permissões independentes, para diferentes Utilizadores de bases de dados:

    sql> grant select on NAME_OF_YOUR_SEQUENCE to NAME_OF_YOUR_USER;

  • Você pode usar para ter um número único que é diferente entre várias tabelas (não apenas um). Digamos que você tem quatro tabelas com chaves primárias numéricas, e você quer números únicos entre essas quatro tabelas. Você poderia usar uma seqüência para isso, sem ter que se preocupar com a implementação de mecanismos de bloqueio para fazê-lo 'à mão'.

  • Você pode mudar o seu número para qualquer valor que você quiser com alter sequence

  • Podes circular através dos seus números

    sql> create sequence NAME_OF_YOUR_SEQUENCE maxvalue 1500 cycle;

 5
Author: Pablo Santa Cruz, 2018-02-01 10:54:47