mysql处理某个唯一索引时存在则更新,不存在则插入的情况应该是很常见的,网上也有很多类似的文章,我今天就讲讲当这个唯一的索引是多列唯一索引时可能会遇到的问题和方法。
方法一:
使用 INSERT INTO ON ... DUPLICATE KEY UPDATE ... :
表的创建如下:
CREATE TABLE `test_table` (
`id` int(11) NOT NULL AUTO_INCREMENT ,
`var1` varchar(100) CHARACTER SET utf8 DEFAULT NULL,
`var2` tinyint(1) NOT NULL DEFAULT '0',
`var3` varchar(100) character set utf8 default NULL,
`value1` int(11) NOT NULL DEFAULT '1',
`value2` int(11) NULL DEFAULT NULL,
`value3` int(5) DEFAULT NULL,
PRIMARY KEY (`Id`),
UNIQUE INDEX `index_var` (`var1`, `var2`, `var3`)
) ENGINE=MyISAM DEFAULT CHARACTER SET=latin1 AUTO_INCREMENT=1;
其中该表中var1、var2和var3完全相同的记录只能有一条,所以建了一个多列唯一索引index_var,这样一来我们就可以使用 INSERT INTO ON ... DUPLICATE KEY UPDATE ... 来实现插入数据时存在则更新,不存在则插入的功能了,如下:
INSERT INTO `test_table`
(`var1`, `var2`, `var3`, `value1`, `value2`, `value3`) VALUES
('abcd', 0, 'xyz', 1, 2, 3)
ON DUPLICATE KEY UPDATE `value1` = `value1` + 1 AND
`value2` = `value2` + 2 AND `value3` = `value3` + 3;
该条插入语句的含义是:向test_table表中插入,如果不存在val1 = 'abcd',val2 = 0, val3 = ‘xyz’的记录,