なぜこれがあなたのシナリオで機能しないのか理解できません。 TIMESTAMP
です MS SQL Serverで一意であることが保証されていますか?
Aha-SQL Serverのタイムスタンプは、rowversion> これはMySQLのAUTO_INCREMENT
のようなものです UPDATE
で新しい単調に増加する値を生成することを除いて INSERT
と同様に 。
いいえ、MySQLにはこのようなものはありません。 MySQLはSEQUENCE
もサポートしていません Oracle、PostgreSQL、IBMDB2などのオブジェクト。たとえば、シーケンスを使用すると、トリガーから新しい値を生成できます。
質問の更新情報を読みましたので、解決しようとしている問題を理解しました。
別の解決策として私が見たのは、処理しているテーブルに別の属性を追加して、それをis_processed
と呼ぶことです。 か何か。新しい行を挿入するときにNULLを入力します。処理に取り掛かったら、その列の値を1に変更します。そうすれば、まだ処理していない行が常にわかります。これらの行は、is_processed IS NULL
の行になります。 。
あなたのコメントを再確認してください:わかりました、問題がわかりました。各ユーザーは、どの行が新規/変更されたかについて独自のビューを必要とします。
MySQLでシーケンスオブジェクトをシミュレートするために使用されているもう1つのハックは、自動インクリメントの主キーだけを含むテーブルです。このテーブルに挿入して、挿入をロールバックすることにより、新しい一意の単調に増加する値を生成できます。
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();
MySQLトリガー内でトランザクションを開始およびロールバックすることはできないため、アプリケーションコードで新しい値を生成する必要があります。
または、PostgreSQLに切り替えて、シーケンスの実際のサポートを取得することもできます。