«INSERT … ON DUPLICATE KEY UPDATE id = id» все еще вставляет в дубликат

У меня есть имя таблицы «slot_place_box». Это выглядит так:

  • id_slot_pb (ПЕРВИЧНЫЙ КЛЮЧ)
  • id_place_box (INT)
  • дата (DATE)
  • час (ЧАС)
  • slot_available (INT)

У меня есть индекс UNIQUE для (id_place_box + date + hour).

В PHP я строю запрос SQL, он выглядит так:

$sql_request = " INSERT INTO media.slot_place_box (id_place_box, date, hour)VALUES (32, '2017-12-10', NULL)ON DUPLICATE KEY UPDATE id_place_box = id_place_box; SET @id = (SELECT SPB.id_slot_pb FROM media.slot_place_box as SPB WHERE SPB.id_place_box = 32 AND SPB.date = '2017-12-10' AND SPB.hour IS NULL); INSERT INTO media.slot_config (id_config, id_slot_pb) VALUES (125, @id); INSERT INTO media.slot_place_box (id_place_box, date, hour)VALUES (32, '2017-12-11', NULL)ON DUPLICATE KEY UPDATE id_place_box = id_place_box; SET @id = (SELECT SPB.id_slot_pb FROM media.slot_place_box as SPB WHERE SPB.id_place_box = 32 AND SPB.date = '2017-12-11' AND SPB.hour IS NULL); INSERT INTO media.slot_config (id_config, id_slot_pb) VALUES (125, @id); INSERT INTO media.slot_place_box (id_place_box, date, hour)VALUES (32, '2017-12-12', NULL)ON DUPLICATE KEY UPDATE id_place_box = id_place_box; SET @id = (SELECT SPB.id_slot_pb FROM media.slot_place_box as SPB WHERE SPB.id_place_box = 32 AND SPB.date = '2017-12-12' AND SPB.hour IS NULL); INSERT INTO media.slot_config (id_config, id_slot_pb) VALUES (125, @id); //etc "; 

Моя проблема заключается в том, что мой «INSERT … ON DUPLICATE KEY UPDATE» по-прежнему вставляет новую строку, когда у меня есть дубликат ключа (= другой «slot_place_box» в базе данных с тем же «id_place_box + date + hour», поэтому мой @id get более одного результата и ошибки скрипта. Он просто добавляет строку в мою таблицу для моего первого «INSERT» и ничего не делает после (когда у меня есть повторяющаяся строка).

Прямо сейчас это ключи, которые у меня есть:

  • Я добавил индекс «UNIQUE» для комбинации «id_config + date + hour», достаточно ли этого для «ON DUPLICATE KEY» или мне абсолютно нужен ПЕРВЫЙ КЛЮЧ?
  • Может быть, у меня проблемы с моим именем поля «дата» и «час»?
  • Тот факт, что у меня есть значение «NULL» для «часа», может создать некоторые проблемы с моими UNIQUE-индексами …

У вас есть идея, почему, пожалуйста?