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
- mysql查询killed状态的进程(MySQL kill指令使用指南)
- mysql的分页原理(mysql分页的limit参数简单示例)
- mysql开启审计日志会导致性能下降(MySQL 一则慢日志监控误报的问题分析与解决)
- mysql有哪些约束(MySQL完整性约束的定义与实例教程)
- mysql表结构设计分享(MySql开发之自动同步表结构)
- mysql数据库间的连接(MySQL中表的几种连接方式)
- php redis应用场景(PHP商品秒杀问题解决方案实例详解mysql与redis)
- 怎么查看mysql运行日志(通过Query Profiler查看MySQL语句运行时间的操作方法)
- mysql新增字段并添加备注(mysql添加备注信息的实现)
- mysql怎么查看表的字段(Mysql 获取表的comment 字段操作)
- mysql三种查询方式(MySQL查询学习之基础查询操作)
- python怎么操作mysql(详解Python的数据库操作pymysql)
- mysql新增字段语句(关于Mysql update修改多个字段and的语法问题详析)
- mysql建表时指定聚簇索引(一看就懂的MySQL的聚簇索引及聚簇索引是如何长高的)
- 适合小白入门的mysql教程索引简介(一篇带给你MySQL高性能索引)
- mysql获取当前日期时间(MySQL DATEDIFF函数获取两个日期的时间间隔的方法)
- 经常发这三种 朋友圈 的人,要迅速屏蔽(经常发这三种朋友圈)
- 有种尴尬叫朋友圈忘屏蔽,大学生上演社死现场,父母亲自下场吐槽(有种尴尬叫朋友圈忘屏蔽)
- 朋友圈屏蔽你的人,可以直接看淡了(朋友圈屏蔽你的人)
- 金球奖只青睐那些会戴珠宝的女人(金球奖只青睐那些会戴珠宝的女人)
- 浙江省一个县,人口超40万,建县历史超1100年(浙江省一个县人口超40万)
- 五代十国南唐历代国君(五代十国南唐历代国君)
热门推荐
- sql server操作方法(SQL Server 文件操作方法)
- php防sql注入(万能密码的SQL注入漏洞其PHP环境搭建及防御手段)
- navicat连接mysql1045解决方法(Navicat 连接服务器端中的docker数据库的方法)
- nginx反向代理流程详解(本地通过nginx配置反向代理的全过程记录)
- nginx配置详细讲解(Nginx服务快速入门教程)
- laravel框架的业务流程顺序(Laravel+Dingo/Api 自定义响应的实现)
- html5新增全局属性(HTML5自定义属性的问题分析)
- 前端轮播图效果(AmazeUI图片轮播效果的示例代码)
- python连接到本地的mysql数据库(Python实现连接MySql数据库及增删改查操作详解)
- css3引导动画教程(详解Css3新特性应用之过渡与动画)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9