Ik weet niet zeker of ik begrijp waarom dit niet werkt voor uw scenario. Is TIMESTAMP
gegarandeerd uniek in MS SQL Server?
Aha -- Ik zie dat in SQL Server timestamp een synoniem is voor rowversion wat een beetje lijkt op MySQL's AUTO_INCREMENT
behalve dat het een nieuwe monotoon toenemende waarde genereert op UPDATE
evenals op INSERT
.
Nee, MySQL heeft zoiets niet. Evenmin ondersteunt MySQL een SEQUENCE
object zoals Oracle of PostgreSQL of IBM DB2. Met een reeks kunt u bijvoorbeeld een nieuwe waarde genereren op basis van een trigger.
Ik heb uw bijgewerkte informatie in uw vraag gelezen, dus ik begrijp het probleem dat u probeert op te lossen.
Wat ik als een alternatieve oplossing heb gezien, is om een ander kenmerk toe te voegen aan de tabel die je aan het verwerken bent, noem het is_processed
of zoiets. Voer een NULL in wanneer u een nieuwe rij invoegt. Als je eraan toe bent om het te verwerken, verander dan de waarde in die kolom in 1. Dan weet je altijd welke rijen je nog moet verwerken -- dit zijn de rijen waar is_processed IS NULL
.
Over uw opmerking:Oké, ik zie het probleem. Elke gebruiker heeft zijn eigen weergave nodig van welke rijen nieuw/gewijzigd zijn.
Een andere hack die ik in MySQL heb gezien om een reeksobject te simuleren, is een tabel die een primaire sleutel voor automatisch verhogen bevat en niets anders. U kunt nieuwe unieke monotoon toenemende waarden genereren door deze in deze tabel in te voeren en vervolgens de invoeging terug te draaien.
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();
U kunt geen transacties starten en terugdraaien binnen een MySQL-trigger, dus u moet de nieuwe waarden in uw applicatiecode genereren.
Of je kunt overschakelen naar PostgreSQL en echte ondersteuning krijgen voor reeksen.