当多字段组成的唯一索引重复时插入数据报错,但是不想让它报错继续插入,可以使用ON DUPLICATE KEY UPDATE(业务场景允许修改其中某个字段的值的情况下)
比如记录用户最后登录的时间和ip,用户名和ip和更新时间组成唯一索引,当这三个条件都重复时插入失败,可以修改相对不是那么重要的时间来保证插入的成功。
CREATE TABLE `last_login_log` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`username` varchar(255) DEFAULT NULL,
`ip_addr` varchar(255) DEFAULT NULL,
`update_time` datetime DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `username_ip_time` (`username`,`ip_addr`,`update_time`) USING BTREE
) ENGINE=MyISAM AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
INSERT INTO last_login_log (
username,
ip_addr,
update_time
)
VALUES
(
'菜鸟一号',
'192.122.4.4',
NOW()
) ON DUPLICATE KEY UPDATE update_time = now();