Non sono sicuro di capire perché questo non funziona per il tuo scenario. È TIMESTAMP
garantito per essere unico in MS SQL Server?
Aha -- Vedo che in SQL Server timestamp è sinonimo di rowversion che è un po' come AUTO_INCREMENT
di MySQL tranne che genera un nuovo valore monotonicamente crescente su UPDATE
così come su INSERT
.
No, MySQL non ha nulla di simile. Né MySQL supporta una SEQUENCE
oggetti come Oracle o PostgreSQL o IBM DB2. Ad esempio, una sequenza consente di generare un nuovo valore da un trigger.
Ho letto le tue informazioni aggiornate nella tua domanda, quindi capisco il problema che stai cercando di risolvere.
Quella che ho visto come una soluzione alternativa è aggiungere un altro attributo nella tabella che stai elaborando, chiamalo is_processed
o qualcosa. Immettere un NULL quando si inserisce una nuova riga. Quando inizi a elaborarlo, cambia il valore in quella colonna su 1. Quindi saprai sempre quali righe devi ancora elaborare:saranno le righe in cui is_processed IS NULL
.
Re il tuo commento:Va bene, vedo il problema. Ogni utente ha bisogno della propria visualizzazione di quali righe sono nuove/modificate.
Un altro trucco che ho visto utilizzato in MySQL per simulare un oggetto sequenza è una tabella che contiene una chiave primaria di incremento automatico e nient'altro. Puoi generare nuovi valori univoci che aumentano in modo monotono inserendo in questa tabella e quindi ripristinando l'inserimento.
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();
Non puoi avviare e ripristinare le transazioni all'interno di un trigger MySQL, quindi dovrai generare i nuovi valori nel codice dell'applicazione.
Oppure potresti passare a PostgreSQL e ottenere un vero supporto per le sequenze.