sql >> Base de Datos >  >> RDS >> Mysql

¿Cómo verificar el registro existente antes de insertar el registro para cada usuario en la misma tabla?

Un método simplemente usa la agregación condicional:

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;

Es posible que desee una solución más genérica. Si desea asegurarse de que los pares de usuario/clave nunca se dupliquen, cree una restricción o un índice únicos en esas columnas:

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

Luego, puede omitir la inserción de filas usando 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);

La update no hace nada, porque el valor es el mismo. MySQL se salta la inserción y no devuelve un error.