2017-02-20 128 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