2009-10-30 15 views

Respuesta

32

La clave principal es una columna en una tabla.

La clave principal necesita un valor único, que debe provenir de algún lugar.

La secuencia es una característica de algunos productos de base de datos que solo crea valores únicos. Simplemente incrementa un valor y lo devuelve. Lo especial es que no hay aislamiento de transacción, por lo que varias transacciones no pueden obtener el mismo valor, el incremento tampoco se retrotrae. Sin una secuencia de base de datos, es muy difícil generar números incrementales únicos.

Otros productos de bases de datos admiten columnas que se inicializan automáticamente con un número creciente.

Existen otros medios para crear valores únicos para las claves principales, por ejemplo, Guids.

+0

Si no hay aislamiento de transacción, ¿cómo podría usarse? – rapt

+4

No hay aislamiento de transacción para la generación de los id. Siempre devuelve el siguiente valor de la secuencia. El aislamiento de transacción significaría que la transacción paralela obtendría el mismo valor o que uno debería esperar a que la otra transacción se comprometa para poder obtener el siguiente valor. Esto no es requerido ni útil. –

3

La secuencia le permitirá completar la clave principal con un número único y serializado.

Es diferente de una clave principal serial o auto_incremement en el sentido de que:

  • Es un objeto de base de datos real (que necesita para crearla):

    sql> create sequence NAME_OF_YOUR_SEQUENCE;

  • Usted podría asignarle permisos independientes a diferentes usuarios de la base de datos:

    sql> grant select on NAME_OF_YOUR_SEQUENCE to NAME_OF_YOUR_USER;

  • Puede utilizar para tener un número único que es diferente entre varias tablas (no solo una). Supongamos que tiene cuatro tablas con claves primarias numéricas, y desea números únicos entre esas cuatro tablas. Podría usar una secuencia para eso, sin tener que preocuparse por implementar mecanismos de bloqueo para hacerlo 'a mano'.

  • Puede cambiar su número a cualquier valor que desee con alter sequence

  • Puede desplazarse a través de sus números de

    sql> create sequence NAME_OF_YOUR_SEQUENCE maxvalue 1500 cycle;

+0

Entonces, ¿cómo se diferencia una secuencia de una clave primaria auto_increment? ¿O es realmente una secuencia? – Blaise

+1

Verifique mi respuesta actualizada @Blaise –

5

La clave principal es (en términos técnicos) simplemente un índice que refuerza la unicidad (además de acelerar el rendimiento de las consultas). Hay cierta información semántica que es la "clave" para la entidad que describe la fila, pero eso es todo.

Una secuencia es una entidad diferente por completo; existe separada de las tablas (como lo haría un procedimiento almacenado) y puede llamarse para producir números secuenciales.

Los dos se utilizan a menudo juntos, para generar claves primarias automáticas para entidades que no tienen claves "nativas" razonables. Pero son dos conceptos separados; puede tener tablas donde la clave primaria se rellena explícitamente durante una inserción, y puede tener secuencias que se utilizan para poblar columnas que no sean PK (o incluso que se utilicen imperativamente durante un procedimiento almacenado, distinto de la inserción de registros).

Cuestiones relacionadas