mysql先查询后插入方案

日常,理想的情况下,应该是数据库设计的时候都会增加唯一索引,或者联合索引来保证数据的唯一性;

但是在一些特殊情况下,前期的设计缺陷,就会留下很多技术债,导致后期难以维护;

最近遇到数据重复问题,表里面没有添加唯一索引控制数据的唯一性,在并发的情况下,导致数据可重复插入;

数据库内的数据有小部分数据已经是重复了的,现在是添加不了唯一索引了,只能在每天数据插入的时候先查询然后再插入;

mysql 关键字 dual 虚拟表:

dual: mysql文档中对于dual表的解释:

You are allowed to specify DUAL as a dummy table name in situations where no tables are referenced:

mysql> SELECT 1 + 1 FROM DUAL;

        -> 2

DUAL is purely for the convenience of people who require that all SELECT statements should have FROM and possibly other clauses. MySQL may ignore the clauses. MySQL does not require FROM DUAL if no tables are referenced.

mysql实现:

INSERT INTO `table` (value1, value2)

SELECT 'stuff for value1', 'stuff for value2' FROM `table`

WHERE NOT EXISTS (SELECT * FROM `table`

      WHERE value1='stuff for value1' AND value2='stuff for value2';

列子:

INSERT INTO `table` (value1, value2)

SELECT 'a', 123 FROM dual

WHERE NOT EXISTS (SELECT * FROM `table`

      WHERE value1='a' AND value2='123';

如果数据库已添加唯一索引:也可以使用ignore, Replace, ON DUPLICATE KEY UPDATE,存在则更新,不存在则插入

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 观其大纲 page 01 基础知识 1 MySQL数据库概要 2 简单MySQL环境 3 数据的存储和获取 4 M...
    周少言阅读 3,171评论 0 33
  • SQL SELECT 语句 一、查询SQL SELECT 语法 (1)SELECT 列名称 FROM 表名称 (2...
    有钱且幸福阅读 5,578评论 0 33
  • 什么是数据库? 数据库是存储数据的集合的单独的应用程序。每个数据库具有一个或多个不同的API,用于创建,访问,管理...
    chen_000阅读 4,053评论 0 19
  • 2018年3月7日 星期三 阴 林松每日一练第十二篇 赵来请来了,函梅蓉凤四朵金花又走了。 在你们身上老师倾注...
    潘林松阅读 187评论 1 1
  • 耳边响起熟悉的音乐,喝着红枣水,一步一步的在家里按着手机,感受着夏天要来的节奏,有点热,有点闷,有点难受! 夏天来...
    奇喻9在17阅读 219评论 0 0