我有两个表,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')'附近使用的正确语法”
答案 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
函数的更多信息。