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

2016-02-19 10:32 95 1 收藏

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

【 tulaoshi.com - 编程语言 】

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`)

来源:https://www.tulaoshi.com/n/20160219/1594996.html

延伸阅读
如企业管理器、查询分析器、事务探查器等;二是利用用户自己开发的客户端程序,如ASP 脚本、VB程序等,客户端程序中又是利用 ODBC 或者OLE DB等连接 SQL Server。下面,我们将就这两种连接方式,具体谈谈如何来解决连接失败的问题。 一、"SQL Server 不存在或访问被拒绝" (图1) "SQL Server 不存在或访问被拒绝"错误,通...
标签: Web开发
在《欲练 CSS ,必先宫 IE》和《你有 table / 强迫症吗?》这两篇文章中,看到有不少评论用到div+CSS布局这个说法,用来和table布局比较。实际上div不是用来布局的,div只是用来表示一个其它元素都无法准确表达语意的一个块区,只有CSS是用于布局的,所以根本就不存在div+CSS布局这回事。反过来,table布局的时候经常依赖于CSS定义一个单元...
标签: SQLServer
最近做一个项目(Asp.net+Sql Server 2000),在原来开发的机器上运行没有任何问题.但当我在另外一台机器上调试程序(本机调试)的时候,总出现“SQL Server不存在或访问被拒绝”。相信在任何一个搜索网站输入这样的检索词,一定会获得n多的页面。 总结起来的关于SQL Server连接中此类四个最常见错误错误解决方案如下: 一."SQL Server 不...
标签: Android
安卓手机sd卡不存在是什么原因   1、请确保你的手机中装有SD卡,且SD卡无损坏www.Tulaoshi.com; 2、请确保你的SD卡接触良好,在设置---存储可正常显示sd容量信息; 3、建议你在手机关机状态下尝试将外置卡取出,用酒精擦拭下后看能否正常使用。也试下其他的sd卡,看能否正常使用,如SD卡擦拭后还不能被手机识别且你的手机...
标签: 婴儿
母乳检测遭专家批驳“标准母乳”根本不存在 近日,17个科普微博联名质疑全国巡回母乳检测的消息引起很多人的关注。专家指出,所谓的母乳检测根本无法实现其广告宣称的及时地调整补充婴幼儿营养摄取。其实,对于正常婴儿来说,母亲饮食正常、营养全面均衡,完全没有必要去操心母乳成分。 检测不能全面反映母乳 新手妈妈齐女士在...

经验教程

506

收藏

87
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部