Mysql
 sql >> база данни >  >> RDS >> Mysql

Вмъкнете там, където не съществува - без първичен ключ

Ако наистина искате да напишете своя собствена (работеща) заявка..

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
)

... но MySQL може да се справи с всичко това вместо вас!

Не се нуждаете от първични ключове, за да накарате MySQL да се справи с това вместо вас, трябва да добавите UNIQUE ключово ограничение за комбинирания набор от двете колони.

Заявка за добавяне на уникалния ключ dent_group_uniq_key към groupdentlink .

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

След това използвайте INSERT IGNORE на вашата заявка:

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

INSERT IGNORE ще се опита да вмъкне ред във вашата таблица, ако не успее поради ключово ограничение, ще действа така, сякаш нищо не се случва.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да задам sql_mode в my.cnf в MySQL 8?

  2. NHibernate IPreUpdateEventListener, IPreInsertEventListener не се записва в DB

  3. Алтернативи на pt-query-digest - MySQL управление на заявки и наблюдение с ClusterControl

  4. SQL:търсене/замяна, но само първия път, когато дадена стойност се появи в записа

  5. mysql изберете горните n максимални стойности