mysql判断表中字段是否存在(mysql插入前判断数据是否存在的操作)
mysql判断表中字段是否存在
mysql插入前判断数据是否存在的操作业务场景:需要记入访客的访问情况,但不能重复记入
可以插入前进行判断要插入的数据是否存在业务代码如下 :
|
INSERT INTO t_topic_vistor(user_id,topic_code) SELECT '218' , 'XQ33019920170811142528217' FROM DUAL WHERE NOT EXISTS( SELECT * FROM t_topic_vistor WHERE user_id = 218 and topic_code= 'XQ33019920170811142528217' ) |
语法如下:
|
INSERT INTO table (field1, field2, fieldn) SELECT 'field1' , 'field2' , 'fieldn' FROM DUAL WHERE NOT EXISTS( SELECT field FROM table WHERE field = ?) |
补充知识:MySql 不存在则插入,存在则更新或忽略
前言
在插入数据时,可能需要忽略或替换掉重复的数据(依据某个字段),这时可以在应用层处理,也可以使用复杂的 SQL 语句来处理(如果仅仅知道一些简单的 SQL 语法的话),当然也可以使用一些简单的 SQL 语法,不过它并不是通用所有的数据库类型。
以下所有实例仅针对MySQL而言,并不能随意用于其它数据库
实例
表名称:student
表字段:
Column Name | Primary Key | Auto Increment | Unique |
---|---|---|---|
id | true | true | |
name | true | ||
age |
初始表数据:
id | name | age |
---|---|---|
1 | Jack | 18 |
注:以下所有的示例都需要被插入的数据中需要存在UNIQUE索引或PRIMARY KEY字段,同时这里引入表的主键id,并设置成自动递增,后面可以看到它的变化
1. 不存在则插入,存在则更新
1.1 on duplicate key update
如果插入的数据会导致UNIQUE 索引或PRIMARY KEY发生冲突/重复,则执行UPDATE语句,例:
|
INSERT INTO `student`(` name `, `age`) VALUES ( 'Jack' , 19) ON DUPLICATE KEY UPDATE `age`=19; -- If will happen conflict, the update statement is executed -- 2 row(s) affected |
这里受影响的行数是2,因为数据库中存在name='Jack'的数据,如果不存在此条数据,则受影响的行数为1
最新的表数据如下:
id | name | age |
---|---|---|
1 | Jack | 19 |
1.2 replace into
如果插入的数据会导致UNIQUE 索引或PRIMARY KEY发生冲突/重复,则先删除旧数据再插入最新的数据,例:
REPLACE INTO `student`(`name`, `age`) VALUES('Jack', 18);
-- 2 row(s) affected
这里受影响的行数是2,因为数据库中存在name='Jack'的数据,并且id的值会变成2,因为它是先删除旧数据,然后再插入数据,最新的表数据如下:
id | name | age |
---|---|---|
2 | Jack | 19 |
2. 避免重复插入
关键字/句:insert ignore into,如果插入的数据会导致UNIQUE索引或PRIMARY KEY发生冲突/重复,则忽略此次操作/不插入数据,例:
INSERT IGNORE INTO `student`(`name`, `age`) VALUES('Jack', 18);
-- 0 row(s) affected
这里已经存在name='Jack'的数据,所以会忽略掉新插入的数据,受影响行数为0,表数据不变。
以上这篇mysql插入前判断数据是否存在的操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持开心学习网。
原文链接:https://blog.csdn.net/lai0yuan/article/details/78234102
- 使用mysqldump命令来备份(linux使用mysqldump+expect+crontab实现mysql周期冷备份思路详解)
- 适合小白入门的mysql教程索引简介(一篇带给你MySQL高性能索引)
- mysqlpxc性能(MySQL之PXC集群搭建的方法步骤)
- mysql怎么建立主键外键(mysql 实现设置多个主键的操作)
- mysql怎么做教材信息管理系统(python+mysql实现学生信息查询系统)
- 用mysql编写test数据库(MySQL制作具有千万条测试数据的测试库的方法)
- 在mysql中如何授权(MySQL 角色role功能介绍)
- 终于有人将mysql 索引讲清楚了(MySQL 索引的一些细节分享)
- mysql 存储引擎有哪些(MySQL 常见存储引擎的优劣)
- mysql完全快速清空一个表(浅谈MySQL如何优雅的做大表删除)
- mysql常见错误提示及解决办法(MYSQL 无法识别中文的永久解决方法)
- 深入理解mysql索引(MySQL中冗余和重复索引的区别说明)
- mysql大表查询优化方案(mysql查询优化之100万条数据的一张表优化方案)
- mysql数据库主键选择的详解(图文详解MySQL中的主键与事务)
- mysql用什么类型数据(MySQL 数据类型选择原则)
- mysqljoin默认是什么(mysql-joins具体用法说明)
- 袁冰妍终于接到新剧,饰演反追男主,看到合作演员 眼光果然毒辣(袁冰妍终于接到新剧)
- 记忆中的台词(记忆中的台词)
- 袁冰妍轧戏 拍《琉璃》的同时还在拍《将夜》,难怪被骂演技差(拍琉璃的同时还在拍将夜)
- 刚红就耍大牌,《琉璃》角色滤镜碎一地,心疼工作人员(琉璃角色滤镜碎一地)
- 袁冰妍郑业成这对可以处,有脸红情话他们是真的敢说(袁冰妍郑业成这对可以处)
- 《祝卿好》台词又土又甜,就喜欢这么直接的恋爱(祝卿好台词又土又甜)
热门推荐
- harbor镜像仓库扫描原理(Harbor搭建Docker私有仓库的实现方法)
- lnmp常见问题(LAMP和LNMP,你更愿意选择谁,为什么?)
- iis服务器无法启动(Windows服务器中IIS返回的网页错误代码大汇总及原因解)
- nginxdocker界面(Docker部署nginx实现过程图文详解)
- ASP.NET windows服务调试
- docker部署spring boot(Spring Boot 打包上传Docker 仓库的详细步骤)
- vue项目引入element页面(vue-element-admin项目导入和导出的实现)
- dedecms模板特点(为DedeCMS换上精美多样的提示信息窗口)
- dede织梦怎么在文章下面添加图片(dedecms织梦模板用array调用多个自定义字段并判断的方法)
- dede数据库详解(Dede 删除文档同时文章中的图片的方法)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9