Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wie überprüfe ich einen vorhandenen Datensatz, bevor ich einen Datensatz für jeden Benutzer in dieselbe Tabelle einfüge?

Eine Methode verwendet einfach die bedingte Aggregation:

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;

Vielleicht möchten Sie eine allgemeinere Lösung. Wenn Sie sicherstellen möchten, dass Benutzer/Schlüssel-Paare niemals dupliziert werden, erstellen Sie eine eindeutige Einschränkung oder einen eindeutigen Index für diese Spalten:

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

Dann können Sie das Einfügen der Zeilen mit on duplicate key update überspringen :

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);

Das update tut nichts, weil der Wert derselbe ist. MySQL überspringt das Einfügen und gibt keinen Fehler zurück.