一 测试表的创建

 -- ----------------------------
-- Table structure for User
-- ----------------------------
DROP TABLE IF EXISTS `User`;
CREATE TABLE `User` (
`uid` int() NOT NULL,
`name` varchar() DEFAULT NULL,
`sex` varchar() DEFAULT NULL,
`age` int() DEFAULT NULL,
PRIMARY KEY (`uid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

二   实现方法

INSERT INTO test.`User`(uid,name,sex,age)  VALUES(1,"xiaowang2","male",22)

ON DUPLICATE KEY UPDATE name=VALUES(name),sex=VALUES(sex),age=VALUES(age)

三  介绍&分析

如果在INSERT语句末尾指定了ON DUPLICATE KEY UPDATE,并且插入行后会导致在一个UNIQUE索引或PRIMARY KEY中出现重复值,则执行旧行UPDATE;如果不会导致唯一值列重复的问题,则插入新行。

注意:ON DUPLICATE KEY UPDATE只是MySQL的特有语法,并不是SQL标准语法!

更详细的参考请看 http://www.111cn.net/database/mysql/53979.htm

总结如下:

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

SQL语句insert into 不存在则插入,存在则修改的更多相关文章

  1. 如何优化用SQL语句INSERT INTO … SELECT插入数据时锁全表的问题

    1.binlog format 启用Row Based Replication(行复制)模式: SET GLOBAL binlog_format = 'ROW'; 如果你想永久的启用这个模式,请修改m ...

  2. C#的自动拼接Sql语句Insert方法及思路

    思路: 1.想想插入语句,大概是这样的一个框架:INSERT INTO 表名 (数据库列名) values (值) 2.这里要3个变量是不固定的,分别是:表名.数据库列名.值: a.表名我们这里很容易 ...

  3. sql语句insert into where 错误解析

    sql语句中,insert into 代表得是插入一条新得数据,全新得数据,所以你这样得写法是错误得,比如: "insert into klkl_Service_shop(name_real ...

  4. 执行SQL语句---INSERT/UPDATE/DELETE

    1.执行SQL语句函数: int mysql_query(MYSQL* mysql, const char * query); query:所有的sql语句 2.例子: 向children表插入一条语 ...

  5. 从sql语句的角度解刨SqlServer插入语句的并发问题

    今天收到一个小学弟的求助,数据库插入偶尔重复,怎么在sql语句上进行解决. Q:学长,我导入excel数据的操作,平时使用好好的,怎么突然发生插入重复的问题? A:你是使用哪个ORM框架进行操作的? ...

  6. SQL语句-INSERT语句

    Insert语句 Insert语句三种写法: mysql> desc students; +-------+-------------+------+-----+---------+------ ...

  7. SQL Server下ADO.NET 怎么获取数据库SQL语句INSERT,UPDATE,DELETE了多少行数据

    ADO.NET 在发送SQL语句到SQL Server数据库后,怎么知道真正INSERT,UPDATE,DELETE了多少行数据呢? 使用SQL Server内置的全局变量@@ROWCOUNT即可,@ ...

  8. Delphi X10.2 + FireDAC 使用 SQL 语句 INSERT

    // CREATE TABLE [tabusers]( // [id] INTEGER PRIMARY KEY AUTOINCREMENT, // [username] CHAR NOT NULL, ...

  9. SQL语句 insert into 语句的写法

    方式1: INSERT INTO t1(field1,field2) VALUE('001','002'); 最好的做法明确插入的每一列,列于查错,而且漏列的几率会降低! 方式2: INSERT IN ...

随机推荐

  1. screen command of linux

    [screen command of linux] 常用键:   补充: Ctrl-a S  # split terminal horizon Ctrl-a TAB   # switch to ano ...

  2. nodejs中yield的用法?

    nodejs中yield的用法? https://www.zhihu.com/question/32752866?sort=created

  3. java动态规划问题

    这里是简单的动态规划问题.其实,如果我们学过数据结构,应该就接触过动态规划问题,当时一直没有反应过来.我们求最小生成树用的是贪婪算法.而求最短路径就是动态规划.从一个点出发,到另外每个点的最短距离.在 ...

  4. cannot launch node of type [arbotix_python/arbotix_driver]: arbotix_python

    这个时候提示错误: ERROR: cannot launch node of type [arbotix_python/arbotix_driver]: arbotix_python ROS path ...

  5. [SoapUI] 在Test Step 下加Script Assertion,用 messageExchange 获取当前步骤的response content

    //Get response content of the current request def response = messageExchange.getResponseContent() // ...

  6. Spring思维导图(AOP篇)

    什么是aop AOP(Aspect-OrientedProgramming,面向方面编程),可以说是OOP(Object-Oriented Programing,面向对象编程)的补充和完善.OOP允许 ...

  7. 单例模式、双检测锁定DCL、volatile(转)

    单例模式最要关心的则是对象创建的次数以及何时被创建. Singleton模式可以是很简单的,它的全部只需要一个类就可以完成(看看这章可怜的UML图).但是如果在“对象创建的次数以及何时被创 建”这两点 ...

  8. OpenCV源码解析

    OpenCV K-means源码解析 OpenCV 图片读取源码解析 OpenCV 视频播放源码解析 OpenCV 追踪算法源码解析 OpenCV SIFT算法源码解析 OpenCV 滤波源码分析:b ...

  9. [QPlugins]概述

    一个需求:显示一个窗体,并显示"Hello,World".(这个例子不一定合适) 用DELPHI 实现上面的需求非常的简单,用向导创建一个项目,同时也创建好了一个窗体,再拖一个La ...

  10. sql 计算地球2个坐标之间的距离

    show variables like '%func%'; set global log_bin_trust_function_creators=1; use scm_wuliudelimiter $ ...