sql >> Databáze >  >> RDS >> Mysql

Existuje funkce MySQL, jako je sloupec TIMESTAMP serveru SQL Server?

Nejsem si jistý, jestli rozumím tomu, proč to ve vašem scénáři nefunguje. Je TIMESTAMP zaručeno, že bude jedinečný v MS SQL Server?

Aha – v SQL Serveru vidím, že časové razítko je synonymem pro rowversion což je něco jako AUTO_INCREMENT MySQL kromě toho generuje novou monotónně rostoucí hodnotu na UPDATE a také na INSERT .

Ne, MySQL nic takového nemá. MySQL také nepodporuje SEQUENCE objekt jako Oracle nebo PostgreSQL nebo IBM DB2. Sekvence by vám například umožnila vygenerovat novou hodnotu ze spouštěče.

Četl jsem vaše aktualizované informace ve vaší otázce, takže rozumím problému, který se snažíte vyřešit.

Co jsem viděl jako alternativní řešení, je přidat další atribut do tabulky, kterou zpracováváte, nazvěte jej is_processed nebo něco. Při vkládání nového řádku zadejte NULL. Když se dostanete ke zpracování, změňte hodnotu v tomto sloupci na 1. Pak budete vždy vědět, které řádky musíte ještě zpracovat – budou to řádky, kde is_processed IS NULL .

K vašemu komentáři:Dobře, vidím problém. Každý uživatel potřebuje svůj vlastní pohled na to, které řádky jsou nové/změněné.

Další hack, který jsem v MySQL použil k simulaci sekvenčního objektu, je tabulka, která obsahuje primární klíč s automatickým přírůstkem a nic jiného. Můžete vygenerovat nové jedinečné monotónně rostoucí hodnoty vložením do této tabulky a poté vrátit vložení zpět.

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();

V rámci spouštěče MySQL nemůžete spustit a vrátit transakce, takže nové hodnoty budete muset vygenerovat v kódu aplikace.

Nebo můžete přejít na PostgreSQL a získat skutečnou podporu pro sekvence.



  1. VYBERTE mnoho až mnoho tabulek v jednom dotazu

  2. Android – dotaz JSON mySQL poskytuje výjimku NetworkOnMainThreadException

  3. C# SSH tunel na MySQL server

  4. Objekt třídy stdClass nelze převést na řetězec