首页
学习
活动
专区
圈层
工具
发布

mysql技巧:如果记录存在则更新如果不存在则插入的三种处理方法

要求: 新增一个员工时,如果该员工已存在(以员工号f_emp_code作为判断依据),则更新,否则插入。而且工资f_salary,更新时,不得低于原工资(即:工资只能涨,不能降)。...10007' , '新人' , '西安' , IF(1000 > f_salary , 1000 , f_salary)); replace into相当于,先检测该记录是否存在(根据表上的唯一键),如果存在...这个方法有一个很大的问题,如果记录存在,每次执行完,主键自增id就变了(相当于重新insert了一条),对于有复杂关联的业务场景,如果主表的id变了,其它子表没做好同步,会死得很难看。...但是有另外一个问题,如果这个表上有不止一个唯一约束,在特定版本的mysql中容易产生dead lock(死锁),见网友文章https://blog.csdn.net/pml18710973036/article

12.7K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    记录不存在则插入,存在则更新 → MySQL 的实现方式有哪些?

    ,不存在则执行插入   针对这个需求,我们有哪些实现方式?...,碰到 不存在则插入,存在则更新 的需求时,第一时间往往想到的是 REPLACE INTO   工作原理 replace into 跟 insert 功能类似   不同点在于: replace into...首先尝试插入数据到表中,如果发现表中已经有此行数据(根据主键或者唯一索引判断)则先删除此行数据,然后插入新的数据,否则直接插入新数据 replace 语句会返回一个数,表示受影响的行的数目,该数是被删除和被插入的行数的和...值的新纪录是插入时就会发生 duplicate key error ,每次冲突之后 AUTO_INCREMENT += 1,直到增长为 max(id) + 1 之后才能恢复正常 INSERT UPDATE   针对 不存在则插入...,存在则更新 , MySQL 还提供了另外一种方言实现: INSERT ...

    3K10

    PQ获取TABLE的单一值作为条件查询MySQL返回数据

    下午,我正爽歪歪地喝着咖啡,看着Power BI每秒钟刷新一次,静静等待某个分公司完成本月绩效任务,自动调用Python在钉钉群中发送喜报: 紧接着再次调用Python将Power BI云端报告中的各分公司最新完成率数据和柱状图截图发在群里...: 用的自然是下面这两篇文章的骚操作: 如果雇一个人7d×24h每10秒刷新一次Power BI,我需要每月支付他多少钱?...问题来了:这个时候如果是你,你会怎么完成这个任务?(前提,数据库中有所有人的全部记录。)...常规思路是,直接在数据库中查找这个人,按条件返回即可,只不过还得写一个导出到文件,然后打开文件复制到原来的表中,说实话还真有点繁琐。 PowerQuery能帮助我们很简便地解决这个问题。...我们测试一下: 不论怎么调整顺序,或者删除数据,只要表中还有moon,那么返回的结果都是不会变的。

    5.3K51

    MySQL的JSON数据类型介绍以及JSON的解析查询

    目录 概述 JSON 数据类型的意义 JSON相关函数 测试 创建测试表 插入数据 查询数据 条件查询 优化JSON查询 解决方案 总结 概述 MySQL从5.7后引入了json数据类型以及json函数...1,否则返回0.如果有参数为NULL或path不存在,则返回null JSON_CONTAINS_PATH JSON_CONTAINS_PATH(json_doc, one_or_all, path[..., path] …) 检查是否存在指定路径,是否满足一个或者所有,存在返回1,否则返回0.如果有参数为null,则返回null。...如果有参数为NUL或path不存在,则返回NULL。oneor_all:”one”表示查询到一个即返回;”all”表示查询所有。search_str:要查询的字符串。...则先转换成[doc] MySQL里的JSON分为json array和json object。

    13.8K20

    python面试题-【二分法查找】给定一个已排序的非重复整数数组和一个目标值,如果找到目标,则返回索引。

    前言 给定一个已排序的非重复整数数组和一个目标值,如果找到目标,则返回索引。如果不是,返回索引按顺序插入时的位置。 题目 给定一个已排序的非重复整数数组和一个目标值,如果找到目标,则返回索引。...如果不是,返回索引按顺序插入时的位置。...二分法思想 1.首先从数组的中间元素开始查找,如果该元素正好是目标元素,则搜索结束,否则执行下一步。...3.如果某一步数组为空,则表示找不到目标元素 如下图,数组中有目标元素,查找21 如下图,数组中没有目标元素,查找70 直到 low > high 查找失败 python3 二分法查找 python3...low = mid + 1 else: high = mid - 1 return low # 没找到则返回其位置左边的下标

    1.4K20

    MySQL存储过程

    项目中需要一个脚本,需要在MySQL 中判断表的索引是否存在,不存在则创建。 本以为MySQL存在以下的语句能够完成上面的功能,但是没有。...MySQL 判断表的索引是否存在,不存在则创建的存储过程书写如下。折腾了一个下午,很多细节需要了解,不然会出现自认为莫名其妙的问题。...--------------------------- --@brief:判断指定数据表的索引是否存在,如果不存在则创建 --@param:tableName:数据表名称;idxName:索引名称;columnName...(3)本来以为可以使用如下语句来判断某个表的指定索引是否存在,但作为IF NOT EXISTS的判断条件时却出错,目前还不知道原因。...\G表示以列形式展示结果) show create procedure [procedureName] \G --删除存储过程 drop procedure [procedureName]; --如果存在则删除存储过程

    14.3K10

    SQL 查找是否存在,别再 COUNT 了,很耗费时间的

    根据某一条件从数据库表中查询 『有』与『没有』,只有两种状态,那为什么在写SQL的时候,还要SELECT COUNT(*) 呢?...= NULL ) { //当存在时,执行这里的代码 } else { //当不存在时,执行这里的代码 } SQL不再使用count,而是改用 LIMIT 1,让数据库查询时遇到一条就返回,不要再继续查找还有多少条了...COUNT()有两个非常不同的作用:它可以统计某个列值的数量,也可以统计行数。在统计列值时要求列值是非空的(不统计NULL)。...如果在COUNT()的括号中定了列或者列表达式,则统计的就是这个表达式有值的结果数。......COUNT()的另一个作用是统计结果集的行数。...当MySQL确认括号内的表达式值不可能为空时,实际上就是在统计行数。

    6.3K20

    MySQL基础-子查询

    ,或者需要从同一个表中先计算得出一个数据结果,然后与这个数据结果(可能是某个标量,也可能是某个集合)进行比较 子查询的基本语法结构: 说明: 子查询(内查询)在主查询之前一次执行完成 子查询的结果被主查询...,然后这个数据结果作为主查询的条件进行执行 相关子查询 :如果子查询需要执行多次,即采用循环的方式,先从外部查询开始,每次都传入子查询进行查询,然后再将结果反馈给外部 二、单行子查询 1、单行比较操作符...,空值参与到主查询中会导致没有记录返回 正确示例: 四、相关子查询 1、相关子查询概念 如果子查询的执行依赖于外部查询,通常情况下都是因为子查询中的表用到了外部的表,并进行了条件关联,因此每执行一次外部查询...如果在子查询中不存在满足条件的行: 条件返回 FALSE 继续在子查询中查找 如果在子查询中存在满足条件的行: 不在子查询中继续查找 条件返回 TRUE NOT EXISTS关键字表示如果不存在某种条件...,则返回TRUE,否则返回FALSE 题目:查询公司管理者的employee_id,last_name,job_id,department_id信息 SELECT e1.employee_id,e1.last_name

    3.9K10

    一篇文章详解你不知道的MySQL JSON数据类型

    如果指定 path 不存在,会返回 NULL。可指定多个 path,匹配到的多个值会以数组形式返回。...,当执行JSON_SET()函数时: 如果指定路径已经存在,则会更新此路径上的值; 如果指定路径不存在,则会插入新的路径和值。...------------------------------------------+ | {"age": 35, "city": "New York", "name": "John"} | -- 不存在则新增字段...如果目标路径中已经存在值,那么会将其替换为新的值;如果目标路径不存在,则不会修改 JSON 数据,也不会新增路径。...如果路径存在,则删除目标路径及其内容。 如果路径不存在,则返回原 JSON 数据,不报错。 语法: JSON_REMOVE(json_doc, path [, path] ...)

    19700

    MongoDB数据插入、删除、更新、批量更新某个字段

    使用修改器来完成局部更新操作  4.1 $set修改器 $set修改器用来指定一个键值对,如果存在键就进行修改不存在则进行添加。...4.4 $push修改器 $push修改器用法: 1.如果指定的键是数组增追加新的数值 2.如果指定的键不是数组则中断当前操作Cannot apply $push/$pushAll modifier to...non-array 3.如果不存在指定的键则创建数组类型的键值对 4.此方法可添加重复数据 // 修改器名称:$push // 语法:{ $push : { field : value } } //...如果指定的键不是数组则中断当前操作:  ? 如果不存在指定的键则创建数组类型的键值对:  ? 此方法可添加重复数据:  ?...4.6 $addToSet修改器  $addToSet修改器是如果目标数组存在此项则不操作,不存在此项则加进去,即不添加重复数据。

    28.1K73
    领券