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

MSQL:新しいエントリが高い場合にのみエントリを上書きするにはどうすればよいですか?それ以外の場合は、新しいエントリを作成します

    重複キーの更新時にinsert.. ...を使用します 声明。このようなもの:

    insert into highscore set
        name = :name,
        score = :new_score
    on duplicate key update
        score = greatest(score, :new_score)
    

    名前 列はuniqueとしてインデックス付けする必要があります 。

    テストスクリプト:

    create table player (
        name varchar(32) primary key,
        score int not null default 0
    );
    
    -- create new players
    insert into player set name = 'foo', score = 100
        on duplicate key update score = greatest(score, 100);
    insert into player set name = 'bar', score = 100
        on duplicate key update score = greatest(score, 100);
    insert into player set name = 'baz', score = 100
        on duplicate key update score = greatest(score, 100);
    
    -- update score of existing player
    insert into player set name = 'bar', score = 200
        on duplicate key update score = greatest(score, 200);
    

    select * from playerの出力 :

    +------+-------+
    | name | score |
    +------+-------+
    | bar  |   200 |
    | baz  |   100 |
    | foo  |   100 |
    +------+-------+
    



    1. LaravelのGoogleCloudAppEngineに接続されたMySQLに画像をアップロードできません

    2. クエリクエリ-MySQLとPHP

    3. テーブルがすでに存在する場合、CREATE TABLE IFNOTEXISTSが失敗する

    4. Join-Where-Groupによる正しいインデックス付け一時的な使用を避けてクエリを選択します。 filesortの使用