首页 > 数据库 >mysql 数据不存在则插入,存在则更新

mysql 数据不存在则插入,存在则更新

时间:2023-03-15 23:33:37浏览次数:35  
标签:存在 auth 插入 state user KEY mysql type id

mysql 数据不存在则插入,存在则更新,可以用 INSERT ON DUPLICATE KEY UPDATE实现。

INSERT ON DUPLICATE KEY UPDATE 不可以和WHERE一起使用,
使用INSERT ON DUPLICATE KEY UPDATE ,需要先创建唯一索引。
当数据表中,不存在唯一索引的字段与要插入数据相同的值时,就会插入INSERT INTO的数据,否则就更新 ON DUPLICATE KEY UPDATE 后面的语句。

(1) -- 创建唯一索引
格式:

ALTER TABLE 表名 ADD  UNIQUE KEY `uk_唯一索引名` (`字段名`,`字段名`,`字段名`);

示例:

ALTER TABLE t_person ADD  UNIQUE KEY `uk_user_id_type` (`user_id`,`type`);

t_person 是表名,uk_user_id_type 是唯一索引,由user_id,type 构成。

注意,创建唯一索引时,要确保数据表中没有重复的值。比如创建唯一索引(A,B),如果数据表中存在多条相同的A和B,就需要先把重复的数据清理掉,再创建唯一索引。

如果数据表里面已经有主键id了,也可以直接把这个主键id当唯一索引用。表示主键id不存在就插入对应的数据,存在就更新。

(2) -- 不存在则插入,存在则更新

INSERT INTO t_person (name, user_id, type, auth_state, update_date) 
VALUES('lin',12345 , 123 , 1, now()) 
ON DUPLICATE KEY UPDATE auth_state = VALUES(`auth_state`)

由于 t_person 创建了唯一索引 uk_user_id_type (user_id,type),
上面这段sql表示,如果数据表中不存在数据(user_id,type)值为 (12345 , 123)时,就会插入。
如果存在,就会执行 ON DUPLICATE KEY UPDATE 后面的语句。也就是将此条数据的auth_state 更新为 auth_state=1。

对应的mybatis代码如下:

  <insert id="batchInsertOnDuplicate" parameterType="com.domain.test.Person" >
    insert into t_person  (name, user_id, type, auth_state, update_date)
    values
    <foreach collection="list" separator="," item="item" >
    (#{item.name,jdbcType=VARCHAR},
      #{item.userId,jdbcType=INT}, 
      #{item.type,jdbcType=INT}, 
      #{item.authState,jdbcType=INT}, 
      #{item.updateDate,jdbcType=DATE}
      )
    </foreach>
    ON DUPLICATE KEY UPDATE `auth_state` = VALUES(`auth_state`)
  </insert>

标签:存在,auth,插入,state,user,KEY,mysql,type,id
From: https://www.cnblogs.com/expiator/p/17220668.html

相关文章

  • 针对有验证码后台的穷举 不存在cookie不验证
    思路:第一次提交提示登录失败,第二次继续提交提示验证码错误。发现了如果一次次的提交密码,验证码也会随之生成新的。和服务器中的session文件做匹配判断的正是PHPSESSID参......
  • 连接一个不存在的 IP 地址
    第一个情况:目标IP地址和客户端的IP地址是同一个局域网(网络号相同)。第一种情况,客户端无法发出SYN报文,主要卡在数据链路层。因为目标地址不存在IP地址,客户端的内......
  • MySQL数据库30条规范解读
    军规适用场景:并发量大、数据量大的互联网业务军规:介绍内容解读:讲解原因,解读比军规更重要 一、基础规范(1)必须使用InnoDB存储引擎解读:支持事务、行级锁、并发性能更好、CPU及......
  • mysql面试题
    1.binlog的3种格式,类型对比  statement,row,mixed   setsessionbinlog_format='statement';  showvariableslike'binlog_format'; showmasterstatus;......
  • ABAP:VF02过账增强,向BSEG表中插入或修改科目数据
    SMOD:SDVFX008   *&---------------------------------------------------------------------**&IncludeZXVVFU08*&---------------------------......
  • MySQL部署后配置
    默认情况下,mysql是运行在127.0.0.1上,此时是无法远程被访问的root@JumpServer-DB-P01:/opt#netstat-tunlp|grep3306tcp00127.0.0.1:330600.0.......
  • Mysql_base
    基础:sql语句表结构设计调优:索引、慢查询优化配置参数调优核心原理:InnoDb存储引擎(包括隔离级别、事务、锁、缓存池、回滚日志等等)Mysqld(包括连接管理、进程......
  • 排序算法 之 (直接插入排序)
    10.6、堆排序对于n个关键字序列L[1...n],满足下面某一条性质,则称为堆(Heap)若满足:\(L(2i)\leL(i)\)且\(L(2i+1)\leL(i)\),\(1\lei\len\),大根堆(大顶堆)若满足:\(L(......
  • MYSQL数据库操作语句
    数据库操作登录mysql-uroot-p退出quit/exit显示数据库版本showversion();查看当前使用的数据库selectdatabase();查看所有数据库showdatabases;创建......
  • MySQL学习(四)---->InnoDB数据页结构
    页是InnoDB管理存储空间的基本单位,一个页的大小一般是16KB。InnoDB为了不同的目的而设计了许多种不同类型的页,比如存放表空间头部信息的页,存放InsertBuffer信息的页,......