zoukankan      html  css  js  c++  java
  • MYSQL中replace into的用法

    做项目时遇到这样一个问题,把查询出的数据插入到一个新表里面,第一次可以直接插入,但是第二次第三次的时候如果直接更新,但是会有些新的数据需要添加,但是如果先删除再插入的话效率不高,如果对比两端的数据,相同的更新,没有的插入,这样效率也不高,就是有些数据是更新,有些数据是新增,在网上找了找,mysql有一个 replace into 可以实现,有新数据就自己新增,旧数据就直接更新,其实就是先删除数据,再新增

    新建一个test表,三个字段,id,title,uid, id是自增的主键,uid是唯一索引;

    插入两条数据

    insert into  test(title,uid) VALUES ('123465','1001');
    insert into  test(title,uid) VALUES ('123465','1002');
    
    执行单条插入数据可以看到,执行结果如下:
    [SQL]insert into  test(title,uid) VALUES ('123465','1001');
    受影响的行: 1
    时间: 0.175s
    

    使用 replace into插入数据时:

    REPLACE INTO test(title,uid) VALUES ('1234657','1003');
    
    执行结果:
    [SQL]REPLACE INTO test(title,uid) VALUES ('1234657','1003');
    受影响的行: 1
    时间: 0.035s
    

    当前数据库test表所有数据如下:

    当uid存在时,使用replace into 语句

    REPLACE INTO test(title,uid) VALUES ('1234657','1001');
    
    [SQL]REPLACE INTO test(title,uid) VALUES ('1234657','1001');
    受影响的行: 2
    时间: 0.140s
    

    image-20200728095312193

    replace into t(id, update_time) values(1, now());

    replace into t(id, update_time) select 1, now();

    replace into 跟 insert 功能类似,不同点在于:replace into 首先尝试插入数据到表中,1. 如果发现表中已经有此行数据(根据主键或者唯一索引判断)则先删除此行数据,然后插入新的数据。 2. 否则,直接插入新数据。

    要注意的是:插入数据的表必须有主键或者是唯一索引!否则的话,replace into 会直接插入数据,这将导致表中出现重复的数据。

    MySQL replace into 有三种形式:

    1. replace into tbl_name(col_name, …) values(…)
    2. replace into tbl_name(col_name, …) select …
    3. replace into tbl_name set col_name = value, …

    第一种形式类似于 insert into 的用法,

    第二种 replace select 的用法也类似于 insert select,这种用法并不一定要求列名匹配,事实上,MYSQL甚至不关心select返回的列名,它需要的是列的位置。例如,replace into tb1( name, title, mood) select rname, rtitle, rmood from tb2; 这个例子使用 replace into 从 tb2 中将所有数据导入 tb1 中。

    第三种 replace set 用法类似于 update set 用法,使用一个例如“SET col_name = col_name + 1”的赋值,则对位于右侧的列名称的引用会被作为DEFAULT(col_name)处理。因此,该赋值相当于SET col_name = DEFAULT(col_name) + 1。

    前两种形式用的多些。其中 “into” 关键字可以省略,不过最好加上 “into”,这样意思更加直观。另外,对于那些没有给予值的列,MySQL 将自动为这些列赋上默认值。


    作者:不敲代码的攻城狮
    出处:https://www.cnblogs.com/leigq/
    任何傻瓜都能写出计算机可以理解的代码。好的程序员能写出人能读懂的代码。

     
  • 相关阅读:
    链表--判断一个链表是否为回文结构
    矩阵--“之”字形打印矩阵
    二叉树——平衡二叉树,二叉搜索树,完全二叉树
    链表--反转单向和双向链表
    codeforces 490C. Hacking Cypher 解题报告
    codeforces 490B.Queue 解题报告
    BestCoder19 1001.Alexandra and Prime Numbers(hdu 5108) 解题报告
    codeforces 488A. Giga Tower 解题报告
    codeforces 489C.Given Length and Sum of Digits... 解题报告
    codeforces 489B. BerSU Ball 解题报告
  • 原文地址:https://www.cnblogs.com/leigq/p/13406497.html
Copyright © 2011-2022 走看看