Luego, tenemos las columnas identidad. Una columna

Anuncio
Luego, tenemos las columnas identidad.
Una columna identidad es una columna numérica en la tabla
que crea automáticamente un valor numérico único
en secuencia para cada fila insertada
un identificador único a menudo es usado por las aplicaciones para identificar una fila
determinada.
a diferencia de los objetos de secuencia, que veremos más adelante,
las columnas identidad están ligadas a las tablas en las cuales se definen.
Sólo puede haber una columna identidad por tabla.
DB2 puede generar los valores identidad de dos maneras:
"generating allways" significa que los valores son siempre generados por DB2.
No se les permite a las aplicaciones proporcionar un valor explícito.
“generated by default”
aquí los valores pueden ser explicitados por una aplicación.
Si no se da un valor, DB2 genera uno
En este caso, DB2 no puede garantizar la exclusividad
de los valores generados.
Para crear una columna de identidad, utilizas
la instrucción 'CREATE TABLE' con la cláusula 'generated'
y asegúrate que contiene la palabra clave de identity
porque 'generated' se puede utilizar para
generar otros valores de forma automática
que no son las columnas identidad.
Echemos un vistazo al siguiente script
En este script llamado test.bat
primero, se conecta a la base de datos SAMPLE
y luego se elimina la tabla product
Lo utilizamos para iniciar de cero, en caso de que queramos volver a ejecutar este
script muchas veces, tengo pensado hacer esto en este caso
luego se crea la tabla product
Ahora vemos que esta tabla tiene una columna llamada 'productno'
definida de tipo entero. Y es una columna de identidad
porque se ha utilizado 'generated always as identity'.
El valor se generará a partir de 200
y se incrementará en 1.
Más tarde introduciremos valores en esta
tabla y utilizaremos la opción '+c'
para desactivar el auto-commit (auto confirmación), porque vamos a hacer un rollback.
Y vamos a ver lo que sucede cuando
hacemos rollback, mientras se generan valores para la columna identidad
Así que, simplemente, vamos a ejecutar este script escribiendo "test.bat” y presionando enter
Entonces, se conecta a la base de datos SAMPLE, se elimina la tabla product
ocurre con éxito porque la había existía, se crea la tabla nuevamente
Al comenzar a insertar los valores, el primero no
tiene problema, el segundo sin problemas
y el tercero da un error.
Y el mensaje de error es SQL0798N
el valor no puede ser especificado para la columna 'productno'
¿Qué sucede? te mostraré en un momento
volvemos al script, a la declaración
Que nos dio el error, que en realidad,
explícitamente, he colocado el valor de 300.
Pero como esta columna se definió como "generated allways"
lo que significa que DB2 tiene
que generar siempre los valores, es por eso que obtenemos
el mensaje de error: SQL0798N.
A continuación, el commit fue exitoso, entonces todas las
filas que se insertaron son almacenadas
y luego continua la inserción de más valores.
Luego se hace un rollback, por lo que este insert que ocurre aquí
se deshace y luego se continua con otro insert
Y al final se compromete (commit) y se ejecuta una instrucción select
de product, los valores que nos da son: 200
201, y 203, ¿que pasó con 202?
Si echamos un vistazo al script, después de la confirmación (commit)
hemos almacenado esta primera inserción que tuvo el valor de 200
también se guarda esta segunda que tiene el valor de 201.
Esta falla, por lo que no se guarda nada, entonces tenemos 200 y 201
Luego este, por lo que aquí tenemos 202
sin embargo, esto ocurre después de un roolback, por lo que en realidad no es insertado.
luego, seguimos aquí, el 202 no va a ser tomado en cuenta
pero se va a continuar con el siguiente número que debe
ser generado, que es 203, por lo que si un número ya se ha generado
no puede ser utilizado nuevamente, así que por eso, se va a utilizar
203, cuando se inicie nuevamente o cuando se trate de
insertar el nuevo valor “plum”.
Descargar