sql >> Databasteknik >  >> RDS >> Mysql

Finns det en MySQL-funktion som SQL Servers TIMESTAMP-kolumn?

Jag är inte säker på att jag förstår varför detta inte fungerar för ditt scenario. Är TIMESTAMP garanterat att vara unik i MS SQL Server?

Aha -- jag ser i SQL Server tidsstämpel är en synonym för rowversion vilket är ungefär som MySQL:s AUTO_INCREMENT förutom att den genererar ett nytt monotont ökande värde på UPDATE samt på INSERT .

Nej, MySQL har inget liknande. MySQL stöder inte heller en SEQUENCE objekt som Oracle eller PostgreSQL eller IBM DB2. En sekvens skulle tillåta dig att generera ett nytt värde från en trigger, till exempel.

Jag läste din uppdaterade information i din fråga, så jag förstår problemet du försöker lösa.

Det jag har sett som en alternativ lösning är att lägga till ytterligare ett attribut i tabellen du bearbetar, kalla det is_processed eller något. Ange en NULL när du infogar en ny rad. När du kommer igång med att bearbeta det, ändra värdet i den kolumnen till 1. Då vet du alltid vilka rader du ännu inte har bearbetat -- de kommer att vara raderna där is_processed IS NULL .

Angående din kommentar:Okej, jag ser problemet. Varje användare behöver sin egen bild av vilka rader som är nya/ändrade.

Ett annat hack som jag har sett användas i MySQL för att simulera ett sekvensobjekt är en tabell som innehåller en primärnyckel för automatisk ökning och inget annat. Du kan generera nya unika monotont ökande värden genom att infoga i den här tabellen och sedan rulla tillbaka infogningen.

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 inte starta och återställa transaktioner inom en MySQL-utlösare, så du måste generera de nya värdena i din applikationskod.

Eller så kan du byta till PostgreSQL och få riktigt stöd för sekvenser.



  1. EF6 MySQL StrongTypingException När kolumn inte är PK

  2. Streama databaserade bilder med hjälp av HttpHandler

  3. varför ger detta mig fel kundnummer?

  4. Hur genererar man ett unikt ID i MySQL?