复合键时插入DUPLICATE KEY UPDATE

pl7*_*l71 5 php mysql

我想在插入MySQL表新行仅当现有列3的组合(ID,Type,Year)不是唯一的.如果这3列匹配,我想只更新字段'Val'.

这是表:

 CREATE TABLE IF NOT EXISTS `Abs` (
 `ID` bigint(10) NOT NULL,
 `Type` int(11) NOT NULL,
 `Year` int(11) NOT NULL,
 `val` decimal(4,1) DEFAULT NULL, ....
Run Code Online (Sandbox Code Playgroud)

这就是我创建复合索引并使用INSERT ON DUPLICATE KEY,尝试保存IF THEN块的原因.

在我的表中没有任何行Type= 0,但以下似乎没有插入任何内容.

INSERT INTO `Abs` (`ID`, `Type`, `Year`, `Val`) VALUES (141, 0, 2013, 5) 
ON DUPLICATE KEY UPDATE `Val` = 5
Run Code Online (Sandbox Code Playgroud)

这是我的综合指数:ALTER TABLE Abs ADD PRIMARY KEY( , , ID );
TypeYear

在这种情况下,最好的方法是什么.我认为这是RDB世界中非常常见的情况,但找不到简单的解决方案.