sql >> Database >  >> RDS >> Mysql

Invoegen waar niet bestaat - zonder primaire sleutel

Als je echt je eigen (werkende) query wilt schrijven..

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
)

... maar MySQL kan dit allemaal voor je aan!

U hebt geen primaire sleutels nodig om MySQL dit voor u te laten afhandelen, u moet een UNIQUE toevoegen sleutelbeperking op de gecombineerde set van de twee kolommen.

Vraag om de unieke sleutel toe te voegen dent_group_uniq_key naar groupdentlink .

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

Gebruik dan INSERT IGNORE op uw vraag:

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

INSERT IGNORE zal proberen een rij in uw tabel in te voegen, als dit niet lukt vanwege een sleutelbeperking, zal het doen alsof er niets gebeurt.



  1. Hoe gebruik je een array met waarden uit PHP in de 'IN'-clausule van de mysql-query?

  2. MySQL krijgt de eerste niet-null-waarde na groeperen door

  3. @@IDENTITY, SCOPE_IDENTITY(), OUTPUT en andere methoden om de laatste identiteit op te halen

  4. Prioriteiten implementeren in SQL (postgres)