sql >> Database teknologi >  >> RDS >> Mysql

MSQL:Hvordan overskriver man kun indgang, hvis en ny er højere? ellers oprette en ny post

Jeg ville bruge insert .. on duplicate key update ... udmelding. Noget som dette:

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

name kolonne skal indekseres som unique .

Testscript:

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);
 

Output af select * from player :

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


  1. PostgreSQL-opdateringer med flere rækker i Node.js

  2. Få WP-indlæg baseret på flere meta-nøgle/værdi-par ved hjælp af IN

  3. Slut på support for SQL Server 2008 &2008 R2

  4. Forståelse af 'tids'-lagerstørrelse i SQL Server