场景一:数据库表有唯一索引,如test表的字段tel是唯一索引。
test表有唯一索引可以作为存在更新的标识。可以用两种写法实现批量更新的操作。
DROP TABLE IF EXISTS `test`;
CREATE TABLE `test` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`tel` varchar(16) NOT NULL,
`name` varchar(255) NOT NULL,
`hobby` varchar(255) NOT NULL,
`birthday` datetime NOT NULL,
`del_flag` tinyint(3) NOT NULL DEFAULT '0' COMMENT '0正常1删除',
PRIMARY KEY (`id`),
UNIQUE KEY `unique_tel` (`tel`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=22 DEFAULT CHARSET=utf8;
用法1:
insert INTO `hpm`.`test` (
`tel`,
`name`,
`hobby`,
`birthday`,
`del_flag`
)
VALUES
(
'11156665544',
'5',
'5',
'2020-01-25',
'0'
) ON DUPLICATE KEY UPDATE
`name`=VALUES(`name`),
`hobby`=VALUES(`hobby`),
`birthday`=VALUES(`birthday`),
`del_flag`=VALUES(`del_flag`);
用法2:
replace INTO `hpm`.`test` (
`tel`,
`name`,
`hobby`,
`birthday`,
`del_flag`
)
VALUES
(
'5',
'55',
'5555',
'2020-01-15',
'0'
);
场景二:数据库表没有唯一索引,则不能用mysql这个特性。可以使用先删除再增加的方式实现批量更新。
为了保证数据的唯一性,在这两个sql操作加上事务。