sql >> Databasteknik >  >> RDS >> Mysql

Infoga där det inte finns-utan primärnyckel

Om du verkligen vill skriva din egen (fungerande) fråga...

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 hantera allt detta åt dig!

Du behöver inga primärnycklar för att få MySQL att hantera detta åt dig, du bör lägga till en UNIQUE nyckelbegränsning på den kombinerade uppsättningen av de två kolumnerna.

Fråga för att lägga till den unika nyckeln dent_group_uniq_key till groupdentlink .

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

Använd sedan INSERT IGNORE på din fråga:

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

INSERT IGNORE kommer att försöka infoga en rad i din tabell, om den misslyckas på grund av en nyckelbegränsning kommer det att verka som om ingenting händer.



  1. En översikt av logisk replikering i PostgreSQL

  2. Kan du automatiskt skapa en mysqldump-fil som inte upprätthåller begränsningar för främmande nyckel?

  3. Varför tar det så lång tid att byta namn på en kolumn i mysql?

  4. VÄLJ * FRÅN flera tabeller. MySQL