Обновление MySQL при повторяющейся ошибке

0

У меня есть две таблицы: EVENTS и EVENT_ATTENDEES.

Я хотел бы попытаться вставить строку в event_attendees, и если call_sign и event_id уже существуют в таблице, она должна обновить ответ для этой строки, а не вставлять новую.

Таблица событий

CREATE TABLE 'events' (
  'event_id' int(11) NOT NULL,
  'created_by' varchar(1000) NOT NULL,
  'event_type' varchar(1000) NOT NULL,
  'event_name' varchar(1000) NOT NULL,
  'event_start' datetime NOT NULL,
  'event_end' datetime NOT NULL,
  'max_attendees' varchar(10) NOT NULL,
  'open_registration' varchar(10) NOT NULL
) 
ALTER TABLE 'events'
  ADD PRIMARY KEY ('event_id');

ALTER TABLE 'events'
  MODIFY 'event_id' int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=11

Участники мероприятия

CREATE TABLE 'event_attendees' (
  'id' int(11) NOT NULL,
  'event_id' int(11) NOT NULL,
  'call_sign' varchar(10) NOT NULL,
  'response' varchar(10) NOT NULL
) 

ALTER TABLE 'event_attendees'
  ADD PRIMARY KEY ('id'),
  ADD UNIQUE KEY 'event_id_2' ('event_id','call_sign'),
  ADD KEY 'event_id' ('event_id') USING BTREE;

ALTER TABLE 'event_attendees'
  MODIFY 'id' int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=15;

ALTER TABLE 'event_attendees'
  ADD CONSTRAINT 'event_id_fk' FOREIGN KEY ('event_id') REFERENCES 'events' ('event_id') ON DELETE CASCADE ON UPDATE NO ACTION;

Я пробовал следующий запрос, но постоянно получаю сообщение об ошибке (я создал событие с event_id = 10):

INSERT INTO event_attendees
   (event_id, call_sign, response)
VALUES
   ('10', '007', 'Declined')
ON DUPLICATE KEY UPDATE
   response = VALUES('Declined')

"# 1064 - У вас есть ошибка в синтаксисе SQL, проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса, используемого рядом с '' test ')' в строке 6"

  • 0
    Отредактируйте свой вопрос и покажите полный текст сообщения об ошибке.
  • 0
    На самом деле, VALUES('Declined') должно быть VALUES(`response`) - используйте обратные метки для имен столбцов и таблиц. Если вы хотите, чтобы значение было «Отклонено» в обновлении, используйте 'Declined' без функции ЗНАЧЕНИЕ
Показать ещё 1 комментарий
Теги:

1 ответ

1
Лучший ответ

Здесь нет необходимости в VALUES. Измените свой запрос как:

INSERT INTO event_attendees
   (event_id, call_sign, response)
VALUES
   ('10', '007', 'Declined')
ON DUPLICATE KEY UPDATE
   response = 'Declined'

Из документа:

вы можете использовать функцию VALUES (col_name), чтобы ссылаться на значения столбцов из INSERT-части инструкции INSERT... ON DUPLICATE KEY UPDATE

Здесь вы можете найти больше о функции VALUES.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню