¿Por qué creamos una secuencia incluso si hay una clave principal?¿Qué es una secuencia (Base de datos)? ¿Cuándo lo necesitaríamos?
Respuesta
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.
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;
Entonces, ¿cómo se diferencia una secuencia de una clave primaria auto_increment? ¿O es realmente una secuencia? – Blaise
Verifique mi respuesta actualizada @Blaise –
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).
- 1. ¿Qué es SAPI y cuándo lo usarías?
- 2. MSBuild: ¿Qué es y cuándo lo necesito?
- 3. ¿Qué es una "base de datos generalizada"?
- 4. ¿Qué es una sesión de base de datos?
- 5. C++: ¿Qué es una secuencia
- 6. ¿Qué es lo opuesto a una clase base en OOP?
- 7. ¿Qué es un bus de servicio y cuándo lo necesito?
- 8. ¿Qué es SELF JOIN y cuándo lo usarías?
- 9. ¿Qué es el bloqueo en MySQL y cuándo lo usarías?
- 10. ¿Qué es un Manifiesto en Scala y cuándo lo necesitas?
- 11. ¿Cuándo uso una base de datos separada de CouchDB?
- 12. ¿Por qué necesitamos una base de datos temporal?
- 13. ¿Cuándo debería usar una base de datos de objetos?
- 14. ¿Cuándo compactas una base de datos de servidor Sql?
- 15. ¿Qué es una transacción de base de datos?
- 16. ¿Qué es DEMASIADO GRANDE para una base de datos?
- 17. SQL ¿Cuándo crear una nueva base de datos?
- 18. ¿Qué es una base de datos en columnas?
- 19. Base de datos: ¿Qué es el Control de Concurrencia Multiversion (MVCC) y quién lo admite?
- 20. ¿Cuándo se llama una base de datos como base de datos incrustada?
- 21. Cuándo usar LDAP en una base de datos?
- 22. ¿Qué es lo que realmente hace una limpieza de TortoiseSVN?
- 23. ¿Qué significa aspirar una base de datos?
- 24. ¿Cuándo una tabla de base de datos crece lo suficiente como para que un índice sea beneficioso?
- 25. ¿En qué casos prueba con una base de datos en memoria en lugar de una base de datos de desarrollo?
- 26. ¿Cuándo/por qué debería comenzar a usar una base de datos?
- 27. ¿Qué es "lo suficientemente desinfección" para una dirección URL
- 28. Entity Framework está tratando de crear una base de datos, pero no es lo que quiero
- 29. Al desarrollar aplicaciones web, ¿cuándo usarías una base de datos Graph versus una base de datos Document?
- 30. ¿Cuándo Google Analytics no es lo suficientemente bueno?
Si no hay aislamiento de transacción, ¿cómo podría usarse? – rapt
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. –