Una secuencia en PostgreSQL es un objeto vinculado a un esquema definido por el usuario que genera una secuencia de números enteros en función de una especificación específica. La declaración CREATE SEQUENCE se usa para crear secuencias en PostgreSQL.
Syntax: CREATE SEQUENCE [ IF NOT EXISTS ] sequence_name [ AS { SMALLINT | INT | BIGINT } ] [ INCREMENT [ BY ] increment ] [ MINVALUE minvalue | NO MINVALUE ] [ MAXVALUE maxvalue | NO MAXVALUE ] [ START [ WITH ] start ] [ CACHE cache ] [ [ NO ] CYCLE ] [ OWNED BY { table_name.column_name | NONE } ]
Ahora analicemos la sintaxis anterior:
- Primero, establezca el nombre de la secuencia después de la cláusula CREATE SEQUENCE. IF NOT EXISTS crea condicionalmente una nueva secuencia solo si no existe.
- En segundo lugar, especifique el tipo de datos de la secuencia. Los tipos de datos válidos son SMALLINT , INT y BIGINT . El tipo de datos predeterminado es BIGINT si lo omite. Se utiliza para determinar los valores mínimo y máximo de la secuencia.
- El incremento especifica qué valor se agregará al valor de secuencia actual para crear un nuevo valor. Un número positivo hará una secuencia ascendente mientras que un número negativo formará una secuencia descendente. El valor de incremento predeterminado es 1.
- Luego, definimos el valor mínimo y el valor máximo de la secuencia. Si usa NO MINVALUE o NO MAXVALUE, la secuencia usará el valor predeterminado. Para una secuencia ascendente, el valor máximo predeterminado es el valor máximo del tipo de datos de la secuencia y el valor mínimo predeterminado es 1, mientras que en el caso de una secuencia descendente, el valor máximo predeterminado es -1 y el valor mínimo predeterminado es el mínimo. valor del tipo de datos de la secuencia.
- La cláusula START especifica el valor inicial de la secuencia.
- El CICLO le permite reiniciar el valor si se alcanza el límite. El siguiente número será el valor mínimo para la secuencia ascendente y el valor máximo para la secuencia descendente. Si usa SIN CICLO, cuando se alcance el límite, intentar obtener el siguiente valor resultará en un error. SIN CICLO es el valor predeterminado si no especifica explícitamente CICLO o SIN CICLO.
- La cláusula OWNED BY le permite asociar la columna de la tabla con la secuencia, de modo que cuando suelte la columna o la tabla, PostgreSQL eliminará automáticamente la secuencia asociada.
Ahora pasemos a algunos ejemplos.
Ejemplo 1:
En este ejemplo, usaremos la declaración CREATE SEQUENCE para crear una nueva secuencia ascendente a partir de 10 con un incremento de 5:
CREATE SEQUENCE mysequence INCREMENT 5 START 10;
Para obtener el siguiente valor de la secuencia, use la nextval()
función:
SELECT nextval('mysequence');
Dará como resultado el siguiente resultado:
Ahora si repetimos la función nexval() obtenemos el valor incrementado.
Producción:
Ejemplo 2:
La siguiente declaración crea una secuencia descendente de 3 a 1 con la opción de ciclo:
CREATE SEQUENCE three INCREMENT -1 MINVALUE 1 MAXVALUE 3 START 3 CYCLE;
Cuando ejecute la siguiente declaración varias veces, verá el número que comienza en 3, 2, 1 y vuelve a 3, 2, 1 y así sucesivamente:
SELECT nextval('three');
Producción:
Ejemplo 3:
en este ejemplo, crearemos una secuencia asociada con una columna de la tabla usando la declaración a continuación:
CREATE TABLE order_details( order_id SERIAL, item_id INT NOT NULL, product_id INT, product_name TEXT NOT NULL, price DEC(10, 2) NOT NULL, PRIMARY KEY(order_id, item_id) );
En segundo lugar, crea una nueva secuencia asociada a la item_id
columna de la order_details
tabla:
CREATE SEQUENCE order_item_id START 10 INCREMENT 10 MINVALUE 10 OWNED BY order_details.item_id;
En tercer lugar, inserte tres líneas de pedido en la order_details
tabla:
INSERT INTO order_details(order_id, item_id, product_name, price) VALUES (100, nextval('order_item_id'), 'DVD Player', 100), (100, nextval('order_item_id'), 'Android TV', 550), (100, nextval('order_item_id'), 'Speaker', 250);
Cuarto, consulte los datos de la tabla order_details:
SELECT order_id, item_id, product_name, price FROM order_details;
Producción:
Publicación traducida automáticamente
Artículo escrito por RajuKumar19 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA