一、背景

在使用MySQL进行插入的时候,遇到了一个场景:当插入的数据不再数据库中的时候就插入,否则就跳过。

二、方法

我们可以使用下面的SQL语句进行处理,处理语句如下。在这个里面有几个重要的地方,DUAL和insert的操作。

标准:

INSERT INTO table(primarykey, field1, field2, ...)SELECT key, value1, value2, ...FROMdualWHERE not exists (select * from table where primarykey = id);

例子:

INSERT INTO mygame (userId,gameId) SELECT 1,2 from DUAL WHERE not EXISTS (SELECT * FROM mygame WHERE userId=6 and gameId=1)

从上述SQL的例子中讲述每一部分的内容及含义:

2.1 首先是下面的部分

(SELECT * FROM mygame WHERE userId=6 and gameId=1)

这部分的含义是从mygame中获取用户id为6同时游戏id为1的数据,这里的查询语句作用就是看有没有这个数据,因此是否查询所有属性不重要,可以直接设置为1,如下面的格式:

SELECT 1 FROM mygame WHERE userId=6 and gameId=1)

2.2 然后是DUAL查询的部分

SELECT 1,2 from DUAL WHERE not EXISTS (SELECT 1 FROM mygame WHERE userId=6 and gameId=1)

这一部分我们使用了一个not exists的关键查询,意思是不存在则选择出数据,如果存在选择就是空,这里有一个很重要部分就是DUAL表的查询,这是一个虚空表,select的表头和值都是一样的。如我执行下面的SQL语句:

SELECT 1,9,0 from DUAL

结果

note:如果使用*号查询会使得数据结果错误,所以这就是为什么说他是虚拟表的原因。

2.3 最后是insert部分

INSERT INTO mygame (userId,gameId) SELECT 1,2 from DUAL WHERE not EXISTS (SELECT * FROM mygame WHERE userId=6 and gameId=1)

我们将从虚空表中的数据获取出来并插入到mygame中,插入的数据就是虚空表的数据,也就是我们设置的1,2的值,与正常的插入一样,如果字段不完全,需要具体字段,如果完全可以省略插入的字段,但是要按照顺序,如下面的情况:

INSERT INTO mygame SELECT 1,9,0 from DUAL WHERE not EXISTS (SELECT 1 FROM mygame WHERE userId=6 and gameId=1)

如果不完全就会出现下面的错误

三、总结

这种很有效的插入方法已经介绍完了,在使用的时候需要注意,DUAL表的字段查询会输出你设计的字段,从DUAL表中选取的数据就是你要插入的字段,否则就会一直添加。

直到修改为6,12为止,才会结束

四、参考

dual表介绍:

官方介绍:

其他方法:

mysql 已存在数据_MySQL跳过已存在的数据相关推荐

  1. mysql 处理数据_MySQL数据库,如何处理重复的数据?

    前言 这是一个基本问题,这篇文章是我很早之前遇到的一种情况,后来在学习视频的时候又遇到了一次,因此给出一个总结.其实解决能否插入重复数据的问题,一般情况下是有两个思路,就像治水一样,第一个就是从源头, ...

  2. mysql 创建重复数据库_MySQL数据库,如何处理重复的数据?

    前言 这是一个基本问题,这篇文章是我很早之前遇到的一种情况,后来在学习视频的时候又遇到了一次,因此给出一个总结.其实解决能否插入重复数据的问题,一般情况下是有两个思路,就像治水一样,第一个就是从源头, ...

  3. mysql 后10条_Mysql 保留最新的10条数据

    Mysql每天执行计划,保留最新的10条数据,其余的删除 1.Mysql 保留最新的10条数据 sql语句: DELETE tb FROM tbname AS tb,( SELECT id FROM ...

  4. mysql 避免重复添加_MySql三种避免重复插入数据的方法

    前言 MySql 在存在主键冲突或唯一键冲突的情况下,根据插入方式,一般有以下三种插入方式避免错误. insert ignore. replace into insert on duplicate k ...

  5. mysql 表 页 行_Mysql之InnoDB行格式、数据页结构

    Mysql架构图 存储引擎负责对表中的数据的进行读取和写入,常用的存储引擎有InnoDB.MyISAM.Memory等,不同的存储引擎有自己的特性,数据在不同存储引擎中存放的格式也是不同的,比如Mem ...

  6. mysql批量导入txt数据_MySQL批量导入Excel、txt数据

    我想Excel是当今最大众化的批量数据管理软件了吧,所以我们会经常涉及到将Excel中数据导入到MySQL中的工作.网上有一些关于直接将Excel导入MySQL的教程,不知道是我安装的office不对 ...

  7. mysql数据库实验任务二_MySQL数据库实验:任务二 表数据的插入、修改及删除

    任务二 表数据的插入.修改及删除 @[toc] 班级 姓名 软件工程16-9班 洪燕妮 [实训目的与要求] 1.利用MySQL命令行窗口进行增.删.改数据操作: 2.利用界面工具进行增.删.改数据操作 ...

  8. mysql 条件查询 导出数据_mysql按查询条件导出指定数据方法

    本文章介绍了用mysql into outfile命令来导入指定表中指定数据的方法. 按条件导出mysql表的数据: 代码如下 theyestoday=`date -d "-1 day&qu ...

  9. mysql 唯一索引出现重复数据_mysql使用唯一索引避免插入重复数据

    使用MySQL 索引防止一个表中的一列或者多列产生重复值 一:介绍MYSQL唯一索引 如果要强烈使一列或多列具有唯一性,通常使用PRIMARY KEY约束. 但是,每个表只能有一个主键. 因此,如果使 ...

最新文章

  1. 我开发共享软件的三次经历(中):我赚到了十万块
  2. 一个c/c++分布式框架ZMQ或者ZeroMQ, 介绍和win下安装使用方法
  3. python之路6-迭代器、生成器、装饰器
  4. iOS 7 标签栏控制器进行模态视图跳转后变成透明
  5. 使用pycharm运行调试scrapy
  6. 质量故事(2)---降落伞的真实故事
  7. python高级编程 豆瓣_《Python高级编程》读书笔记:方法解释顺序浅析
  8. 人脸识别的Python库
  9. mysql中的leading用法_MySQL 函数笔记
  10. 升级qq群一直显示服务器失败怎么回事啊,QQ群创建失败是怎么回事,QQ群创建失败原因是什么...
  11. 大连理工大学电路计算机,大连理工大学电路计算机辅助分析实验报告.pdf
  12. #微积分#正项级数收敛性判别方法
  13. python等值线如何设置高度的范围和间隔_matlab 等值线间距问题
  14. mysql execute stmt_25.2.7.10. mysql_stmt_execute()
  15. 面对Google流量红利期,独立站卖家如何借势营销?
  16. 某图书管理系统的类图
  17. 穹顶之下-善恶是非谁来负责
  18. 某课的flask视频 速取
  19. 2018年第九届蓝桥杯省赛C/C++ A组(蒻鸡自己写的,看不上勿喷,自己的一点想法)
  20. xshell6无法卸载、重新安装【1628: 完成基于脚本的安装失败】

热门文章

  1. svn 命令行查看history及比较不同版本
  2. RabbitMQ报错NOT_ALLOWED - access to vhost ‘/‘ refused for user ‘zq‘(10, 40)
  3. Linux之ubuntu的网卡配置
  4. PHP的uniqid
  5. html5哪个输入字段必填,HTML5:如何使用“required”属性和“radio”输入字段
  6. 面试前需要准备的五个步骤
  7. php 本地mysql 代码_基于本地数据库的 IP 地址查询 PHP 源码
  8. es 创建索引报错_ES添加映射报错analyzer [ik_max_word] not found for field [title]
  9. 记一次JavaNIO重复读消费
  10. 离线缓存占内存吗_彻底弄懂浏览器缓存策略