我有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"从原始版本值?
感谢您的建议。
答案 0 :(得分:1)
你需要小心MySQL。 VALUES(version)>version
可能正在使用更新的 version
而不是其原始值。这与标准SQL不同,是mentioned here。
更改作业的顺序,以便首先进行测试。