一条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都是唯一索引,插入的数据在两条记录上产生了冲突,然而执行后只有第一条记录被修改

转载于:https://www.cnblogs.com/HoverM/p/9259320.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值