mysql如何使用on DUPLICATE key有更新没有就插入
本帖最后由 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 keyUPDATEwork=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 keyUPDATEwork=values(`work`), username=values(`username`), bigname=values(`bigname`), type=values(`type`);
``` 感谢分享!第一次知道MySQL还提供了这个功能,不过这样索引建立的太多进行插入数据对性能是有很大影响吧,之前也有遇到类似的需求,不过当时是使用代码来实现的 Naive2021 发表于 2021-8-23 20:40
感谢分享!第一次知道MySQL还提供了这个功能,不过这样索引建立的太多进行插入数据对性能是有很大影响吧, ...
小数据感觉行,大数据估计凉。大数据是不是还得先查询再更新2步走? Naive2021 发表于 2021-8-23 20:40
感谢分享!第一次知道MySQL还提供了这个功能,不过这样索引建立的太多进行插入数据对性能是有很大影响吧, ...
实际上的最好是 一个索引 或者一个主键(不自增) 可以这样用的。
页:
[1]