Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用IF进行重复密钥更新时的MYsql插入_Mysql - Fatal编程技术网

使用IF进行重复密钥更新时的MYsql插入

使用IF进行重复密钥更新时的MYsql插入,mysql,Mysql,我有一个sy_版本表,它有两个主键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, `down

我有一个sy_版本表,它有两个主键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,但其他列已更新,所以我尝试将部分更改为NULL,并按我所希望的那样工作

file=if(VALUES(version)>version,null,file) ==> file=if(VALUES(version)>'2015.11.01',null,file) ; 
问题是我怎么不能从原始版本值中获取“2015.01.01”


谢谢你的建议。

你需要小心使用MySQL。
VALUES(version)>version
可能使用的是更新后的
version
,而不是其原始值。这不同于标准的SQL,并且是

更改作业的顺序,以便先考试。

请不要交叉张贴: