sql >> Base de Datos >  >> RDS >> Mysql

Insertar donde no existe:sin clave principal

Si realmente desea escribir su propia consulta (de trabajo)...

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
)

... ¡pero MySQL puede manejar todo esto por ti!

No necesita claves principales para que MySQL maneje esto por usted, debe agregar un UNIQUE restricción clave en el conjunto combinado de las dos columnas.

Consulta para agregar la clave única dent_group_uniq_key a groupdentlink .

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

Luego usa INSERT IGNORE en su consulta:

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

INSERT IGNORE intentará insertar una fila en su tabla, si falla debido a una restricción clave, actuará como si nada sucediera.