在插入数据时,可能需要忽略或替换掉重复的数据(依据某个字段),这时可以在应用层处理,也可以使用复杂的 SQL 语句来处理(如果仅仅知道一些简单的 SQL 语法的话),当然也可以使用一些简单的 SQL 语法,不过它并不是通用所有的数据库类型。

以下所有实例仅针对 MySQL 而言,并不能随意用于其它数据库

表名称:student

Column Name Primary Key Auto Increment Unique
id true true
name true
age

初始表数据:

id name age
1 Jack 18

注:以下所有的示例都需要被插入的数据中需要存在 UNIQUE索引 PRIMARY KEY 字段,同时这里引入表的主键 id ,并设置成 自动递增 ,后面可以看到它的变化

1. 不存在则插入,存在则更新

1.1 on duplicate key update

如果插入的数据会导致 UNIQUE 索引 PRIMARY KEY 发生冲突/重复,则 执行 UPDATE 语句 ,例:

INSERT INTO `student`(`name`, `age`) VALUES('Jack', 19)
  ON DUPLICATE KEY 
  UPDATE `age`=19; -- If will happen conflict, the update statement is executed
-- 2 row(s) affected

这里受影响的行数是 2 ,因为数据库中存在 name='Jack' 的数据,如果不存在此条数据,则受影响的行数为 1

最新的表数据如下:

id name age
1 Jack 19

1.2 replace into

如果插入的数据会导致 UNIQUE 索引 PRIMARY KEY 发生冲突/重复,则 先删除旧数据再插入最新的数据 ,例:

REPLACE INTO `student`(`name`, `age`) VALUES('Jack', 18);
-- 2 row(s) affected

这里受影响的行数是 2 ,因为数据库中存在 name='Jack' 的数据,并且 id 的值会变成 2 ,因为它是先删除旧数据,然后再插入数据,最新的表数据如下:

id name age
2 Jack 19

2. 避免重复插入

关键字/句: insert ignore into ,如果插入的数据会导致 UNIQUE索引 PRIMARY KEY 发生冲突/重复,则忽略此次操作/不插入数据,例:

INSERT IGNORE INTO `student`(`name`, `age`) VALUES('Jack', 18);
-- 0 row(s) affected

这里已经存在 name='Jack' 的数据,所以会忽略掉新插入的数据,受影响行数为 0 ,表数据不变。

前言在插入数据时,可能需要忽略或替换掉重复的数据(依据某个字段),这时可以在应用层处理,也可以使用复杂的 SQL 语句来处理(如果仅仅知道一些简单的 SQL 语法的话),当然也可以使用一些简单的 SQL 语法,不过它并不是通用所有的数据库类型。 以下所有实例仅针对MySQL而言,并不能随意用于其它数据库实例表名称:student表字段: Column Name Primary Key
//如果 不存在 ,则 插入 新数据 $sql = “INSERT INTO {$ecs->table(‘cat_lang’)} (cat_id,lang_id,cat_name,keywords,cat_desc) VALUES({$cat_id},{$k},'{$val[‘cat_name’]}’,'{$val[‘keywords’]}’,'{$val[‘cat_desc’]}’) ON DUPLICATE KEY UPDATE cat_name='{$val[\u2018cat_name\u2019]}\u2019,cat_desc='{$val[‘cat_desc’]}’,keywords='{$val[‘cat_desc
最近这个需求是 php 接收前端数据,然后将数据存入数据库中,但相同记录不能存入。 查了查百度,都把简单的事情复杂化了,竟然还有先查询数据表再判断 插入 的方式(大拇指),通通不采纳,后来直接翻阅了 SQL 手册,最终使用 IGNORE 关键字来做这件事情。 根据设置了主索引 PRIMARY 的字段进行判断,如果字段相同则不做 插入 记录操作,反之 插入 。 (1)一个数据库表,结构如下: (2)必须设置 需要依靠此字段来判断记录是否相同的 主索引字段,我设置的如下: 假设,你设置 ID 为主索引,那么就会以 ID 作为判断字段,如果 ID 有相同的则不 插入 Mysql 插入 数据时,需要 忽略 或替换掉重复的数据(依据某个字段,比如Primary Key或 Unique Key),这时候我们既可以在应用层处理,也可以使用复杂的 SQL 语句来处理(如果仅仅知道一些简单的 SQL 语法的话),当然也可以使用一些简单的 SQL 语法,不过它并不是通用所有的数据库类型。 下面我们以 MySQL 为例,研究一下insert 怎样去 忽略 或替换重复数据 2.表实例 表名称:person Column Name Primary Key
背景: 在数据库操作中,有这样一个场景:我们对一批数据进行存储,假如这批数据中有部分数据是重复的,可能是全部重复也可能是部分重复,存储的时候我们要把重复的数据合并。 create table store( ID int(8) auto_increment primary key, store_name varchar(255), store_href varchar(255) unique, credit_count int(4), albums_url varchar(120), phone v
.markdown-body { line-height: 1.75; font-weight: 400; font-size: 16px; overflow-x: hidden; color: rgba(51, 51, 51, 1) } .markdown-body h1, .markdown-body h2, .markdown-body h3, .markdown-body h4, .ma...
方案一:使用ignore关键字 如果是用主键primary或者唯一索引unique区分了记录的唯一性,避免重复 插入 记录可以使用: 代码如下: INSERT IGNORE INTO `table_name` (`email`, `phone`, `user_id`) VALUES (‘test9@163.com’, ‘99999’, ‘9999’);  这样当有重复记录就会 忽略 ,执行后返回数字0 还有个应用就是复制表,避免重复记录: 代码如下: INSERT IGNORE INTO `table_1` (`name`) SELECT `name` FROM `table_2`;  方案二:使用
毫无疑问,一个文件仅仅只能 存在 于某一台机器上。PS:(拷贝文件可以实现 存在 于多台机器,但是无法实现数据同时修改) I/O操作效率问题 打开文件读取数据、写入数据关闭文件都数据I/O操作,会大大影响我们程序的执行效率 数据库的诞生就... private static ObjectMapper mapper = new ObjectMapper(); public static <T> T json2obj(String jsonStr, Class<T> clazz) { try { return mapper.readValue(jsonStr, clazz); } catch (IOException var3) { throw new IllegalArgumentException("将JSON转换为对象时发生错误:" + jsonStr, var3); [/code]