sql >> Database teknologi >  >> RDS >> Mysql

Indsæt, hvor der ikke findes - Uden primærnøgle

Hvis du virkelig vil skrive din egen (fungerende) forespørgsel..

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
)

... men MySQL kan klare alt dette for dig!

Du behøver ikke primære nøgler for at få MySQL til at håndtere dette for dig, du bør tilføje en UNIQUE nøglebegrænsning på det kombinerede sæt af de to kolonner.

Forespørgsel om at tilføje den unikke nøgle dent_group_uniq_key til groupdentlink .

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

Brug derefter INSERT IGNORE på din forespørgsel:

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

INSERT IGNORE vil forsøge at indsætte en række i din tabel, hvis den mislykkes på grund af en nøglebegrænsning, vil det virke som om der ikke sker noget.



  1. Indlæser markører fra XML-fil til Google Map API

  2. Det serialiserbare isolationsniveau

  3. MySQL henter streng(er) mellem to # / flere par af #

  4. Importerer sql-fil ved hjælp af phpmyadmin i EasyPHP