Mysql特殊用法分享

不存在则插入,存在则更新的2种写法

前置使用条件,必须有唯一索引

-- 1 REPLACE INTO
REPLACE INTO typora.ip_view_times_record (ip, view_times, url) VALUES('10.25.130.64', 1, 'https://10.25.168.80/fhh/index.html?url=index.md543');-- 2 ON DUPLICATE key update
-- 当更新的是索引时,容易发生死锁。注意全面测试,这种方式适合数据大批量操作
INSERT INTO typora.ip_view_times_record (ip, url) VALUES('10.25.130.64', 'https://10.25.168.80/fhh/index.html?url=index.md11111')
ON DUPLICATE key update view_times = if(view_times, 0) + 1 ;-- 3 先更新,更新为0,则插入。分段sql中间存在较低的时差,分析其影响后再使用
if(updateRow > 1){insert();
}

前2种的差异:

REPLACE INTO 每次会把这条数据先清除,在重新插入values中的值,所以除了一次会更新1条数据,后面会更新2条数据;INSERT INTO ON DUPLICATE key update 原理是先查,如果没有再插入,否则更新;

批量更新策略

-- 1. 适用于不同更新条件更新不同内容,性能取决于查询性能,大多数情况性能表现较好,一般用作数据更新、插入
INSERT INTO table (ip, url) VALUES('10.25.130.64', 'https://10.25.168.80/fhh/index.html?url=index.md11111')
ON DUPLICATE key update xxx;-- 2. 适用于不同更新条件更新不同内容,性能取决于查询性能,大多数情况性能表现较好(小表在右)
with tmp as (select name, stat_date from  user1 where stat_date >= '2024-05-21'
)
, tmp1 as (select a.name, b.stat_date from user a inner join tmp b on a.name = b.name
)
update user a INNER JOIN tmp1 b on a.name = b.name set a.stat_date = b.stat_date;-- 2.1
update test a INNER JOIN test1 b on a.account = b.account set a.account1 = b.account1;-- 3. 性能一般,适用于不同条件 更新同一内容
update a set a.col1 = xxx where a.col2 in (....)-- 4. 性能较好,exists 适用于判断存在性。
update user b set stat_date = '2024-05-21' where exists (select 1 from user1 a where a.name = b.name and stat_date >= '2024-05-21');

可重复执行DDL

drop table if exists crr_policy_index;

建索引

set @v_count = 0;
select count(*) into @v_count from information_schema.statistics where TABLE_SCHEMA='fhh' and TABLE_NAME='fhh_test' and INDEX_NAME = 'fhh_test_account_idx';
set @sql = if(@v_count = 0, "CREATE INDEX fhh_test_account_idx USING BTREE ON fhh.fhh_test (account, account1)", "select 'fhh_test.fhh_test_account_idx is OK.'");
prepare stmt from @sql;
execute stmt;

其他使用if exists关键字,或参考建索引(当不支持 if exists 关键字时)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/28990.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HTTP服务器实现长连接的思路(Java语言)

一、背景 目前的HTTP服务器很多,只要是编程语言支持线程和网络通信,就能开发一个HTTP协议服务器。 市场上常用的是Tomcat、Ngnix、Httpd等技术。 二、本文目的 介绍使用Java语言来开发HTTP服务器的处理逻辑。 这是个人可以参考的HTTP服务器通用逻辑。…

使用Selenium进行元素定位的全面指南

使用Selenium进行元素定位的全面指南 引言 Selenium 是一个广泛使用的开源工具,用于自动化Web浏览器的操作。无论你是进行自动化测试,还是需要抓取网页数据,Selenium 都是一个非常有用的工具。而在Selenium中,定位网页元素是自动…

LabVIEW机械设备故障诊断中,振动分析的有效性与局限性如何

LabVIEW作为一种强大的图形化编程工具,在机械设备故障诊断中的振动分析中发挥了重要作用。振动分析通过监测机械设备的振动信号,能够有效地诊断设备故障。然而,尽管其有效性显著,但也存在一些局限性。本文将探讨LabVIEW在振动分析…

C# —— for循环语句

基本语法 for (初始表达式; 条件表达式; 增量表达式) { // 循环体 } for循环中 有三个空 第一个空(初始表达式): 一般用来声明一个临时的局部变量 用来计数 第二个空(条件表达式): 表明进入循环的条件 一个bool类型的值(bool类型 条…

深度神经网络——什么是NLP(自然语言处理)?

自然语言处理(NLP) 是对使计算机能够处理、分析、解释和推理人类语言的技术和工具的研究和应用。 NLP 是一个跨学科领域,它结合了语言学和计算机科学等领域已建立的技术。 这些技术与人工智能结合使用来创建聊天机器人和数字助理,…

海成蜘蛛池广州官网下载

baidu搜索:如何联系八爪鱼SEO? baidu搜索:如何联系八爪鱼SEO? baidu搜索:如何联系八爪鱼SEO? 当我们给自己的泛目录设置仅蜘蛛抓取生成缓存的时候,我们需要模拟蜘蛛抓取测试我们的设置是否成功。绝大部分时候我们都使用网页蜘蛛模拟抓取测…

Comparable和Comparator区别

相同点:都是用于比较排序。 不同点: 1、接口所在的包不同:comparable:java.lang.Comparable;Comparator:java.util.Comparator 2、比较逻辑不同:Comparable:内部比较器&#xff1…

2024.618到底买什么数码值得?带你一起来看看!

在618期间,这些新品可能会有特别的优惠活动,包括但不限于折扣、满减、赠品等。因此,如果你正在寻找一款适合自己的数码产品,不妨关注各大电商平台的618促销活动,把握机会,以优惠的价格购买到心仪的产品。 …

文件操作(1)(C语言版)

前言: 为什么要学习文件操作: 1、如果大家写过一些代码,当运行结束的时候,这些运行结果将不复存在,除非,再次运行时这些结果才能展现在屏幕上面,就比如之前写过的通讯录。 现实中的通讯录可以保…

【数据结构初阶】--- 堆

文章目录 一、什么是堆?树二叉树完全二叉树堆的分类堆的实现方法 二、堆的操作堆的定义初始化插入数据(包含向上调整详细讲解)向上调整删除堆顶元素(包含向下调整详细讲解)向下调整返回堆顶元素判断堆是否为空销毁 三、…

一个开源的快速准确地将 PDF 转换为 markdown工具

大家好,今天给大家分享的是一个开源的快速准确地将 PDF 转换为 markdown工具。 Marker是一款功能强大的PDF转换工具,它能够将PDF文件快速、准确地转换为Markdown格式。这款工具特别适合处理书籍和科学论文,支持所有语言的转换,并…

2024年最佳插电式混合动力电动汽车

对电动汽车充满好奇和环保意识的司机们还没有准备好跨入纯电动汽车,他们可以找到一个折衷方案,即插电式混合动力车。 在过去的16年里,我一直在把握汽车行业的脉搏。试驾数百辆汽车、电动汽车、插电式混合动力车,跟踪汽车行业的新闻…

python2.7pip报错:UnicodeDecodeError: ‘ascii‘ codec can‘t decode

找到文件&#xff1a;<yourpath>\Python27\Lib\ntpath.py&#xff0c;修改join函数&#xff1a; # Join two (or more) paths. def join(path, *paths):"""Join two or more pathname components, inserting "\\" as needed."""…

DAY04 HTMLCSS

文章目录 一 表单(1) 数字控件(2) 颜色控件(3) 日期控件(4) 月份控件(5) 星期控件(6) 搜索控件(7) 范围控件 二 浮动框架三 结构化标签四 CSS1 CSS概述2 CSS的编写位置1. inline style 行内样式2. inner style 内部样式3. outer style 外部样式4. 小结 3 CSS选择器1. 通用选择器…

NumPy 差分、最小公倍数、最大公约数、三角函数详解

NumPy 差分 离散差分意味着相邻元素之间的减法。 例如&#xff0c;对于 [1, 2, 3, 4]&#xff0c;离散差分将是 [2-1, 3-2, 4-3] [1, 1, 1] 要找到离散差分&#xff0c;使用 diff() 函数。 示例&#xff1a; import numpy as nparr np.array([10, 15, 25, 5])newarr np…

一个示例学习C语言到汇编层面

给出以下代码 #include<stdio.h> int main() {int x 0, y 0, z 0;while (1) {x 0;y 1;do {printf("%d\n", x);z x y;x y;y z;} while (x < 255);}return 0; }我们把这个程序编写成32位程序&#xff0c;然后我们放入IDA中进行分析 .text:0080187…

Mysql开启查询日志(General Log)

1、增加配置&#xff1a; /etc/my.cnf [mysqld] general_log1 general_log_file/var/log/mysql/query.log 2、增加目录和文件&#xff0c;并且授权 可以使用以下命令修改权限&#xff1a; 创建目录&#xff1a;sudo mkdir -p /var/log/mysql 更改目录所有者&#xff1a;sudo…

okcc呼叫中心系统如何对客户进行按键标记?呼叫系统搭建

要在OKCC呼叫中心系统中对客户进行按键标记&#xff0c;可以按照以下步骤操作&#xff1a; 登录系统&#xff1a;首先&#xff0c;使用管理员或具有相应权限的账户登录OKCC呼叫中心系统。 搜索客户&#xff1a;在系统的主界面或客户管理界面&#xff0c;通过搜索功能找到需要标…

【日常记录】【插件】prisma 链接MySQL数据库 简单入门

文章目录 1、新建项目&#xff0c;使用prisma链接数据库1.1、先创建一个项目1.2、初始化 npm 配置文件及下载依赖1.3、初始化TS配置文件1.4、初始化 prisma1.5、更改 prisma/schema.prisma1.6 更改.env 文件1.7 编写 prisma/schema.prisma1.8 将编写的 prisma/schema.prisma 映…

OSPF被动接口配置(华为)

#交换设备 OSPF被动接口配置 一、基本概念 OSPF被动接口&#xff0c;也称为抑制接口&#xff0c;即将路由器某一接口配置为被动接口后&#xff0c;该接口不会再接受和发送OSPF报文 二、使用场景 在路由器与终端相近或者直接相连的一侧配置被动接口 因为OSPF会定期发送报文…