Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Existe um recurso do MySQL como a coluna TIMESTAMP do SQL Server?


Não sei se entendi por que isso não funciona para o seu cenário. É TIMESTAMP garantido para ser exclusivo no MS SQL Server?

Aha -- vejo no SQL Server timestamp é sinônimo de rowversion que é como o AUTO_INCREMENT do MySQL exceto que gera um novo valor monotonicamente crescente em UPDATE bem como em INSERT .

Não, o MySQL não tem nada assim. Nem o MySQL suporta uma SEQUENCE objeto como Oracle ou PostgreSQL ou IBM DB2. Uma sequência permitiria que você gerasse um novo valor a partir de um gatilho, por exemplo.

Li suas informações atualizadas em sua pergunta, então entendo o problema que você está tentando resolver.

O que eu vi como uma solução alternativa é adicionar outro atributo na tabela que você está processando, chame-o de is_processed ou alguma coisa. Insira um NULL ao inserir uma nova linha. Quando você começar a processá-lo, altere o valor dessa coluna para 1. Assim, você sempre saberá quais linhas ainda precisa processar -- elas serão as linhas em que is_processed IS NULL .

Re seu comentário:Ok, eu vejo o problema. Cada usuário precisa de sua própria visualização de quais linhas são novas/alteradas.

Outro hack que vi usado no MySQL para simular um objeto de sequência é uma tabela que contém uma chave primária de incremento automático e nada mais. Você pode gerar novos valores únicos crescentes monotonicamente inserindo nesta tabela e, em seguida, reverter a inserção.
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();

Você não pode iniciar e reverter transações em um gatilho MySQL, então você terá que gerar os novos valores no código do seu aplicativo.

Ou então você pode mudar para o PostgreSQL e obter suporte real para sequências.