No estoy seguro de entender por qué esto no funciona para su escenario. Es TIMESTAMP
garantizado para ser único en MS SQL Server?
Ajá:veo que la marca de tiempo de SQL Server es un sinónimo de rowversion que es algo así como AUTO_INCREMENT
de MySQL excepto que genera un nuevo valor monótonamente creciente en UPDATE
así como en INSERT
.
No, MySQL no tiene nada como esto. MySQL tampoco admite una SEQUENCE
objeto como Oracle o PostgreSQL o IBM DB2. Una secuencia le permitiría generar un nuevo valor a partir de un activador, por ejemplo.
Leí su información actualizada en su pregunta, así que entiendo el problema que está tratando de resolver.
Lo que he visto como una solución alternativa es agregar otro atributo en la tabla que está procesando, llámelo is_processed
o algo. Ingrese un NULL cuando inserte una nueva fila. Cuando llegue a procesarlo, cambie el valor en esa columna a 1. Entonces siempre sabrá qué filas aún tiene que procesar; serán las filas donde is_processed IS NULL
.
Re tu comentario:Está bien, veo el problema. Cada usuario necesita su propia vista de qué filas son nuevas/modificadas.
Otro truco que he visto en MySQL para simular un objeto de secuencia es una tabla que contiene una clave principal de incremento automático y nada más. Puede generar nuevos valores únicos que aumentan monótonamente al insertarlos en esta tabla y luego revertir la inserción.
CREATE TABLE sequence (id SERIAL) ENGINE=InnoDB; -- Must be InnoDB
START TRANSACTION;
INSERT INTO sequence () VALUES (); -- Yes this is a legal statement.
ROLLBACK;
SELECT LAST_INSERT_ID();
No puede iniciar y deshacer transacciones dentro de un activador de MySQL, por lo que deberá generar los nuevos valores en el código de su aplicación.
O bien, podría cambiar a PostgreSQL y obtener soporte real para las secuencias.