Mysql
 sql >> Base de données >  >> RDS >> Mysql

Existe-t-il une fonctionnalité MySQL telle que la colonne TIMESTAMP de SQL Server ?

Je ne suis pas sûr de comprendre pourquoi cela ne fonctionne pas pour votre scénario. Est TIMESTAMP garantie d'être unique dans MS SQL Server ?

Aha - je vois dans SQL Server que l'horodatage est synonyme de rowversion qui est un peu comme le AUTO_INCREMENT de MySQL sauf qu'il génère une nouvelle valeur croissante de manière monotone sur UPDATE ainsi que sur INSERT .

Non, MySQL n'a rien de tel. MySQL ne prend pas non plus en charge une SEQUENCE objet comme Oracle ou PostgreSQL ou IBM DB2. Une séquence vous permettrait de générer une nouvelle valeur à partir d'un déclencheur, par exemple.

J'ai lu vos informations mises à jour dans votre question, donc je comprends le problème que vous essayez de résoudre.

Ce que j'ai vu comme solution alternative est d'ajouter un autre attribut dans la table que vous traitez, appelez-le is_processed ou quelque chose. Entrez un NULL lorsque vous insérez une nouvelle ligne. Lorsque vous commencez à le traiter, changez la valeur de cette colonne en 1. Ainsi, vous saurez toujours quelles lignes vous devez encore traiter - ce seront les lignes où is_processed IS NULL .

Re votre commentaire:D'accord, je vois le problème. Chaque utilisateur a besoin de sa propre vue des lignes qui sont nouvelles/modifiées.

Un autre hack que j'ai vu utilisé dans MySQL pour simuler un objet de séquence est une table qui contient une clé primaire à incrémentation automatique et rien d'autre. Vous pouvez générer de nouvelles valeurs uniques croissantes de manière monotone en les insérant dans ce tableau, puis en annulant l'insertion.

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

Vous ne pouvez pas démarrer et annuler des transactions dans un déclencheur MySQL, vous devrez donc générer les nouvelles valeurs dans votre code d'application.

Sinon, vous pouvez passer à PostgreSQL et obtenir un véritable support pour les séquences.