sql >> Databáze >  >> RDS >> Mysql

Jak zkontrolovat existující záznam před vložením záznamu pro každého uživatele do stejné tabulky?

Jedna metoda jednoduše používá podmíněnou agregaci:

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;

Možná budete chtít obecnější řešení. Pokud chcete zajistit, aby se páry uživatel/klíč nikdy neduplikovaly, vytvořte pro tyto sloupce jedinečné omezení nebo index:

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

Poté můžete přeskočit vkládání řádků pomocí 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 nedělá nic, protože hodnota je stejná. MySQL přeskočí provádění vkládání a nevrací chybu.




  1. Prohlášení FORALL s vázanou doložkou INDICES-OF v databázi Oracle

  2. PostgreSQL:Vytvořte index pro booleovský sloupec

  3. MariaDB 10.6 a NextCloud:COMPRESSED Row je ve výchozím nastavení pouze pro čtení

  4. Proč používat InnoDB přes MySIAM