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
- 阿里云ecs服务器数据在哪儿(阿里云ECS云服务器linux系统安装mysql后远程连接不了踩坑)
- mysqlroot本地远程都可登陆(mysql5.7 设置远程访问的实现)
- mysql中定义字段时zerofill属性的作用
- mysql如何解决主从延迟(MySQL主从延迟问题解决)
- ubuntu下mysql安装教程(Ubuntu 20.04 安装和配置MySql5.7的详细教程)
- 安装mysql中要注意什么问题(安装Mysql时可能会遇到的一些疑难杂症)
- mysql详细学习笔记(Mysql常用命令 详细整理版)
- oracle和mysql查询所有表(Oracle、MySQL和SqlServe三种数据库分页查询语句的区别介绍)
- mysql删库操作记录(mysql常用sql与命令之从入门到删库跑路)
- mysql用户授权的步骤(mysql创建用户并赋予用户权限详细操作教程)
- MySql DATE_FORMAT日期格式化
- 适合小白入门的mysql教程索引简介(一篇带给你MySQL高性能索引)
- mysqlshell日常运维脚本(监控MySQL主从状态的shell脚本)
- mysql中的null是什么(浅谈为什么Mysql数据库尽量避免NULL)
- mysql索引应该注意的地方(关于MySQL索引知识的小妙招)
- mysql8.0配置优化参数(MySQL 8.0 新特性之检查约束的实现)
- 金品公司 界界乐中秋限定飞行棋礼盒 露营藤篮礼盒全新上市(界界乐中秋限定飞行棋礼盒)
- 必看 8月,相比七夕,更需要注意的是这些事(必看8月相比七夕)
- 8月23日11时16分将迎处暑,逐渐进入气象意义上的秋天(8月23日11时16分将迎处暑)
- 花不语 下 如果重来一次的话,你还会这么选择吗(花不语下如果重来一次的话)
- 城市记忆之上海 最难忘的是老弄堂里的市井味道(城市记忆之上海)
- 太鸡贼了,这老小区轻松搞定了停车问题(这老小区轻松搞定了停车问题)
热门推荐
- python 数据库实现学生管理系统(python+mysql实现教务管理系统)
- idea怎样连接mysql(IDEA配置连接MYSQL数据库遇到Failed这个问题解决)
- docker shell教学(docker安装rockerChat设置聊天室的详细步骤)
- css实现隐藏菜单(利用CSS实现几款不错的菜单栏实例代码)
- mysql时间戳和datetime对比(mysql中 datatime与timestamp的区别说明)
- linux系统编程语法(简析Linux网络编程函数)
- 如何判断数据是json还是字符串(JSON.stringify的多种用法总结)
- 简述css在html页面中的使用方法(10分钟理解CSS BFC原理及其应用)
- laravel时间日期字段比较(Laravel find in set排序实例)
- vue调用后台接口实现预览(vue实现集成腾讯TIM即时通讯)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9