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

地狱的天使009

地狱的天使009

2016-02-19 10:32

关注图老师设计创意栏目可以让大家能更好的了解电脑,知道有关于电脑的更多有趣教程,今天给大家分享mysql 记录不存在时插入 记录存在则更新的实现方法教程,希望对大家能有一点小小的帮助。
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`)

展开更多 50%)
分享

猜你喜欢

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

编程语言 网络编程
mysql 记录不存在时插入 记录存在则更新的实现方法

用Javascript判断图片是否存在不存在则显示默认图片的代码

Web开发
用Javascript判断图片是否存在不存在则显示默认图片的代码

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

ASP实现不存在的网页就自动发送邮件

Web开发
ASP实现不存在的网页就自动发送邮件

对不起,您访问的页面不存在

孕前饮食禁忌 育儿知识 怀孕 孕妇
对不起,您访问的页面不存在

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

sql server不存在 sql server拒绝访问

编程语言 网络编程
sql server不存在 sql server拒绝访问

Outlook 2010对HTML的渲染不存在问题

电脑入门
Outlook 2010对HTML的渲染不存在问题

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

Oracle 8x监控sysdba角色用户登陆情况

Oracle 8x监控sysdba角色用户登陆情况

用JavaScript事件串连执行多个处理过程的方法

用JavaScript事件串连执行多个处理过程的方法
下拉加载更多内容 ↓