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

Hvordan kontrollerer man eksisterende post, før man indsætter post for hver bruger i samme tabel?

En metode bruger simpelthen betinget aggregering:

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;

Du vil måske have en mere generisk løsning. Hvis du vil sikre, at bruger/nøglepar aldrig duplikeres, skal du oprette en unik begrænsning eller indeks på disse kolonner:

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

Derefter kan du springe over at indsætte rækkerne ved at bruge 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 gør ingenting, fordi værdien er den samme. MySQL springer over at udføre indsættelsen og returnerer ikke en fejl.




  1. mysqli db backup med php

  2. Sequelize læser kun dato og klokkeslæt i UTC

  3. Løsning på underforespørgsel returnerer mere end 1 række fejl

  4. Forebyggelse af SQL-injektionsangreb med Python