ON DUPLICATE KEY UPDATE

简介: ON DUPLICATE KEY UPDATE

问题引出


案例:某个餐桌(id)花了多少钱(num)


1.png


如果4号餐桌点了一份西红柿4元,我们可以插入;如果3号餐桌点了一份西红柿4元,我们可以修改

你选择insert或者update的原因是你知道他原来有没有数据

如果你不知道呢???

一般我们的逻辑为

先查询,如果没有,插入;反之修改


if not exists (select )
      insert 
else
      update 


最简单直观的问题;发送两条SQL语句吧,性能问题


解决方法


有则改之无则加勉,数据库中同样也有相似的问题,有就修改,没有就插入

ON DUPLICATE KEY UPDATE 就是解决,如果有数据就修改,如果没有数据就插入的问题

第一次执行(数据库中没有id 为4的数据)


INSERT INTO hello (id,num) VALUES (4,4) ON DUPLICATE KEY UPDATE id = 4 ,num = 4+num;


1.png


第二次执行(数据库中有id为4的数据)


INSERT INTO hello (id,num) VALUES (4,4) ON DUPLICATE KEY UPDATE id = 4 ,num = 4+num;


Query OK, 2 rows affected


1.png

目录
相关文章
|
关系型数据库 MySQL
Mysql 主键冲突(ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY')
Mysql 主键冲突(ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY')
1164 0
|
6月前
|
数据库 Python
Duplicate entry for key username
Duplicate entry for key username
70 0
|
11月前
|
SQL 关系型数据库 MySQL
INSERT ... ON DUPLICATE KEY UPDATE Statement
INSERT ... ON DUPLICATE KEY UPDATE Statement
78 0
|
关系型数据库 MySQL 数据库
解决出现的SQLIntegrityConstraintViolationExceptionw:Duplicate entry ‘10‘ for for key ‘user.PRIMARY‘问题
解决出现的SQLIntegrityConstraintViolationExceptionw:Duplicate entry ‘10‘ for for key ‘user.PRIMARY‘问题
207 0
|
数据可视化 关系型数据库 MySQL
MySql命令报错:Duplicate entry ‘10‘ for key ‘PRIMARY‘解决方案
MySql命令报错:Duplicate entry ‘10‘ for key ‘PRIMARY‘解决方案
548 0
|
关系型数据库 MySQL 索引
不会2023年你还不知道Mysql中index、primary key、unique key、foreign key是什么和如何创建吧?
不会2023年你还不知道Mysql中index、primary key、unique key、foreign key是什么和如何创建吧?
95 0
|
存储 关系型数据库 MySQL
ERROR 1215 (HY000): Cannot add foreign key constraint
ERROR 1215 (HY000): Cannot add foreign key constraint
ERROR 1215 (HY000): Cannot add foreign key constraint
|
SQL 关系型数据库 MySQL
MySQL - key、primary key、unique key、index 区别(二)
MySQL - key、primary key、unique key、index 区别(二)
1079 0
|
存储 Oracle 关系型数据库
MySQL - key、primary key、unique key、index 区别(一)
MySQL - key、primary key、unique key、index 区别(一)
410 0
MySQL - key、primary key、unique key、index 区别(一)
|
关系型数据库 MySQL
MySQL - Duplicate entry for key PRIMARY
MySQL - Duplicate entry for key PRIMARY
319 0