2017-02-20 150 views
0

我有以下SQL架構對重複密鑰更新插入新記錄

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" ; 

櫃面行已經存在,我想更新該行,否則我需要插入該行

我正在嘗試這種方式

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