Jeg er ikke sikker på, jeg forstår, hvorfor dette ikke virker for dit scenarie. Er TIMESTAMP
garanteret at være unik i MS SQL Server?
Aha -- jeg ser i SQL Server tidsstempel er et synonym for rowversion som ligner MySQL's AUTO_INCREMENT
bortset fra, at den genererer en ny monotont stigende værdi på UPDATE
samt på INSERT
.
Nej, MySQL har ikke noget lignende. MySQL understøtter heller ikke en SEQUENCE
objekt som Oracle eller PostgreSQL eller IBM DB2. En sekvens vil give dig mulighed for at generere en ny værdi fra en trigger, for eksempel.
Jeg læste dine opdaterede oplysninger i dit spørgsmål, så jeg forstår det problem, du forsøger at løse.
Det, jeg har set som en alternativ løsning, er at tilføje en anden attribut i den tabel, du behandler, kald den is_processed
eller noget. Indtast et NULL, når du indsætter en ny række. Når du kommer i gang med at behandle det, skal du ændre værdien i den kolonne til 1. Så vil du altid vide, hvilke rækker du endnu ikke skal behandle -- de vil være de rækker, hvor is_processed IS NULL
.
Til din kommentar:Okay, jeg kan se problemet. Hver bruger har brug for deres egen visning af, hvilke rækker der er nye/ændrede.
Et andet hack, jeg har set brugt i MySQL til at simulere et sekvensobjekt, er en tabel, der indeholder en primær nøgle med auto-increment og intet andet. Du kan generere nye unikke monotont stigende værdier ved at indsætte i denne tabel og derefter rulle indsættet tilbage.
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();
Du kan ikke starte og tilbageføre transaktioner inden for en MySQL-udløser, så du bliver nødt til at generere de nye værdier i din applikationskode.
Eller også kan du skifte til PostgreSQL og få reel support til sekvenser.