想要插入一条数据,要避免重复插入,又不想折腾两回数据库连接操作,可以参考如下办法。

  1. INSERT INTO table(column1,column2,column3 ...columnN)
  2. SELECT value1,value2,value3 ...valueN
  3. FROM dual
  4. WHERE NOT EXISTS(
  5. SELECT *
  6. FROM table
  7. WHERE value = ?
  8. );

dual是为了构建查询语句而存在的表,Oracle中很常见,配合INSERT ... SELECT构建成我们需要的表,并指定了数据项. 
EXISTS通过这个判断是否存在的函数,就免去了我们做IF-ELSE的冗繁操作.

例:

  1. INSERT INTO content (
  2. detail,
  3. status,
  4. beginTime,
  5. endTime)
  6. SELECT
  7. @detail,
  8. 1,
  9. NULL,
  10. NULL
  11. FROM DUAL
  12. WHERE NOT EXISTS(
  13. SELECT contentId
  14. FROM content
  15. WHERE detail=@detail);

@detail是要存入的内容,这里对内容进行了检索,如果要这么做,最好对该字段做唯一约束,或加索引。 
省掉了IF-ELSE,在iBatis配置一下就ok了,哈!

还有个更坚决的办法——replace into:

    1. replace into blacklist(userInfoId,uid)
    2. select userInfoId,uid from user_info u where uid in(
    3. 'u303565440','u303566922','u303515112','u303559738');

关于这个可是有个大讨论的。

ACCESS的真假:二、检查记录有无再insert 或 update 比 不管有无直接 delete 再 insert 快吗? 
http://blog.csdn.net/ACMAIN_CHM/archive/2009/05/23/4210633.aspx

Access或其它数据库操作效率问题.欢迎讨论
http://topic.csdn.net/u/20090514/10/a93475bd-e67e-45c8-aa1e-87168ba36d02.html#replyachor

MySQL 语句级避免重复插入—— Insert Select Not Exist的更多相关文章

  1. mysql中如何不重复插入满足某些条件的重复的记录的问题

    最近在项目中遇到了这样的一个问题“: 在mysql数据库中需要每次插入的时候不能插入三个字段都相同的记录.在这里使用到了 insert into if not exists  和insert igno ...

  2. MySql中的有条件插入 insert where

    假设现在我们有这样的需求:当数据库中不存在满足条件的记录时,可以插入一条记录,否则程序退出.该怎么实现? 1年以上工作经验的人应该都能立即想到:去检查一下库里有没有记录,没有就插入,有就结束. int ...

  3. MySQL千万级数据JDBC插入

    案例语句: String sql = "LOAD DATA LOCAL INFILE '" + dataFilepath + "' into table " + ...

  4. Mysql 几种常见的插入 Insert into,Replace Into,Insert ignore

    简要说下三者的区别:insert into 最普遍的插入,如果表中存在主键相同的数据,执行会报错. replace into 如果表中存在主键相同的数据则根据主键修改当前主键的数据,反之则插入(存在就 ...

  5. MySql【Insert Select Not Exist】判断记录再添加值的方案

    INSERT INTO content ( detail, status, beginTime, endTime) SELECT @detail, , NULL, NULL FROM DUAL WHE ...

  6. mysql中如何不重复插入,mysql 重复的不插入,mysql唯一的插入

    INSERT INTO new_schedules_spider_shipsname ( ID,SCAC,VESSEL,VOYAGE,SERVICE_NAME,MD5 ) SELECT NULL,%s ...

  7. mysql技巧一则-避免重复插入相同数据

    今天解决的问题如下: 如果避免插入或更新一条数据表中相同名称的记录? , ,, , , '2019-06-18 07:20:48', '2016-06-18 07:20:48', 'manaual r ...

  8. 一些常用的mysql语句实例-以后照写2

    specification: 规范, 规格, 产品规范, 产品规格, 技术规范, 产品说明书. 如: create_specification, 等等 创建数据库时, 显式地指明, 字符集: crea ...

  9. 让dede运行php代码和mysql语句

    一.dede运行php代码 举例1: {dede:name runphp='yes'} $str = "hello ";@me = $str;@me .= "world& ...

随机推荐

  1. change

    #include<iostream> using namespace std; int main() { double a; cin>>a; cout<<a< ...

  2. 《DDNS服务器的搭建和案例解决方法》

    DDNS原理:DNS + DHCP =DDNS DHCP负责ip解析,和分配给客户机ip,ip为随机数. DNS负责域名解析,A记录里记录了每个ip对应的域名. 客户端ip肯定是变化的,不可能一直使用 ...

  3. winform 清空界面所有控件已输入的值

    rivate void btnClear_Click(object sender, EventArgs e){ ClearCntrValue(this.pnlContent);}   复制代码/// ...

  4. Berkeley DB

    最近用BDB写点东西,写了挺多个测试工程.列下表,也理清楚最近的思路 1.测试BDB程序,包括打开增加记录,查询记录,获取所有记录.将数据转存mysql 程序的不足,增加记录仅仅只有key和value ...

  5. Global::pickSpecificTable_DNT

    /*************************************************** Created Date: 13 Jul 2013 Created By: Jimmy Xie ...

  6. Python的类实例方法,类方法,类静态方法

    以下面的类定义为例: # coding:utf-8 class A: count = 0 def __init__(self, inst_name): self.inst_name = inst_na ...

  7. iOS开发中GCD在多线程方面的理解

    GCD为Grand Central Dispatch的缩写. Grand Central Dispatch (GCD)是Apple开发的一个多核编程的较新的解决方法.在Mac OS X 10.6雪豹中 ...

  8. 从零开始学ios开发(十九):Application Settings and User Defaults(上)

    在iphone和ipad中,有一个东西大家一定很熟悉,那个东西就是Settings. 这次要学习的东西说白了很简单,就是学习如何在Settings中对一个app的某些属性进行设置,反过来,在app中更 ...

  9. 101个MySQL的调节和优化的Tips

    MySQL 是一个功能强大的开源数据库.随着越来越多的数据库驱动的应用程序,人们一直在推动MySQL发展到它的极限.这里是101条调节和优化MySQL安装的技巧.一些技巧是针对特定的安装环境的,但这些 ...

  10. 关于表 datatable的条件查询

    关于表 datatable的条件查询 从数据库中获得一个datatable dt .里面有很多的死的数据.然后,我就是要在这个表中来按条件查询,例如 dt中有个列叫"palte", ...