sql >> データベース >  >> RDS >> Mysql

SQL ServerのTIMESTAMP列のようなMySQL機能はありますか?

    なぜこれがあなたのシナリオで機能しないのか理解できません。 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に切り替えて、シーケンスの実際のサポートを取得することもできます。



    1. ネットワークアダプタが接続を確立できませんでした-Oracle11g

    2. MariaDBでのTAN()のしくみ

    3. MYSQL重複排除し、データが最も少ない重複行を削除します

    4. リモートサーバーのmysqlデータベースをローカルホストに接続する