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

INSERT INTO ... ON DUPLICATEKEYUPDATEの前に値が存在するかどうかを確認してください

    review_autosave_dataの代わりに review_insert_draftsのような2つのテーブルを作成できます およびreview_update_drafts (1つは新しいレビュー用、もう1つはレビューの更新用です。)

    CREATE TABLE `review_insert_drafts` (
      `product_id` int(11) unsigned NOT NULL,
      `user_id` int(11) unsigned NOT NULL,
      `review` blob,
      `name` varchar(100) DEFAULT NULL,
      PRIMARY KEY (`product_id`, `user_id`),
      CONSTRAINT FOREIGN KEY (`product_id`) REFERENCES `products` (`id`),
      CONSTRAINT FOREIGN KEY (`user_id`) REFERENCES `users` (`id`)
    );
    
    CREATE TABLE `review_update_drafts` (
      `review_id` int(11) unsigned NOT NULL,
      `review` blob,
      `name` varchar(100) DEFAULT NULL,
      PRIMARY KEY (`review_id`),
      CONSTRAINT FOREIGN KEY (`review_id`) REFERENCES `reviews` (`id`)
    );
    

    nameが何であるかわからない 列はに適しています。)

    アプリケーションでは、ユーザーが新しいレビューを書いているのか、既存のレビューを更新しているのかを確認する必要があります。

    実行する新しいレビューの場合:

    INSERT INTO review_insert_drafts (product_id, user_id, review)
    VALUES (50, 1, "lorem ipsum")
    ON DUPLICATE KEY
    UPDATE review = "lorem ipsum";
    

    または

    REPLACE INTO review_insert_drafts (product_id, user_id, review)
    VALUES (50, 1, "lorem ipsum");
    

    実行するレビュー更新の場合:

    INSERT INTO review_update_drafts (review_id, review)
    VALUES (25, "lorem ipsum")
    ON DUPLICATE KEY
    UPDATE review = "lorem ipsum";
    

    または

    REPLACE INTO review_update_drafts (review_id, review)
    VALUES (25, "lorem ipsum");
    

    利点:明確な一意のキーと外部キーを備えた明確なデザインがあります。

    短所:同様のデータを含む2つのテーブルがあります。したがって、2つの異なる挿入ステートメントがあります。また、2つのテーブルを組み合わせる場合は、UNIONステートメントが必要になります(たとえば、ユーザーのすべての下書きを表示する)。



    1. SqlCommandを使用することの長所と短所C#で準備しますか?

    2. DockerComposeでpostgresコンテナのサーバーポートを変更する

    3. SqlBulkCopyを使用してCSVファイルをSQLServerにインポートします

    4. MySQLで主キーとしてUUIDを使用すると、パフォーマンスにどのように影響するか