首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

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

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

8.5K20

mysql实现不存在插入,存在更新,sql直接执行和mybatis实现的坑!

需求背景:数据表中有物理主键id,按照每次会话保存笔记,这里session_id作为每次会话的凭证,所以每次会话中可能会不断更新笔记,笔记存在更新笔记,不存在插入笔记 我想大家都会用 insert...上面语法在mysql直接执行sql语句是没问题的,但是mybatis就有大坑。我个人完全不推荐这么用等号赋值,而是用values,在文章末尾会给出推荐写法。...该语句是基于唯一索引或主键使用,比如一个字段session_id被加上了unique index,并且表中已经存在了该session_id的记录值,那么插入就会更新。...,直接插入。...其实这就相当于 -- 如果session_id相同代表是同一次会话,需求是笔记以会话为单位,一次会话不管怎么保存只能有一个笔记。

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

    Mybatis新增数据,存在更新,不存在添加

    插入一条数据,存在则不操作,不存在插入(必须现有唯一键) 使用insert ignore语句,例如插入数据: insert ignore into user_info (last_name,first_name...) values ('LeBron','James'); 这样一来,如果表中已经存在last_name='LeBron'且first_name='James'的数据,就不会插入,如果没有就会插入一条新数据...插入一条数据,存在更新,不存在插入(必须现有唯一键) a、INSERT...ON DUPLICATE KEY UPDATE的使用 如果指定了ON DUPLICATE KEY UPDATE,并且插入行后会导致在一个...在mybatis中使用(在update标签下),会更新ON DUPLICATE KEY UPDATE关键字后面的字段值 如果数据存在的话就会触发条件 ON DUPLICATE KEY UPDATE ,从而更新字段...在执行REPLACE后,系统返回了所影响的行数,如果返回1,说明没有重复的记录,如果返回2,说明有重复记录,系统先DELETE这条记录,然后再INSERT这条记录。

    15.8K30

    如果你只关注编程,错了!

    后来我因个人兴趣,转去做了生涯咨询工作,这件事搁置了。 一个偶然的机会,我看到了《编程卓越之道(卷 3):软件工程化》这本书,大受震撼,这就是我当年要找的图书啊!...然后,在第一类工作中,又有一些需要先做大量探索才能确认的工作,在估算开发时间时还没有办法清晰定义,这就使得一个软件项目在一开始时并不能被彻底拆解成多个可以估算的子任务,最终导致类 WBS 估算法难以顺畅实施...如果你看了这本书,理解了开发时间估算的问题,就能更为现实和灵活地看待开发计划和进度估算。 3....发布:刘恩惠 审核:陈歆懿  如果喜欢本文欢迎 在看丨留言丨分享至朋友圈 三连本周最火AutoGPT!

    20630

    如果再写 for 循环,我锤自己!

    条件通常为循环对象的长度,当超过长度停止循环。因为对象无法判断长度,所以搭配Object.keys()使用。 forEach ES5 提出。...此时建议使用 forEach 对于纯对象的遍历,选择for..in枚举更方便;对于数组遍历,如果不需要知道索引for..of迭代更合适,因为还可以中断;如果需要知道索引,则forEach()更合适;对于其他字符串...3 性能 有兴趣的读者可以找一组数据自行测试,文章直接给出结果了,并做相应的解释。...如果你需要将数组按照某种规则映射为另一个数组,就应该用 map。 如果你需要进行简单的遍历,用 forEach 或者 for of。 如果你需要对迭代器进行遍历,用 for of。...如果你需要过滤出符合条件的项,用 filterr。 如果你需要先按照规则映射为新数组,再根据条件过滤,那就用一个 map 加一个 filter。 总之,因地制宜,因时而变。

    46650

    nginx设置,如果网页404,跳转index

    如果你希望在使用Nginx时,当用户请求一个不存在的页面(即HTTP 404错误)时,能够自动跳转到​​index.html​​​页面,你可以使用Nginx的​​error_page​​指令来实现这一功能...; # 指定默认索引文件 location / { try_files $uri $uri/ /index.html; # 尝试返回请求的文件,如果存在则尝试目录...当请求的文件或目录不存在时,Nginx会回退到​​index.html​​文件。 ​​...如果你想要配置Nginx,使得当用户访问一个不存在的页面(404错误)时,他们会被重定向到另一个网站,你可以使用​​error_page​​​指令并指定一个​​return 301​​​或​​return...index.html; # 指定默认索引文件 location / { try_files $uri $uri/ =404; # 尝试返回请求的文件或目录,如果存在则返回

    72900

    MySQLdrop、delete与truncate的区别

    MySQLdrop、delete与truncate的区别 在MySQL中,drop、delete和truncate是用来删除表中数据或整个表的命令。...如果没有指定条件,则会删除整个表中的所有数据。 相比于DROP命令,DELETE命令更加灵活,可以根据需要删除表中的部分数据,而不是整个表。...执行该命令后,如果我们再查询该表,将会得到只剩下"Tom"和"Bob"两个记录的结果。...执行该命令后,如果我们再查询该表,将会得到一个空表。 5. 结论 在MySQL中,DROP、DELETE和TRUNCATE是用于删除表中数据或整个表的命令。...如果需要删除整个表,可以使用DROP命令;如果只需要删除或需要事务回滚的支持,则可以使用DELETE命令;如果需要快速删除整个表的数据且不需要事务回滚的支持,则可以使用TRUNCATE命令。

    1.1K20

    MySQL之delete user和drop user 的区别

    在一些测试用户创建完成之后,做完测试,可能用户的生命周期结束了,需要将用户删除,而删除用户在MySQL中一般有两种方法,一种是drop user,另外一种是delete from mysql.user...这一切得益于我们delete from mysql.user的操作,这种操作虽然从user表里面删除了记录,但是当这条记录的host是%时,如果重新创建一个同名的新用户,此时新用户将会继承以前的用户权限...再开看看drop的方法删除用户 首先,我们删除掉刚才的那两个用户,然后使用show grants for语句查看他们的权限: mysql ::>>drop user yeyz@'%'; Query OK...结论: 当我们想要删除一个用户的时候,尽量使用drop user的方法删除,使用delete方法可能埋下隐患,下次如果创建同名的用户名时,权限控制方面存在一定的问题。...这个时候,你需要看看日志,查询自己有没有进行过delete from mysql.user的操作,如果有,这个问题就很好解释了。

    1.4K10

    MySQL数据库:drop、truncate、delete的区别

    1、删除速度:drop>truncate>delete; 2、删除方式: (1)执行delete操作时,每次从表中删除一行,并且同时将该行的的删除操作记录在日志文件中。...delete可根据where条件删除表中指定的数据,如果不指定where子句,则跟truncate一样,可以删除表中所有记录。...(3)drop语句将表所占用的空间全释放掉。...4、提交方式:delete是DML,需要手动提交操作才能生效,可以回滚,可以触发触发器;truncate和drop是DDL,会隐式提交,不能回滚,不会触发触发器。...5、使用场景: (1)如果想删除表,当然用drop; (2)如果想保留表而将所有数据删除,而且和事务无关,用truncate即可; (3)如果和事务有关,或者想触发trigger,还是用delete;

    1.3K30

    如果我提前起床,闹钟你别响

    如果你有过醒来以后等闹钟的经历,如果你总是在闹钟响之前就起来了,那么你会不会希望闹钟能知道你已经起来了。如果你提前醒了,那么闹钟就不响,只有你一直睡着的时候,闹钟才会按时响起来。...如果中途闹钟响起来,去关它的时间可能就会让我的思路断掉。但是如果有时候晚上睡晚了,那么早上就会暂停写稿。这个时候我希望我的闹钟能在7点45叫醒我,让我有时间洗漱和收拾。 我希望这个过程不需要我去参与。...对于电脑来说,每天早上7点30分,如果电脑是开着的,说明我正在工作。...当http://autoemo.kingname.info:745/alarm_clock被访问的时候,它会去检查alarmclock.txt,如果这个文件不存在,或者里面的日期不是今天的日期,那么它就会返回...只有当alarmclock.txt存在,并且里面的内容为今天的日期,它才会返回“No”。

    71650

    如果这样来理解HTTPS,一篇够了!

    HTTPS原理,一篇够了》(本文) 4、一个引子 我们先不了聊HTTP/HTTPS,我们先从一个IM聊天软件说起。...如上图所示,只要这个密钥S不公开给第三者,同时密钥S足够安全,我们解决了我们一开始所定问题域了。因为世界上有且只有A与B知道如何加密和解密他们之间的消息。...细心的人可能已经注意到了如果使用非对称加密算法,我们的客户端A,B需要一开始持有公钥,要不没法开展加密行为啊。 这下,我们又遇到新问题了,如何让A、B客户端安全地得到公钥?...答案是证书本身已经告诉客户端怎么验证证书的真伪。 也就是证书上写着如何根据证书的内容生成证书编号。...因为客户端接收到的证书中会写有颁发机构,客户端根据这个颁发机构的值在本地找相应的公钥。 题外话: 如果浏览器和操作系统这道防线被破了,没办法。想想当年自己装过的非常规XP系统,都害怕。

    66120

    MySQL中使用undrop来恢复drop的表(上)

    MySQL中可以使用编程语言(比如Python)来解析binlog中DML的逆操作来达到闪回的效果,如果数据不多,手工解析也可以。这也是现在大家碰到的很多DML Flashback的一个基本原理。...而如果是DDL,比如DROP,那就得叹声气了。...GitHub上有一个很不错的项目是undrop,基于InnoDB,也就意味着如果你所在的环境有了drop操作还是存在恢复的可能了,当然这个过程需要谨慎,建议大家在测试环境先练习测试论证后再做决定,当然我们希望这个工具永远不要排上用场...2011 sakila.mwb -rw-r--r--. 1 jeanron jeanron 23099 Dec 16 2011 sakila-schema.sql 否则,这一套表结构还算是比较复杂的,存在外键关联...Nov 1 02:57 FIL_PAGE_INDEX drwxr-xr-x. 2 root root 4096 Nov 1 02:57 FIL_PAGE_TYPE_BLOB 比如INDEX目录下,存在大量的页

    2.2K50

    如果这样来理解HTTPS,一篇够了!

    HTTPS原理,一篇够了》(本文) 4、一个引子 我们先不了聊HTTP/HTTPS,我们先从一个IM聊天软件说起。...如上图所示,只要这个密钥S不公开给第三者,同时密钥S足够安全,我们解决了我们一开始所定问题域了。因为世界上有且只有A与B知道如何加密和解密他们之间的消息。...细心的人可能已经注意到了如果使用非对称加密算法,我们的客户端A,B需要一开始持有公钥,要不没法开展加密行为啊。 这下,我们又遇到新问题了,如何让A、B客户端安全地得到公钥?...答案是证书本身已经告诉客户端怎么验证证书的真伪。 也就是证书上写着如何根据证书的内容生成证书编号。...因为客户端接收到的证书中会写有颁发机构,客户端根据这个颁发机构的值在本地找相应的公钥。 题外话: 如果浏览器和操作系统这道防线被破了,没办法。想想当年自己装过的非常规XP系统,都害怕。

    70420

    CTO 说了,如果发现谁再用这个命令开除!

    我相信很多人都用过kill -9 pid 这个命令,彻底杀死进程的意思,一般情况我们使用它没有上面问题,但是在我们项目中使用它就有可能存在致命的问题。...,这个世界上没有绝对的安全系统或者架构,分布式事务也是一样,他也会存在问题,概率很小,如果一旦发生,损失有可能是无法弥补的,所以一定不能使用kill -9 去停止服务,因为你不知道他会造成什么后果。...application.yml server: port: 9988 12 启动项目 sudo mvn spring-boot:run 1 这是maven启动springboot项目的方式 看到这个代表项目启动成了...,很人性化,我们看看控制台 test — end被执行了,不过在停止线程池的时候还是调用了线程的interrupt方法,导致sleep报错,这三种方式都可以比较优雅的停止springboot服务,如果我项目中存在线程休眠...如果关闭的时候有新的请求,服务将不在接收此请求。 数据备份操作 如果我想在服务停止的时候做点备份操作啥的,应该怎么做呢?

    47430

    MySQL删除表数据、清空表命令(truncate、drop、delete 区别)

    一、MySQL清空表数据三种方法1.1 清空表数据:truncatesql命令#清空多张表、库中所有表的数据truncate table table_name1,table_name2,......同时也不释放表空间delete from tb_name;注意:删除表中数据而不删除表结构,也不释放空间delete可以删除一行、多行、乃至整张表每次删除一行,都在事务日志中为所删除的每行记录一项,可回滚如果不加...where条件,表示删除表中所有数据,仅删除数据、保留表结构,同时也不释放表空间MySQL、Mariadb、PostgreSQL删除表数据、清空表命令 都可用以上三种命令。...总结:如果您需要快速删除整个表中的数据,但保留表结构,可以选择truncate。如果您需要删除特定行的数据,可以根据条件删除,可以选择delete。...如果您需要删除整个表,包括表结构和数据,可以选择drop。在实际应用中,要根据具体需求和场景选择合适的操作。

    19.6K13
    领券