MySQL中on duplicate key update的使用方法实例

 更新时间:2022年09月09日 11:27:22   作者:厄尔尼诺的夏天  
在做数据统计的时候,我们经常会用到mysql的on duplicate key update语法来自动更新数据,下面这篇文章主要给大家介绍了关于MySQL中on duplicate key update的使用方法的相关资料,需要的朋友可以参考下

 mysql的存在就更新不存在就插入实现

先建数据库表,重点要添加主键索引(id列,没有测试)和唯一索引(branch_no列),随便找表测试

INSERT INTO t_name ( c1, c2, c3 )
VALUES
	( 1, '1', '1') 
	ON DUPLICATE KEY UPDATE
	c2 = '2';

测试:

1、organ_no, branch_no, branch_name, created_by字段都不相同

2、branch_name, created_by不同

3、唯一索引branch_no不同

4、修改的值包括了唯一索引值branch_no

现在数据库表内容

1、执行sql  :organ_no, branch_no, branch_name, created_by字段都不相同

INSERT INTO t_bank_organ_copy1 ( organ_no, branch_no, branch_name, created_by )
VALUES
	( 1, '3', '浙江分行', '3' ) 
	ON DUPLICATE KEY UPDATE
	branch_name = '江苏分行';

 因为没有值相同,所以一定添加

2、branch_name, created_by与表中数据不同

INSERT INTO t_bank_organ_copy1 ( organ_no, branch_no, branch_name, created_by )
VALUES
	( 1, '3', '海南分行', '4' ) 
	ON DUPLICATE KEY UPDATE
	branch_name = '江苏分行';

第三条数据从浙江分行改变成了江苏分行

 ON DUPLICATE KEY UPDATE 后的值是要修改的值

而这个会根据唯一索引进行查询,其他普通列不做匹配(主键也是做匹配的)

可以通过下条验证

3、唯一索引branch_no不同

INSERT INTO t_bank_organ_copy1 ( organ_no, branch_no, branch_name, created_by )
VALUES
	( 1, '4', '江苏分行', '3' ) 
	ON DUPLICATE KEY UPDATE
	branch_name = '海南分行';

除了唯一索引branch_no不同,其他列都相同

执行后数据库增加一条 

4、修改的值包括了唯一索引值branch_no

下面对唯一索引进行修改尝试

INSERT INTO t_bank_organ_copy1 ( organ_no, branch_no, branch_name, created_by )
VALUES
	( 1, '4', '江苏分行', '3' ) 
	ON DUPLICATE KEY UPDATE
	branch_name = '海南分行',
	branch_no = '8';

修改branch_no 4为8,并修改branch_name为海南分行

可以看出对唯一索引和普通列都做了修改

总结:

1、mysql的存在就更新不存在就插入可由on duplicate key update语法实现;

2、不过只会检查添加列中有没有匹配到主键id和唯一索引的重复项;

3、如果有重复项会在on duplicate key update后进行修改指定的字段和内容;

4、所涉及的唯一索引也是可以修改的;

最后也可这样写:

原数据库表

INSERT INTO t_bank_organ_copy1 ( organ_no, branch_no, branch_name, created_by )
VALUES
	( 1, '8', '河南分行', '3' ) 
	ON DUPLICATE KEY UPDATE
	branch_name = values(branch_name);

 修改成了河南分行

到此这篇关于MySQL中on duplicate key update使用方法的文章就介绍到这了,更多相关MySQL on duplicate key update使用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • CentOS7环境下MySQL8常用命令小结

    CentOS7环境下MySQL8常用命令小结

    在进行MySQL的优化之前必须要了解的就是MySQL的查询过程,下面这篇文章主要给大家介绍了关于CentOS7环境下MySQL8常用命令的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-06-06
  • MySQL存储过程图文实例讲解

    MySQL存储过程图文实例讲解

    虽然MySQL的存储过程一般情况下是不会使用到的,但是在一些特殊场景中,还是有需求的,下面这篇文章主要给大家介绍了关于MySQL存储过程的相关资料,需要的朋友可以参考下
    2022-03-03
  • MySQL 添加、修改、删除表的列及约束等表的定义

    MySQL 添加、修改、删除表的列及约束等表的定义

    这篇文章主要介绍了MySQL 添加、修改、删除表的列及约束等表的定义,需要的朋友可以参考下
    2014-03-03
  • mysql踩坑之limit与sum函数混合使用问题详解

    mysql踩坑之limit与sum函数混合使用问题详解

    这篇文章主要给大家介绍了关于mysql踩坑之limit与sum函数混合使用问题的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用mysql具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-06-06
  • 低版本Druid连接池+MySQL驱动8.0导致线程阻塞、性能受限

    低版本Druid连接池+MySQL驱动8.0导致线程阻塞、性能受限

    应用升级MySQL驱动8.0后,在并发量较高时,查看监控打点,Druid连接池拿到连接并执行SQL的时间大部分都超过200ms,本文就解决一下这个问题
    2021-07-07
  • mysql存储过程详解

    mysql存储过程详解

    我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用执行它
    2012-07-07
  • MySQL之InnoDB下的锁问题

    MySQL之InnoDB下的锁问题

    这篇文章主要介绍了MySQL之InnoDB下的锁问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-08-08
  • mysql如何查询重复数据并删除

    mysql如何查询重复数据并删除

    这篇文章主要介绍了mysql如何查询重复数据并删除问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12
  • 当mysqlbinlog版本与mysql不一致时可能导致出哪些问题

    当mysqlbinlog版本与mysql不一致时可能导致出哪些问题

    这篇文章主要介绍了当mysql服务器为mysql5.6时,mysqlbinlog版本不对可能导致出哪些问题,下面通过模拟2种场景分析此类问题,需要的朋友可以参考下
    2015-07-07
  • MySQL字段类型全面解读

    MySQL字段类型全面解读

    这篇文章主要介绍了MySQL字段类型,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-10-10

最新评论