Para generar una columna identity en DB2 para una tabla, podemos hacerlo de dos formas:
- con "GENERATE BY DEFAULT".- de esta forma podríamos enviarle valores en un insert a la columna identity.
- con "GENERATE ALWAYS".- de esta manera, el manejador No nos permitiría enviarle valores a la columna identity.
Veamos un ejemplo:
CREATE TABLE TABLA_GBD
( ID_FILA INT NOT NULL GENERATED BY DEFAULT AS IDENTITY
(START WITH 1, INCREMENT BY 1, NO CACHE),
COLUMNA_1 CHAR(10)
);
Cuando insertemos registros se autoincrementará el valor de la columna ID_FILA.
INSERT INTO TABLA_GBD (COLUMNA_1) VALUES ('PRUEBA');
INSERT INTO TABLA_GBD (COLUMNA_1) VALUES ('PRUEBA');
INSERT INTO TABLA_GBD (ID_FILA,COLUMNA_1) VALUES (8,'PRUEBA');
INSERT INTO TABLA_GBD (COLUMNA_1) VALUES ('PRUEBA');
Si hacemos SELECT, el resultado será el siguiente:
ID_FILA | COLUMNA_1
1 | PRUEBA
2 | PRUEBA
8 | PRUEBA
3 | PRUEBA
Si en el CREATE de la tabla hubiéramos puesto GENERATE ALWAYS a la columna identity, no podríamos ejecutar el tercer INSERT con el valor de la columna; ahí radica la diferencia.
Nota: Existen otras diferencias, pero el objetivo de esta entrada era comentar la principal de ellas.