2017-02-20 3 views
0

У меня есть следующий SQL Schemaдублирование KEY UPDATE вставляет новую запись

CREATE TABLE IF NOT EXISTS `video_video_sprout` (
    `video_id` int(6) default NULL, 
    `sprout_video_id` varchar(25) default NULL, 
    `is_video_type` tinyint(1) default NULL , 
    `someval` varchar(25) default NULL 
) ; 

INSERT INTO `video_video_sprout` (`video_id`, `sprout_video_id`, `is_video_type`,someval) VALUES(62, '4c9ad9b71c1fe2c6c4', 1,'empty'); 


INSERT INTO video_video_sprout (video_id,sprout_video_id,is_video_type) 
VALUES(62, '4c9ad9b71c1fe2c6c4', 1) ON DUPLICATE KEY UPDATE  
someval="UpdatedValue" ; 

Incase строка уже существует, я хочу, чтобы обновить эту строку, либо мне нужно вставить эту строку

Я пытался это так

INSERT INTO video_video_sprout 
      (video_id,sprout_video_id,is_video_type) 
     VALUES 
      (62, '4c9ad9b71c1fe2c6c4', 1) 
     ON DUPLICATE KEY UPDATE someval="UpdatedValue" ; 

Поскольку эта запись уже существует, мне нужно обновить строку, либо создать новую запись на основе.

+2

Стол должен иметь уникальный индекс, чтобы он знал, какие столбцы проверять на дублирование. – Barmar

ответ

2

Вы забыли объявить первичный ключ таблицы.

CREATE TABLE IF NOT EXISTS `video_video_sprout` (
    `video_id` int(6) default NULL, 
    `sprout_video_id` varchar(25) default NULL, 
    `is_video_type` tinyint(1) default NULL , 
    `someval` varchar(25) default NULL, 
    PRIMARY KEY (video_id, sprout_video_id) 
) ; 

Без уникального ключа, INSERT не может обнаружить дубликат ключа.

+0

У меня нет первичного ключа на video_id, так как у него будут две строки video_id, – Pawan

+1

, что проблема там ... на дублированном ключе не будет работать без уникального ограничения –

+0

Тогда ваша схема базы данных сломана. И вам по-прежнему нужен уникальный идентификатор или что-то еще уникальное для соответствия матча. – junkfoodjunkie

Смежные вопросы