Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak sprawdzić istniejący rekord przed wstawieniem rekordu dla każdego użytkownika do tej samej tabeli?

Jedna metoda po prostu wykorzystuje agregację warunkową:

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żesz potrzebować bardziej ogólnego rozwiązania. Jeśli chcesz mieć pewność, że pary użytkownik/klucz nigdy nie będą duplikowane, utwórz unikatowe ograniczenie lub indeks dla tych kolumn:

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

Następnie możesz pominąć wstawianie wierszy za 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 nic nie robi, ponieważ wartość jest taka sama. MySQL pomija wstawianie i nie zwraca błędu.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Najszybsza metoda wykonywania kopii zapasowej i przywracania MySQL

  2. Importuj CSV lub XML do MySQL

  3. Wstaw rekord do tabeli z pozycją bez aktualizowania wszystkich pól pozycji rekordów

  4. Czy istnieje sposób, aby nazwa tabeli była dynamiczna w zapytaniu?

  5. Czy konieczne jest użycie mysql_real_escape_string(), gdy magic_quotes_gpc jest włączone?