要求: 新增一个员工时,如果该员工已存在(以员工号f_emp_code作为判断依据),则更新,否则插入。而且工资f_salary,更新时,不得低于原工资(即:工资只能涨,不能降)。...f_salary ) VALUES( '10007' , '新人' , '西安' , IF(1000 > f_salary , 1000 , f_salary)); replace into相当于,先检测该记录是否存在...(根据表上的唯一键),如果存在,先delete,然后再insert。...这个方法有一个很大的问题,如果记录存在,每次执行完,主键自增id就变了(相当于重新insert了一条),对于有复杂关联的业务场景,如果主表的id变了,其它子表没做好同步,会死得很难看。...该方法,没有replace into的副作用,不会导致已存在记录的自增id变化。
需要将入参与表中数据比判断,找出哪些是新插入,哪些需要更新,哪些是删除的,然后再做对应的数据操作 需求 我们有表如下: 当商品配送完后之后,需要记录它的最新配送价,若商品最新配送价已经存在则进行更新...,不存在则执行插入 针对这个需求,我们有哪些实现方式?...INTO 当数据库是 MySQL ,碰到 不存在则插入,存在则更新 的需求时,第一时间往往想到的是 REPLACE INTO 工作原理 replace into 跟 insert 功能类似... 不同点在于: replace into 首先尝试插入数据到表中,如果发现表中已经有此行数据(根据主键或者唯一索引判断)则先删除此行数据,然后插入新的数据,否则直接插入新数据 replace 语句会返回一个数...) 已经存在,那么先删除此记录,然后插入 (1001,10001,20.5,1,1) 而 (1001,10002,5.45,1,1) 判定为不存在,那么直接插入 这就导致我们看到的输出结果是:
/mongo 2.创建数据库 (如果数据库不存在,则创建数据库,否则切换到指定数据库。)...type="math/tex" id="MathJax-Element-7">,inc…)等,也可以理解为sql update查询内set后面的 upsert : 可选,这个参数的意思是,如果不存在...update的记录,是否插入objNew,true为插入,默认是 false,不插入。...multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。 writeConcern :可选,抛出异常的级别。...justOne : (可选)如果设为 true 或 1,则只删除一个文档。 writeConcern :(可选)抛出异常的级别。
multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。 writeConcern :可选,抛出异常的级别。...writeConcern :可选,抛出异常的级别 如果传入的文档中含有_id,并且_id的值是数据库中已经存在的,则替换该条记录。...如果传入的文档中含有_id,并且_id的值在数据库中不存在,则相当于insert,插入一条数据。 如果传入的文档中没有_id,则相当于insert,插入一条数据。...writeConcern :可选,抛出异常的级别 如果传入的文档中含有_id,并且_id的值是数据库中已经存在的,则替换该条记录。...如果传入的文档中含有_id,并且_id的值在数据库中不存在,则相当于insert,插入一条数据。 如果传入的文档中没有_id,则相当于insert,插入一条数据。
update : update的对象和一些更新的操作符(如$,$inc...)等,也可以理解为sql update查询内set后面的 upsert : 可选,这个参数的意思是,如果不存在update的记录...,是否插入objNew,true为插入,默认是false,不插入。...multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。 writeConcern :可选,抛出异常的级别。...justOne : (可选)如果设为 true 或 1,则只删除一个文档。...eg:db.col.remove({'title':'MongoDB 教程'})只删除第一条 db.col.remove({})//删除所有的记录 查询数据以格式化的方式显示 db.col.find
MongoDB 创建数据库MongoDB 创建数据库的语法格式如下:use DATABASE_NAME> use hyy如果数据库不存在,则创建数据库,否则切换到指定数据库。...update : update的对象和一些更新的操作符(如$,$inc...)等,也可以理解为sql update查询内set后面的upsert : 可选,这个参数的意思是,如果不存在update的记录...multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。writeConcern :可选,抛出异常的级别。...justOne : (可选)如果设为 true 或 1,则只删除一个文档,如果不设置该参数,或使用默认值 false,则删除所有匹配条件的文档。writeConcern :(可选)抛出异常的级别。...参数说明:query :(可选)删除的文档的条件。justOne : (可选)如果设为 true 或 1,则只删除一个文档,如果不设置该参数,或使用默认值 false,则删除所有匹配条件的文档。
.save() save():如果 _id 主键存在则更新数据,如果不存在就插入数据。...:update 的对象和一些更新的操作符(如 inc…)等,也可以理解为sql update查询内set后面的 :可选,这个参数的意思是,如果不存在update的记录,...:可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。 :可选,抛出异常的级别。...:可选,如果设为 true 或 1,则只删除一个文档,如果不设置该参数,或使用默认值 false,则删除所有匹配条件的文档。....find().limit(NUMBER).skip(NUMBER) # skip()跳过的记录条数 Demo 显示2条记录,跳过第一条记录 db.lizhengi_test.find
true,则创建固定集合。...如果 capped 为 true,也需要指定该字段。 max 数值 (可选)指定固定集合中包含文档的最大数量。 注意:当集合不存在时,向集合中插入文档也会自动创建该集合。...justOne : 可选如果设为 true 或 1,则只删除一个文档,如果不设置该参数,或使用默认值 false,则删除所有匹配条件的文档。 writeConcern :可选抛出异常的级别。...update : update的对象和一些更新的操作符(如 , inc…)等,也可以理解为sql update查询内set后面的 upsert : 可选,这个参数的意思是,如果不存在update的记录,...multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。 writeConcern :可选,抛出异常的级别。
update : update的对象和一些更新的操作符(如$,$inc...)等,也可以理解为sql update查询内set后面的 upsert : 可选,这个参数的意思是,如果不存在update的记录...,是否插入objNew,true为插入,默认是false,不插入。...multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。 writeConcern :可选,抛出异常的级别。...以上语句只会修改第一条发现的文档,如果你要修改多条相同的文档,则需要设置 multi 参数为 true。...MongoDB 教程'},{$set:{'title':'MongoDB'}},{multi:true}) ---- save() 方法 save() 方法通过传入的文档来替换已有文档,_id 主键存在就更新,不存在就插入
(document) save():如果 _id 主键存在则更新数据,如果不存在就插入数据。...justOne : (可选)如果设为 true 或 1,则只删除一个文档。...nRemoved" : 2 }) # 删除了两条数据>db.col.find()…… # 没有数据 ---- 如果你只想删除第一条找到的记录可以设置...update : update的对象和一些更新的操作符(如,inc…)等,也可以理解为 sql update查询的set子句 upsert : 可选,这个参数的意思是,如果不存在update的记录,是否插入...multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。 writeConcern :可选,抛出异常的级别。
update : update的对象和一些更新的操作符(如$,$inc...)等,也可以理解为sql update查询内set后面的upsert : 可选,这个参数的意思是,如果不存在update的记录...multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。writeConcern :可选,抛出异常的级别。...以上语句只会修改第一条发现的文档,如果你要修改多条相同的文档,则需要设置 multi 参数为 true。...justOne : (可选)如果设为 true 或 1,则只删除一个文档,如果不设置该参数,或使用默认值 false,则删除所有匹配条件的文档。writeConcern :(可选)抛出异常的级别。...nRemoved" : 2 }) # 删除了两条数据>db.col.find()…… # 没有数据1234如果你只想删除第一条找到的记录可以设置
批量插入文档 shell 这样执行是错误的 db.[collectionName].insert([{},{},{},……..]),这样仅可以插入第一条数据。 如图: ?...使用修改器来完成局部更新操作 4.1 $set修改器 $set修改器用来指定一个键值对,如果存在键就进行修改不存在则进行添加。...non-array 3.如果不存在指定的键则创建数组类型的键值对 4.此方法可添加重复数据 // 修改器名称:$push // 语法:{ $push : { field : value } } //...如果指定的键不是数组则中断当前操作: ? 如果不存在指定的键则创建数组类型的键值对: ? 此方法可添加重复数据: ?...4.6 $addToSet修改器 $addToSet修改器是如果目标数组存在此项则不操作,不存在此项则加进去,即不添加重复数据。
, , inc…)等,也可以理解为sql update查询内set后面的 upsert : 可选,这个参数的意思是,如果不存在...update的记录,是否插入objNew,true为插入,默认是false,不插入。...multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。 writeConcern :可选,抛出异常的级别。...justOne : (可选)如果设为 true 或 1,则只删除一个文档。 writeConcern :(可选)抛出异常的级别。...如果没有索引,MongoDB在读取数据时必须扫描集合中的每个文件并选取那些符合查询条件的记录。
replace into语法浅析 今天有个开发问我replace into和insert into哪个效率高,就我了解,replace是会首先判断这个值在不在,如果在的话,则进行更新操作,否则进行插入操作...*/ 也就是说,主键冲突时,数据库对表做先删除然后插入的操作,也即先删除id=1的记录,然后插入新的id=1 的记录(1,2,5). 如果在这种情况下,唯一键发生冲突呢?...主键和唯一键同时冲突,如果需要插入的值的主键 和唯一和表中已经存在记录同时冲突。...如果表包含主键和唯一性索引: 当不存在冲突时,replace into 相当于insert操作。...,如果主键是自增的,则自增主键会做 +1 操作。
,若不存在则创建 5 > show dbs 6 admin 0.000GB 7 config 0.000GB 8 local 0.000GB 9 > db.age01.insert...,如果该集合不在该数据库中,MongoDB 会自动创建该集合并插入文档。...upsert : 可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。...multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。 writeConcern :可选,抛出异常的级别。...justOne : (可选)如果设为 true 或 1,则只删除一个文档,如果不设置该参数,或使用默认值 false,表示删除所有匹配条件的文档。
0表示文章的顶级评论 # 数据库操作 # 选择和创建数据库 选择和创建数据库的语法格式: use 数据库名称 如果数据库不存在则自动创建,例如,以下语句创建articledb 数据库: use articledb...# 集合的隐式创建 当向一个集合中插入一个文档的时候,如果集合不存在,则会自动创建集合。 详见 文档的插入 章节。 提示:通常我们使用隐式创建文档即可。...如果为真,则按顺序插入数组中的文档,如果其中一个文档出现错误,MongoDB将返回而不处理数组中的其余文档。如果为假,则执行无序插入,如果其中一个文档出现错误,则继续处理数组中的主文档。...如:查询用户编号是1003的记录,但只最多返回符合条件的第一条记录: db.comment.findOne({userid:'1003'}) # 投影查询 如果要查询结果返回部分字段,则需要使用投影查询...,则只更新符合条件的第一条记录 列值增长的修改 如果我们想实现对某列值在原有值的基础上进行增加或减少,可以使用 $inc 运算符来实现。
use pydb switched to db pydb 删除当前指向的数据库,如果数据库不存在,则什么也不做 >db.dropDatabase() { "ok" : 1 } stats()查看当前数据库信息...,如果文档的_id不存在则添加 db.集合名称.save(document) 增加一条数据和insert相同 db.student.save({name:'testname',age:23}) WriteResult...>, { justOne: } ) 参数query:可选,删除的文档的条件。...参数justOne:可选,默认false,表示删除多条,true或1,则只删除一条。...中set部分 参数multi:可选,默认false,只修改第一条记录,true表示满足条件的文档全部修改 > db.student.update({_id:'2'},{name:'bx2',age:20
就是说,创建集合(数据表)后要再插入一个文档(记录),集合才会真正创建。...如果我们要对查询结果设置指定条数的记录可以使用 limit() 方法,该方法只接受一个数字参数。...如果查找到的匹配数据多于一条,则只会修改第一条。...,如果要修改所有匹配到的记录,可以使用 update_many()。...mycol = mydb["sites"] x = mycol.delete_many({}) 删除成功 drop() 返回 true,如果删除失败(集合不存在)则返回 false。
updateMany() 更新所有匹配到的数据 upsert upsert是一个布尔类型的数据,如果为true时,当根据query条件没有找到匹配的数据时,就表示插入此条数据,如果为false...true,就把按条件查出来多条记录全部更新。...如果这个键不存在,则创建它。...注意这里的更新默认是只更新第一条匹配到的数据,如果第一条匹配的数据已经满足修改后的条件,那么将不会执行下面匹配的信息 下面我们将会添加一条信息在数据库中 db.user.insert({"name":'...590674ce30b9f88dd43d7ee4"), "name" : "chenjiabing", "age" : "Man", "school" : { "name" : "jsnu", "city" : "beijing" } } 如果指定的字段不存在
在shell 命令窗口键入如下命令: > use cnblogs // use 命令用来切换当前数据库,如果该数据库不存在,则会先新建一个。 ?...如果集合users不存在,则会先新建一个,然后再插入数据,参数以JSON格式传入。...'name':'xiangshu'},{'$set':{'sex':'women'}},upsert=true,multi=false) 解释一下几个参数: 第一:查询的条件 第二:更新的字段 第三:如果不存在则插入...第四:是否允许修改多条记录 4.5)删除记录 我们现在要把第一条记录即'name'为'xumingxiang'的 在shell 命令窗口键入如下命令: > db. users.remove({'name...定义Mongo服务 Mongo mongo = new Mongo(strconn); //打开连接 mongo.Connect(); //获得数据库cnblogs,若不存在则自动创建
领取专属 10元无门槛券
手把手带您无忧上云