服务器之家:专注于服务器技术及软件下载分享
分类导航

Mysql|Mssql|Oracle|Redis|

服务器之家 - 数据库 - Mysql - mysql 记录不存在时插入 记录存在则更新的实现方法

mysql 记录不存在时插入 记录存在则更新的实现方法

2019-10-24 17:27mysql教程网 Mysql

mysql 记录不存在时插入 记录存在则更新的实现方法,相信很多人都需要用到这个语句,请看下文:(在4.1以后的版本才有效)

mysql 记录不存在时插入
在 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 语句后面直接跟上要插入字段的值,即使这些值还不存在当前表中。

mysql 记录不存在时插入 记录存在则更新的实现方法

复制代码代码如下:


mysql> truncate `200702`; 
Query OK, 0 rows affected (0.01 sec) 
mysql> select * from `200702`; 
Empty set (0.01 sec)<span id="more-22"></span> 
mysql> insert into `200702` (`domain`, `2nd_domain`, `tld`, `query_ns1`, `query_ns2`, `report_date`) values ('dnspod.com', 'dnspod', 'com', 1000, 2000, '2007-02-04') ON DUPLICATE KEY UPDATE `query_ns1` = `query_ns1` + 1000, `query_ns2` = `query_ns2` + 2000; 
Query OK, 1 row affected (0.00 sec) 

mysql> select * from `200702`; 
+----+------------+------------+------+-----------+-----------+-----------+-----------+-------------+ 
| id | domain | 2nd_domain | tld | query_ns1 | query_ns2 | query_ns3 | query_ns4 | report_date | 
+----+------------+------------+------+-----------+-----------+-----------+-----------+-------------+ 
| 1 | dnspod.com | dnspod | com | 1000 | 2000 | 0 | 0 | 2007-02-04 | 
+----+------------+------------+------+-----------+-----------+-----------+-----------+-------------+ 
1 row in set (0.00 sec) 

mysql> insert into `200702` (`domain`, `2nd_domain`, `tld`, `query_ns1`, `query_ns2`, `report_date`) values ('dnspod.com', 'dnspod', 'com', 1000, 2000, '2007-02-04') ON DUPLICATE KEY UPDATE `query_ns1` = `query_ns1` + 1000, `query_ns2` = `query_ns2` + 2000; 
Query OK, 2 rows affected (0.01 sec) 

mysql> select * from `200702`; 
+----+------------+------------+------+-----------+-----------+-----------+-----------+-------------+ 
| id | domain | 2nd_domain | tld | query_ns1 | query_ns2 | query_ns3 | query_ns4 | report_date | 
+----+------------+------------+------+-----------+-----------+-----------+-----------+-------------+ 
| 1 | dnspod.com | dnspod | com | 2000 | 4000 | 0 | 0 | 2007-02-04 | 
+----+------------+------------+------+-----------+-----------+-----------+-----------+-------------+ 
1 row in set (0.01 sec) 
mysql> 

当然,建表的时候,千万别忘记了给domain做一个unique 
UNIQUE KEY `domain` (`domain`,`report_date`) 

延伸 · 阅读

精彩推荐
  • Mysql删除mysql数据库中的重复数据记录

    删除mysql数据库中的重复数据记录

    mysql中select distinct * from text不能显示不重复的记录,而是直接全部显示 ...

    mysql技术网2572019-10-22
  • MysqlMySQL Community Server 8.0.11安装配置方法图文教程

    MySQL Community Server 8.0.11安装配置方法图文教程

    这篇文章主要为大家详细 介绍了MySQL Community Server 8.0.11安装配置方法图文教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    丿小可爱3302019-07-15
  • MysqlMySQL通过show processlist命令检视性能的讲解

    MySQL通过show processlist命令检视性能的讲解

    今天小编就为大家分享一篇关于MySQL通过show processlist命令检视性能的讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一...

    CODETC5262019-06-24
  • Mysql通过MySQL慢查询优化MySQL性能的方法讲解

    通过MySQL慢查询优化MySQL性能的方法讲解

    今天小编就为大家分享一篇关于通过MySQL慢查询优化MySQL性能的方法讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起...

    CODETC1932019-06-24
  • Mysql详解mysql中的concat相关函数

    详解mysql中的concat相关函数

    这篇文章主要介绍了mysql中的concat相关函数,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下...

    码农Robin3572019-06-15
  • Mysql抽取oracle数据到mysql数据库的实现过程

    抽取oracle数据到mysql数据库的实现过程

    今天小编就为大家分享一篇关于抽取oracle数据到mysql数据库的实现过程,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起...

    skillfulit4532019-06-04
  • MysqlMYSQL日期和时间函数不求人

    MYSQL日期和时间函数不求人

    对于每个类型拥有的值范围以及并且指定日期何时间值的有效格式的描述见7.3.6日期和时间类型。 这里是一个使用日期函数的例子。下面的查询选择了所有...

    mysql技术网4382019-10-17
  • Mysqlmac下重置mysl8.0.11密码的方法

    mac下重置mysl8.0.11密码的方法

    mac下安装mysql8.0.11时要求输入密码之后想修改密码。接下来通过本文给大家介绍mac下重置mysl8.0.11密码的方法,需要的朋友可以参考下...

    source4632019-07-07