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”.