MYsql使用IF插入DUPLICATE KEY UPDATE

时间:2015-11-24 06:34:02

标签: mysql

我有sy_version表,它有2个主键mod_id和sub_mod

CREATE TABLE `sy_version` (
`mod_id` VARCHAR(2) NOT NULL,
`sub_mod` VARCHAR(30) NOT NULL,
`version` VARCHAR(50) NULL DEFAULT NULL,
`remark` VARCHAR(50) NULL DEFAULT NULL,
`update_date` DATETIME NULL DEFAULT NULL,
`download_link` VARCHAR(50) NULL DEFAULT NULL,
`file` BLOB NULL,
PRIMARY KEY (`mod_id`, `sub_mod`)
)COLLATE='utf8_general_ci'
ENGINE=MyISAM;

我的数据是

CS;sbm_sl.exe;2015.11.01;IBS Sales App;2015-11-10 11:34:13;\N;0x73002E00000000

我想使用insert into on duplicate key来更新我的数据,因为第一个工作正常。但每次我执行我得到我的文件列变为NULL,我想要的结果是:当我想要设置的版本大于当前(原始)版本时,文件变为NULL。命令如下所示

INSERT INTO sbm_sys.sy_version (mod_id,sub_mod,`version`,remark,update_date,file) 
values ('CS','sbm_sl.exe','2015.11.07.1','IBS Sales App','2015-11-10 11:34:13', NULL) 
ON DUPLICATE KEY UPDATE `version`='2015.11.07.1', remark='IBS Sales App', 
update_date='2015-11-10 11:34:13', file=if(VALUES(version)>version,null,file) ;

它没有正常工作,文件列不会变为NULL但其他列已更新,所以我尝试更改部分变为,并且它按照我的希望工作

file=if(VALUES(version)>version,null,file) ==> file=if(VALUES(version)>'2015.11.01',null,file) ; 

问题是我怎么能得到" 2015.01.01"从原始版本值?

感谢您的建议。

1 个答案:

答案 0 :(得分:1)

你需要小心MySQL。 VALUES(version)>version可能正在使用更新的 version而不是其原始值。这与标准SQL不同,是mentioned here

更改作业的顺序,以便首先进行测试。