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

Как да проверите съществуващ запис, преди да вмъкнете запис за всеки потребител в същата таблица?

Един метод просто използва условно агрегиране:

insert into users_settings (user_id, key)
    select user_id, 'app_reminder'
    from users_settings
    group by user_id
    having sum(key = 'app_reminder') = 0;

Може да искате по-общо решение. Ако искате да сте сигурни, че двойките потребител/ключ никога не се дублират, тогава създайте уникално ограничение или индекс за тези колони:

alter table users_settings add constraint unq_users_settings_user_id_key
    unique (user_id, key);

След това можете да пропуснете вмъкването на редовете, като използвате on duplicate key update :

insert into users_settings (user_id, key)
    select distinct user_id, 'app_reminder'
    from users_settings
    on duplicate key update user_id = values(user_id);

update не прави нищо, защото стойността е същата. MySQL пропуска вмъкването и не връща грешка.




  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. Използване на Mysql в командния ред в osx - командата не е намерена?

  4. Кеширане на подготвени изявления за PDO

  5. Предупреждение:mysqli_connect():MySQL сървърът е изчезнал