sql >> Databasteknik >  >> RDS >> Mysql

MSQL:Hur skriver man över en post endast om den nya är högre? annars skapa en ny post

Jag skulle använda insert .. on duplicate key update ... påstående. Något så här:

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

name kolumnen ska indexeras som unique .

Testskript:

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

Utdata från select * from player :

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



  1. Simulera group_concat MySQL-funktion i Microsoft SQL Server 2005?

  2. CURDATE() Exempel – MySQL

  3. Komplicerad fotbollsliga Dynamisk beställning i MySQL?

  4. Lägg till data till SQLite-databasen endast en gång och läs flera gånger