首页 > mysql中在表中insert数据时,有重复主键id时,变成update

mysql中在表中insert数据时,有重复主键id时,变成update

MySQL 自4.1版以后开始支持INSERT … ON DUPLICATE KEY UPDATE语法

例如:

 idnamesexage
 1kathymale23
 2Javerfamale32
 3Mikemale19

方法一:

INSERT INTO kk (id, name,sex)  VALUES(1,'kara','ssss') ON DUPLICATE KEY UPDATE id=1;

方法二:

REPLACE INTO kk(id, name,sex) VALUES (12,'','female'),(13,'Emily','femse');

 

总结如下:

  1. 如果表中不存在主键记录,replace和insert .... update都与insert是一样的特点。
  2. 如 果表中存在主键记录,replace相当于执行delete 和 insert两条操作,而insert .... update的相当于执行if exist do update else do insert操作。因此,如果replace填充的字段不全,则会导致未被更新的字段都会修改为默认值,并且如果有自增id的话,自增id会变化为最新的 值(这样如果是以自增id为标志的话可能导致记录丢失);而insert*update只是更新部分字段,对于未被更新的字段不会变化(不会强制修改为默 认值)。

     多条记录操作:

     insert
into t(a,b,c) values ('a1','b1','c1'),('a2','b2','c2')

   on duplicate key update t
.c=values(t.c)

 

 

转载于:https://www.cnblogs.com/share123/p/3636016.html

更多相关:

  • 转自:http://blog.csdn.net/tolcf/article/details/39035259   1.在Mybatis Mapper文件中添加属性“useGeneratedKeys”和“keyProperty”,其中keyProperty是Java对象的属性名,而不是表格的字段名。  

  •     先吐为敬!   最近心血来潮研究nodejs如何完成微信支付功能,结果网上一搜索,一大堆“代码拷贝党”、“留一手”、“缺斤少两”、“不说人话”、“自己都没跑通还出来发blog”、“各种缺少依赖包”、“各种注释都没有”、“自己都不知道在写什么”的程序大神纷纷为了增加自己博客一个帖子的名额而发布了各种千奇百�...

  • 阅读ceph源码过程中需要明确当前操作是由哪个线程发出,此时需要根据线程id来确认线程名称 C++获取线程id是通过系统调用来直接获取 函数描述 头文件: 函数名称:syscall(SYS_gettid) 该函数直接返回了一个pid_t int类型的数字,即为当前线程id 此外函数pthread_s...

  • 面试题 分库分表之后,id 主键如何处理? 面试官心理分析 其实这是分库分表之后你必然要面对的一个问题,就是 id 咋生成?因为要是分成多个表之后,每个表都是从 1 开始累加,那肯定不对啊,需要一个全局唯一的 id 来支持。所以这都是你实际生产环境中必须考虑的问题。 面试题剖析 基于数据库的实现方案 数据库自增 id 这个就是说你的...

  • ORM操作    单表、一对多表操作 1 from django.db import models 2 3 4 class UserGroup(models.Model): 5 title = models.CharField(max_length=32) 6 7 8 class UserInfo(m...

  • 建立如下表: 建表语句: class表创建语句 create table class(cid int not null auto_increment primary key, caption varchar(32) not null)engine=innodb default charset=utf8;student表创建语句 c...

  • Term::ProgressBar 模块是一个可以用于生成进度条的 Perl 模块。安装:cpan -i Term::ProgressBar最小脚本,展示如何最快学会使用该模块:#!/usr/bin/env perluse strict; use warnings; use Term::ProgressBar 2.00;my $max...

  • 当我们勾选了同步(Update Project)弹窗的 “Do not show this dialog in the future(以后不显示此对话框)” 的复选框☑   以后再次使用同步功能(Update Project)时 不会再出现这个弹窗(如下图),这就导致了我们无法修改Update Type和Clean workin...

  • mapper.xml文件,后台传入一个对象集合,另外如果是mysql数据库,一点在配置文件上加上&allowMultiQueries=true,这样才可以执行多条sql,以下为mysql:

  • Time类包含了一个重要的类变量deltaTime,它表示距上一次调用Update或FixedUpdate所用的时间。 因此通过它可以让游戏对象按照一个常速进行旋转,而不是依赖于它的帧频: function Update() {    tranform.Rotate(0, 5 * Time.deltaTime, 0); }  同样地移...

  • 批量更新是指在一个事务中更新大批量数据,批量删除是指在一个事务中删除大批量数据。以下程序直接通过Hibernate API批量更新CUSTOMERS表中年龄大于零的所有记录的AGE字段: 如果CUSTOMERS表中有1万条年龄大于零的记录,那么Session的find()方法会一下子加载1万个Customer对象到内存。当执行tx.c...