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

Wstaw tam, gdzie nie istnieje — bez klucza podstawowego

Jeśli naprawdę chcesz napisać własne (działające) zapytanie...

INSERT INTO groupdentlink (
  f_dent_id, f_group_id, f_schedule_id
) SELECT 
    '$_POST[id]'  f_dent_id, 
    '$groupid'    f_group_id,
    '$scheduleid' f_schedule_id
FROM DUAL
WHERE NOT EXISTS (
  SELECT 1
  FROM `groupdentlink`
  WHERE 
    f_dent_id = '$_POST[id]' AND f_group_id = '$groupid'
  LIMIT 1 -- will stop mysql to stop searching after first match
)

... ale MySQL poradzi sobie z tym wszystkim za Ciebie!

Nie potrzebujesz kluczy podstawowych, aby MySQL obsłużył to za Ciebie, powinieneś dodać UNIQUE kluczowe ograniczenie połączonego zestawu dwóch kolumn.

Zapytanie o dodanie unikalnego klucza dent_group_uniq_key do groupdentlink .

ALTER TABLE groupdentlink ADD UNIQUE KEY `dent_group_uniq_key` (
  f_dent_id, f_group_id
);

Następnie użyj INSERT IGNORE na Twoje zapytanie:

INSERT IGNORE INTO groupdentlink (
  f_dent_id, f_group_id, f_schedule_id
) VALUES (
  '$_POST[id]', '$groupid', '$scheduleid'
)

INSERT IGNORE spróbuje wstawić wiersz do Twojej tabeli, jeśli nie powiedzie się z powodu ograniczenia klucza, zachowa się tak, jakby nic się nie stało.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Funkcja isset() zwraca wartość true, nawet jeśli pozycja nie jest ustawiona

  2. Synchronizacja bazy danych Mysql między dwiema bazami danych

  3. Oblicz saldo za pomocą mysql

  4. Czy istnieje mechanizm wyłączający wstawianie do stołu?

  5. Jak zaktualizować rekord za pomocą sekwencjonowania dla węzła?