Mysql
 sql >> база данни >  >> RDS >> Mysql

MSQL:Как да презапишем запис само ако новият е по-висок? иначе създайте нов запис

Бих използвал insert .. on duplicate key update ... изявление. Нещо като това:

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

name колоната трябва да бъде индексирана като 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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да върнете таблицата с помощта на mysql функция

  2. MySQL Сортирайте по азбучен ред, но игнорирайте

  3. Laravel извежда различен изход от MySQL заявка

  4. Проблем с сравнението на дати в MySQL

  5. Как да конвертирате MySQL DB в XML?