MySQL更新出现重复错误

时间:2018-07-02 12:32:33

标签: mysql

我有两个表,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服务器版本相对应的手册,以找到在第6行的“ test')'附近使用的正确语法”

1 个答案:

答案 0 :(得分: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 ... ON DUPLICATE KEY UPDATE语句的INSERT部分引用列值

Here,您可以找到有关VALUES函数的更多信息。