• 一条mysql语句判断是添加还是修改


    一般正常的情况下都会遇到这种需求

    有一些数据信息,我们每次发生请求的时候,要判断此条数据是否存在,如果存在则进行修改操作,反则进行插入操作,一般人都会这样写

     if($name1==$name2){

     $sql="update table set a1='a1'";

    }else{

     $sql="insert into table(a1) values('a1')";

    }

    现在刚发现mysql有个自带的函数,可以一句sql就代替上面的代码 ,php判断都不用写了,这个方法就是

    ON DUPLICATE KEY UPDATE

    用法如下

       $sql="insert into cinema(movieName,releaseInfo,sumBoxInfo,boxInfo,boxRate,showInfo,showRate,avgShowView,avgSeatView) values
    ('$movieName','$releaseInfo','$sumBoxInfo','$boxInfo','$boxRate','$showInfo','$showRate','$avgShowView','$avgSeatView') ON DUPLICATE KEY UPDATE 
    movieName='$movieName',releaseInfo='$releaseInfo',sumBoxInfo='$sumBoxInfo',boxInfo='$boxInfo',
    boxRate='$showInfo',showInfo='$showInfo',showRate='$showRate',avgShowView='$avgShowView',avgSeatView='$avgSeatView'";

    用的时候 注意一下,最好保持有一个主键,到时候程序会根据你的这个主键 是否相同,去判断这条数据是否存在,比如说 movieName是主键,则sql判断的时候会去找 movieName在表中是否有相同的,如果有 则进行修改,没有则进行插入操作。

    有的人 会问,如果有多个索引 怎么办呢,这个我还没测试呢,从网上找了一段解释,你们看下

    若多个索引都冲突,则只有一条记录被修改。
     
     
    create table test(
    id int not null primary key,
    num int not null UNIQUE key,
    tid int not null
    )
    为了测试两个唯一索引都冲突的情况,然后插入下面的数据


    insert into test values(1,1,1), (2,2,2);
    然后执行:


    insert into test values(1,2,3) on duplicate key update tid = tid + 1;
    因为a和b都是唯一索引,插入的数据在两条记录上产生了冲突,然而执行后只有第一条记录被修改
  • 相关阅读:
    vscode 鸿蒙开发板hi3861 hispark需要使用Jlink V10以上版本仿真器,才支持RISC-V,在线调试
    hi3861 hispark GDB openOCD 调试器仿真器在vscode中如何使用呢?
    ArduinoUNO R3接口定义
    OpenOCD-HI3861-RISCV使用方法 (JTAG/DTM+SWD/CoreSight)调试器仿真器
    c#字符串序列化-字符串转对象转字符串
    c#winform设置字体字号大小
    SAP MM——常用表
    C++ WIN32 日志程序
    C++ WIN32 程序 ,从屏幕输入 数据 然后给WCHAR 数组赋值
    Ubuntu 16.04开启SFTP服务
  • 原文地址:https://www.cnblogs.com/HoverM/p/9259320.html
Copyright © 2020-2023  润新知