吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1019|回复: 3
收起左侧

[已解决] mysql如何使用on DUPLICATE key有更新没有就插入

[复制链接]
as614001 发表于 2021-8-23 18:27
本帖最后由 as614001 于 2021-8-23 18:46 编辑

这样的一个表

      
CREATE TABLE 't_user' (
`Id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(18) NOT NULL ,
`bigname` varchar(18) NOT NULL ,
`type` varchar(18) NOT NULL unique,
`work` TEXT NOT NULL,
PRIMARY KEY (`Id`)
) ENGINE=InnoDB AUTO_INCREMENT=1018 DEFAULT CHARSET=gbk;


目前使用的sql语句,没达到想的效果:
`
INSERT into t_user(username,bigname,type,work)values('admin12334','a','eclp','1234') 
on DUPLICATE key  UPDATE  work=values(`work`);


想达到的效果是,根据 username bigname type 三个字段做一个一致有就更新,一致没就插入、
如 当前已经有这个数据
'admin12334','a','eclp','1234'
如果插入数据  'admin12334','a','eclp','456789'  那么就更新了这行。
如果插入数据  'admin12334','a','eclp2','1234'  那么就插入一行。
如果插入数据  'admin12334','a1','eclp','1234'  那么就插入一行。
如果插入数据  'admin12336','a','eclp','1234'  那么就插入一行。
如果插入数据  '1admin12334','a1','eclp22','12343'  那么就插入一行。


解决方法
username bigname type 都做唯一索引。
`
INSERT into t_user(username,bigname,type,work)values('admin12334','a','eclp','1234') 
on DUPLICATE key  UPDATE  work=values(`work`), username=values(`username`), bigname=values(`bigname`), type=values(`type`);

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
Naive2021 + 1 + 1 谢谢@Thanks!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

Naive2021 发表于 2021-8-23 20:40
感谢分享!第一次知道MySQL还提供了这个功能,不过这样索引建立的太多进行插入数据对性能是有很大影响吧,之前也有遇到类似的需求,不过当时是使用代码来实现的
 楼主| as614001 发表于 2021-8-24 10:09
Naive2021 发表于 2021-8-23 20:40
感谢分享!第一次知道MySQL还提供了这个功能,不过这样索引建立的太多进行插入数据对性能是有很大影响吧, ...

小数据感觉行,大数据估计凉。大数据是不是还得先查询再更新2步走?
 楼主| as614001 发表于 2021-8-24 10:10
Naive2021 发表于 2021-8-23 20:40
感谢分享!第一次知道MySQL还提供了这个功能,不过这样索引建立的太多进行插入数据对性能是有很大影响吧, ...

实际上的最好是 一个索引 或者一个主键(不自增) 可以这样用的。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 23:41

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表