当前位置:首页 > 编程教程 > mysql技术文章 > mysql insert if not exists防止插入重复记录的方法

mysql insert if not exists防止插入重复记录的实例写法

  • 发布时间:
  • 作者:码农之家
  • 点击:163

这篇文章主要知识点是关于mysql、防止插入、重复记录、的内容,如果大家想对相关知识点有系统深入的学习,可以参阅以下电子书

PHP&MySQL跨设备网站开发实例精粹
  • 类型:PHP编程大小:80.9 MB格式:PDF作者:陈惠贞,陈俊荣
立即下载

mysql insert if not exists防止插入重复记录的方法

MySQL 当记录不存在时插入(insert if not exists)

在 MySQL 中,插入(insert)一条记录很简单,但是一些特殊应用,在插入记录前,需要检查这条记录是否已经存在,只有当记录不存在时才执行插入操作,本文介绍的就是这个问题的解决方案。

在 MySQL 中,插入(insert)一条记录很简单,但是一些特殊应用,在插入记录前,需要检查这条记录是否已经存在,只有当记录不存在时才执行插入操作,本文介绍的就是这个问题的解决方案。

问题:我创建了一个表来存放客户信息,我知道可以用 insert 语句插入信息到表中,但是怎么样才能保证不会插入重复的记录呢?

答案:可以通过使用 EXISTS 条件句防止插入重复记录。
示例一:插入多条记录
假设有一个主键为 client_id 的 clients 表,可以使用下面的语句:

 

INSERT INTO clients
(client_id, client_name, client_type)
SELECT supplier_id, supplier_name, 'advertising'
FROM suppliers
WHERE not exists (select * from clients
where clients.client_id = suppliers.supplier_id);

示例一:插入单条记录
 

INSERT INTO clients
(client_id, client_name, client_type)
SELECT 10345, 'IBM', 'advertising'
FROM dual
WHERE not exists (select * from clients
where clients.client_id = 10345);

使用 dual 做表名可以让你在 select 语句后面直接跟上要插入字段的值,即使这些值还不存在当前表中。

以上就是本次给大家分享的关于java的全部知识点内容总结,大家还可以在下方相关文章里找到相关文章进一步学习,感谢大家的阅读和支持。

您可能感兴趣的文章:

  • mysql查询重复数据中SQL优化方法
  • mysql中的冗余和重复索引知识点
  • 相关电子书
    学习笔记
    网友NO.872042

    MySQL大表中重复字段的高效率查询方法

    MySQL大表重复字段应该如何查询到呢?这是很多人都遇到的问题,下面就教您一个MySQL大表重复字段的查询方法,供您参考。 数据库中有个大表,需要查找其中的名字有重复的记录id,以便比较。 如果仅仅是查找数据库中name不重复的字段,很容易 SELECT min(`id`),`name` FROM `table` GROUP BY `name`; 但是这样并不能得到说有重复字段的id值。(只得到了最小的一个id值) 查询哪些字段是重复的也容易 SELECT `name`,count(`name`) as count FROM `table` GROUP BY `name` HAVING count(`name`) 1 ORDER BY count DESC; 但是要一次查询到重复字段的id值,就必须使用子查询了,于是使用下面的语句来实现MySQL大表重复字段查询。 SELECT `id`,`name` FROM `table` WHERE `name` in ( SELECT `name` FROM `table` GROUP BY `name` HAVING count(`name`) 1 ); 但是这条语句在mysql中效率太差,感觉mysql并没有为子查询生成临时表。 于是使用先建立临时……

    网友NO.214673

    mysql查询重复数据中SQL优化方法

    在mysql中查询不区分大小写重复的数据,往往会用到子查询,并在子查询中使用upper函数来将条件转化为大写。如: select * from staticcatalogue WHERE UPPER(Source) IN (SELECT UPPER(Source) FROM staticcatalogue GROUP BY UPPER(Source) having count(UPPER(Source))1) ORDER BY upper(Source) DESC; 这条语句的执行效率是非常低的,特别是Source字段没有加索引。尤其是最忌讳的在查询条件中使用了函数,这将极大的降低查询速度,如果查询十万条数据以内的10分钟内还能获取到数据,如果是查询几十万条的话,会直接把服务器跑死的,此时可以通过一个临时表,并且加索引,再查询。这样可以提高很多的速度 CREATE TABLE staticcatalogue_tmp SELECT UPPER(Source) AS Source FROM staticcatalogue GROUP BY UPPER(Source) having count(UPPER(Source))1; ALTER TABLE staticcatalogue_tmp add INDEX TX_1 (Source); select s.* from staticcatalogue s WHERE UPPER(s.Source) IN……

    网友NO.419903

    MySQL可重复读级别能够解决幻读吗

    引言 之前在深入了解数据库理论的时候,了解到事物的不同隔离级别可能存在的问题。为了更好的理解所以在MySQL数据库中测试复现这些问题。关于脏读和不可重复读在相应的隔离级别下都很容易的复现了。但是对于幻读,我发现在可重复读的隔离级别下没有出现,当时想到难道是MySQL对幻读做了什么处理? 测试: 创建一张测试用的表dept: CREATE TABLE `dept` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(20) DEFAULT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8insert into dept(name) values("后勤部") 事物 1 事物 2 begin begin select * from dept - insert into dept(name) values("研发部") - commit select * from dept commit 根据上面的流程执行,预期来说应该是事物1的第一条select查询出一条数据,第二个select查询出两条数据(包含事物2提交的数据)。 但是在实际测试中发现第二条s……

    <
    1
    >

    Copyright 2018-2020 www.xz577.com 码农之家

    版权投诉 / 书籍推广 / 赞助:520161757@qq.com