1, 使用ignore关键字
INSERT IGNORE INTO `table_name` (`email`, `phone`, `user_id`) VALUES ('test9@163.com', '99999', '9999');
如果是用主键primary或者唯一索引unique区分了记录的唯一性,避免重复插入记录可以使用;
这样当有重复记录就会忽略,执行后返回数字0
2, 使用replace
REPLACE INTO `table_name` (`email`, `phone`, `user_id`) VALUES ('test569', '99999', '123');
执行步骤:
- 尝试把新行插入到表中
- 当因为对于主键或唯一关键字出现重复关键字错误而造成插入失败时:
2.1 从表中删除含有重复关键字值的冲突行
2.2 再次尝试把新行插入到表中
旧记录与新记录有相同的值的判断标准就是:
表有一个PRIMARY KEY或UNIQUE索引,否则,使用一个REPLACE语句没有意义。该语句会与INSERT相同,因为没有索引被用于确定是否新行复制了其它的行。
返回值
REPLACE语句会返回一个数,来指示受影响的行的数目。该数是被删除和被插入的行数的和
3,ON DUPLICATE KEY UPDATE
INSERT INTO `table` (`a`, `b`, `c`) VALUES (1, 2, 3) ON DUPLICATE KEY UPDATE `c`=`c`+1;
您可以在UPDATE子句中使用VALUES(col_name)函数从INSERT…UPDATE语句的INSERT部分引用列值。譬如:
INSERT INTO `table` (`a`, `b`, `c`) VALUES (1, 2, 3), (4, 5, 6) ON DUPLICATE KEY UPDATE `c`=VALUES(`a`)+VALUES(`b`);