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

Come controllare il record esistente prima di inserire il record per ciascun utente nella stessa tabella?

Un metodo utilizza semplicemente l'aggregazione condizionale:

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;

Potresti volere una soluzione più generica. Se vuoi assicurarti che le coppie utente/chiave non vengano mai duplicate, crea un vincolo o un indice univoco su queste colonne:

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

Quindi, puoi saltare l'inserimento delle righe utilizzando 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);

L'update non fa nulla, perché il valore è lo stesso. MySQL salta l'inserimento e non restituisce un errore.