mysql的一些知识点

整理mysql的28个知识点 整理mysql26个知识点:1、MySQL的复制原理以及流程基本原理流程,3个线程以及之间的关联:主:binlog线程——记录下所有改变了数据库数据的语句,放进master上的binlog中;从:io线程——在使用start slave 之后,负责从master上拉取 binlog 内容,放进 自己的relay log中;从:sql执行线程——执行relay log中的语句;2、MySQL中myi... 阅读详情

首先是mysql的必知必会 ,mysql必知必会包含了mysql的基础语法,模糊查询,触发器,视图,等常用的写法,
具体可以查看这一篇文章,写的是mysql必知必会源文档的代码;
https://hiszm.blog.youkuaiyun.com/article/details/119540143?spm=1001.2014.3001.5506

大量的数据插入,哪种效率比较高;
一亿条数据插入,用什么方法效率比较高

结论是 用批处理+事务性,事务性是保证一些列的SQL都执行成功,也可以理解为是一次“批处理”,强强联手,批处理+批处理,效率杠杠的。

JDBC手动开启事务:一定要注意。
在这里插入图片描述MySQL默认关闭批处理
开启方法
在原始的URL尾部添加开启指令,如下标注语句
url = jdbc:mysql://localhost:3306/mydb3 ?rewriteBatchedStatements=true
添加批处理
调用preparedStatement中的addBatch()方法,将一句sql添加到批中,循环调用,则可添加大量sql语句到批中。
执行批处理
调用executeBatch()方法,此方法为继承父类Statament中的方法。

批处理可将sql的执行效率大大提升

再回到 原文的代码里:

/该代码为开启事务
 private long begin = 33112001;//起始id
    private long end = begin+100000;//每次循环插入的数据量
    private String url = "jdbc:mysql://localhost:3306/bigdata?useServerPrepStmts=false&rewriteBatchedStatements=true&useUnicode=true&characterEncoding=UTF-8";
    private String user = "root";
    private String password = "0203";
 
 
@org.junit.Test
    public void insertBigData3() {
        //定义连接、statement对象
        Connection conn = null;
        PreparedStatement pstm = null;
        try {
            //加载jdbc驱动
            Class.forName("com.mysql.jdbc.Driver");
            //连接mysql
            conn = DriverManager.getConnection(url, user, password);
             //将自动提交关闭
             conn.setAutoCommit(false);
            //编写sql
            String sql = "INSERT INTO person VALUES (?,?,?,?,?,?,?)";
            //预编译sql
            pstm = conn.prepareStatement(sql);
            //开始总计时
            long bTime1 = System.currentTimeMillis();
            
            //循环10次,每次一万数据,一共10万
            for(int i=0;i<10;i++) {
                //开启分段计时,计1W数据耗时
                long bTime = System.currentTimeMillis();
                //开始循环
                while (begin < end) {
                    //赋值
                    pstm.setLong(1, begin);
                    pstm.setString(2, RandomValue.getChineseName());
                    pstm.setString(3, RandomValue.name_sex);
                    pstm.setInt(4, RandomValue.getNum(1, 100));
                    pstm.setString(5, RandomValue.getEmail(4, 15));
                    pstm.setString(6, RandomValue.getTel());
                    pstm.setString(7, RandomValue.getRoad());
                    //执行sql
                    pstm.execute();
                    begin++;
                }
                //提交事务
                conn.commit();
                //边界值自增10W
                end += 10000;
                //关闭分段计时
                long eTime = System.currentTimeMillis();
                //输出
                System.out.println("成功插入1W条数据耗时:"+(eTime-bTime));
            }
            //关闭总计时
            long eTime1 = System.currentTimeMillis();
            //输出
            System.out.println("插入10W数据共耗时:"+(eTime1-bTime1));
        } catch (SQLException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e1) {
            e1.printStackTrace();
        }
    }

可以看到不仅加了批处理,还加了事务的情况下,效率提高。

mybatis的批处理

<insert id="batchInsert" parameterType="java.util.List">
<!--        foreach 是专门对parameterType传入中的list集合进行遍历的-->
        INSERT INTO t_goods(title, sub_title, original_cost, current_price, discount, is_free_delivery, category_Id)
        VALUES
        <foreach collection="list" item="item" index="index" separator=",">
            (#{item.title},#{item.subTitle}, #{item.originalCost}, #{item.currentPrice}, #{item.discount}, #{item.isFreeDelivery}, #{item.categoryId})
<!--             -->
        </foreach>
    </insert>

可以看到写起来还是比较麻烦的,用mybatis-plus则可以很好的提高效率
在我们写springboot项目的时候,通常用到的是它整合的MP,MP里自带了批处理的方法,不需要我们重新去写Sql,而且通过注解的方式开启事务,很方面,具体如下:
使用 @Transactional 开启事务,
使用事务注解@Transactional 之前,应该先了解它的相关属性,避免在实际项目中踩中各种各样的坑点。

常见坑点1:遇到检测异常时,事务默认不回滚。
因分析:因为Spring的默认的事务规则是遇到运行异常(RuntimeException及其子类)和程序错误(Error)才会进行事务回滚,显然SQLException并不属于这个范围。如果想针对检测异常进行事务回滚,可以在@Transactional 注解里使用
rollbackFor 属性明确指定异常。例如下面这样,就可以正常回滚:
@Transactional(rollbackFor = Exception.class)
public void addMoney()
throws Exception {
//先增加余额
accountMapper.addMoney();
//然后遇到故障
throw new SQLException(“发生异常了…”);
}
常见坑点2: 在业务层捕捉异常后,发现事务不生效。

这是许多新手都会犯的一个错误,在业务层手工捕捉并处理了异常,你都把异常“吃”掉了,Spring自然不知道这里有错,更不会主动去回滚数据。例如:下面这段代码直接导致增加余额的事务回滚没有生效。

 @Transactional 
 public void addMoney() throws Exception { 
 //先增加余额 accountMapper.addMoney();
  //谨慎:尽量不要在业务层捕捉异常并处理 
  try { 
  throw new SQLException("发生异常了.."); 
  }
   catch (Exception e) { 
   e.printStackTrace();
     } 
  }

MyBaits中#{}和 的 真 正 区 别 , {}的真正区别, 的真正区别,{}的使用场景,#{}如何防止注入?
${}和#{}的区别
#{}匹配的是一个占位符,相当于JDBC中的一个?,会对一些敏感的字符进行过滤,编译过后会对传递的值加上双引号,因此可以防止SQL注入问题。

匹 配 的 是 真 实 传 递 的 值 , 传 递 过 后 , 会 与 s q l 语 句 进 行 字 符 串 拼 接 。 {}匹配的是真实传递的值,传递过后,会与sql语句进行字符串拼接。 匹配的是真实传递的值,传递过后,会与sql语句进行字符串拼接。{}会与其他sql进行字符串拼接,不能预防sql注入问题。
#{}底层是如何防止SQL注入的?
网上关于这类问题非常多,总结出来就两个原因:
1)#{}底层采用的是PreparedStatement,会预编译,因此不会产生SQL注入问题;

其实预编译是MySQL自己本身的功能,和PreparedStatement没关系;而且预编译也不是咱们理解的那个预编译,再者PreparedStatement底层默认根本没有用到预编译(要我们手动开启)!详细往下看

2)#{}不会产生字符串拼接, 会 产 生 字 符 串 拼 接 , 因 此 {}会产生字符串拼接,因此 会产生字符串拼接,因此{}会出现SQL注入问题;

这两个答案都经不起深究,最终答案也只是停留在表面,也没人知道具体是为什么。

为什么能防止SQL注入?
打开PreparedStatement类的setString()方法(MyBatis在#{}传递参数时,是借助setString()方法来完成,${}则不是):
在这里插入图片描述
我们执行#{}的查询语句,打断点观察:
在这里插入图片描述在这里插入图片描述
在这里插入图片描述在这里插入图片描述

${}和#{}用法上的区别

例如现在要进行模糊查询,查询user表中姓张的所有员工的信息

sql语句为:select * from user where name like ‘张%’

此时如果传入的参数是 “张”

如果使用 : s e l e c t ∗ f r o m u s e r w h e r e n a m e l i k e ′ {}:select * from user where name like ' :select∗fromuserwherenamelike′{value}%’

生成的sql语句:select * from user where name like ‘张%’

如果使用#{}:select * from user where name like #{value}“%”

生成的sql语句:select * from user where name like ‘张’“%”

如果传入的参数是 “张%”

使用#{}:select * from user where name like #{value}

生成的sql语句:select * from user where name like ‘张%’

使用 : s e l e c t ∗ f r o m u s e r w h e r e n a m e l i k e ′ {}:select * from user where name like ' :select∗fromuserwherenamelike′{value}’

生成的sql语句:select * from user where name like ‘张%’

通过上面的SQL语句我们能够发现#{}是会加上双引号,而${}匹配的是真实的值。

还有一点就是如果使用 的 话 , 里 面 必 须 要 填 v a l u e , 即 : {}的话,里面必须要填value,即: 的话,里面必须要填value,即:{value},#{}则随意

什么情况下用${}?

在这里插入图片描述
在这里插入图片描述执行成功
在这里插入图片描述在这里插入图片描述

参考文章:
https://blog.youkuaiyun.com/weixin_39789646/article/details/110265386?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522165451571216781667851046%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=165451571216781667851046&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allfirst_rank_ecpm_v1~rank_v31_ecpm-1-110265386-null-null.142v11pc_search_result_control_group,157v13new_3&utm_term=url%E9%93%BE%E6%8E%A5%E5%BC%80%E5%90%AF%E4%BA%8B%E5%8A%A1&spm=1018.2226.3001.4187

https://mp.weixin.qq.com/s?__biz=MzkyNjI1OTI0Mw==&mid=2247495705&idx=1&sn=edf1735f6de606382e3d3bf8bbe54ede&chksm=c238b15df54f384becd82f4c13a6835e50b45dfc10cc43a726b5f35150b81758dfa69973a111&mpshare=1&scene=23&srcid=0527pcNuP9wyssbXhvErnfDV&sharer_sharetime=1654446507521&sharer_shareid=5e1f720976235b1e81fd0d6731dbec3a#rd

https://mp.weixin.qq.com/s?__biz=Mzk0MzIxNTMxNA==&mid=2247488734&idx=1&sn=6e839877d852c54531d81934b7180096&chksm=c3361363f4419a75e442e4523a687f4a19c1cf5779e81d9661df84c1cedd27ecf1ddb17c74dd&mpshare=1&scene=23&srcid=0112YCNjUfGJPyuKZYIzIvOI&sharer_sharetime=1654468248606&sharer_shareid=5e1f720976235b1e81fd0d6731dbec3a#rd

MySQL知识点汇总 数据冗余 阅读详情

相关推荐

避开这些坑!医疗影像数据增强的6个安全操作指南(附PyTorch代码)

本文详细介绍了医疗影像数据增强的六大安全准则,包括解剖结构守恒、密度值物理意义保留和病灶特征保护等关键原则,并提供了PyTorch实战代码。通过具体案例和参数建议,帮助开发者在肺结节检测和MRI分割等医疗AI应用中实现安全有效的数据增强,避免因不当操作导致的诊断误差。

cola5的博客 555

Java中连结MySQL启用预编译的先决条件是useServerPstmts=true.

在Java编程中,应用代码绝大多数使用了PreparedStatement,无论你是直接使用JDBC还是使用框架。    在Java编程中,绝大多数使用了使用了PreparedStatement连接MySQL的应用代码没有启用预编译,无论你是直接使用JDBC还是使用框架。    在我所能见到的项目中,几乎没有见过启用MySQL预编译功能的。网上更有文章说MySQL不支持预编译,实在是害人不浅。

诗剑书生的专栏 1万+

halcon 查找圆形

先找到大概位置进行拟合,然后再以拟合出的位置作为测量的大概位置进行找圆;

qq_59062726的博客 734

Mysql的读写调优

增加批量写的速度: useServerPrepStmts=false&rewriteBatchedStatements=true&useCompression=true 增加读的速度: useServerPrepStmts=true&cachePrepStmts=true

Tu_maimes 805

SonarQube 完整手册(2026 最新)

摘要: SonarQube是一款静态代码分析(SAST)平台,支持20+语言(如Java/Go/Python),提供Bug、漏洞、代码异味等检测,集成DevOps流水线。其架构包含服务端、扫描器和SonarLint插件。2026年四大版本:免费社区版(基础功能)、开发者版(多分支/PR分析)、企业版(合规治理)、数据中心版(高可用集群)。核心功能包括质量门禁(QualityGate)、密钥泄露检测及六大质量指标。部署推荐Docker+PostgreSQL,扫描支持Maven/CLI方式。

SmallBull的博客 670

threejs中使用Reflector实现出倒影效果,并实现背景透明的效果(Reflector镜面背景透明, 倒影弱化)

在项目中遇到要实现倒影效果,threejs给我们提供了Reflector,可以轻松完成镜面效果,实现倒影。但背景不透明;并且反射出的倒影太亮了;网上没搜到解决方案, 自己修改了下源码实现了想要的效果,做个记录...

weixin_40856652的博客 5720

mysql开启 pscache,MySQL JDBC驱动程序中的cachePrepStmts和useServerPrepStmts有什么区别

The MySQL JDBC Driver defines these two properties as:useServerPrepStmts - Use server-side prepared statements if the server supports them?cachePrepStmts - Should the driver cache the parsing stage of...

weixin_35762215的博客 815

【突变检验合集】含Pettitt突变检验等

突变检验方法合集

WW、forever的博客 3534

jdbc、PreparedStatement预编译原理

PreparedStatement预编译原理 https://www.zybuluo.com/stefanlu/note/254899 前提知识 MySQL预编译 只使用PreparedStatement无法使用预编译功能,因为mysql默认不开启预编译,需要连接db时添加useServerPrepStmts=true参数,例如 jdbc:mysql://127.0.0.1:3306/user?useServerPrepStmts=true 注意:useServerPrepStmts=true参数只对此次连

qq_43369986的博客 1129

【拼多多笔试题汇总】2024-03-24-拼多多春招笔试题

A 小镇上有个奇特的游戏。游戏开始时,A 先生准备了一排 nnn 个物品。K 小姐和卢小姐则轮流进行操作。首先,K 小姐可以选择移除至多 xxx 个物品。接着,卢小姐也可以选择移除剩余物品中的至多 yyy 个。游戏的目标是,K 小姐想尽量让剩余物品的价值之和最大化,而卢小姐则想将剩余物品的价值之和最小化。假设两人都采取最优策略,请问最后剩余物品的价值之和是多少?第一行包含五个正整数 n,m,k,x,yn, m, k, x, yn,m,k,x,y,分别表示物品的总数、K 小姐最多可移除的物品数、卢小姐最多可移

春秋招笔试突围 1万+

基于BP神经网络PID控制的电机转速控制器设计复现

摘要:本文提出了一种基于BP神经网络PID控制的永磁同步电机转速控制方法,通过MATLAB/Simulink平台实现了算法复现。系统采用三层BP神经网络在线调整PID参数,包含输入层(误差、误差变化率、误差积分)、5节点隐含层和输出层(Kp、Ki、Kd)。仿真结果表明,相比传统PID控制,该方案具有更快的响应速度(上升时间减少约40%)、更小的超调量(降低约60%)和更强的抗干扰能力,在电动汽车电机驱动等复杂工况下表现优异。文中详细给出了PMSM数学模型建立、BP网络设计、权值更新算法及Simulink仿真

max500600的博客 306

jdbc_useServerPrepStmts

 原文地址 : https://yq.aliyun.com/articles/603142 for(int i=0;i&lt;2;i++){ String sql="SELECT * FROM t_order WHERE user_id=?"; try{ Connection connection=dataSource.getConnetion(); PreparedStateme...

maqingbin8888的专栏 6159

【单智能体】AI 数据分析智能体案例讲解(附完整源码)

本案例将引导您构建一个基于 AI 的数据分析智能体,让用户能够通过自然语言查询来分析 CSV 和 Excel 文件中的数据,无需掌握 SQL 知识。该智能体使用 Agno Agent 框架集成 OpenAI GPT-4o 模型,并利用 DuckDB 提供高效的数据处理能力。

rengang66的博客 238

MySQL 知识点总结

MySQL 是一个开源的关系型数据库管理系统(RDBMS),由瑞典 MySQL AB 公司开发,目前属于 Oracle 公司。MySQL 是最流行的关系型数据库之一,广泛应用于 Web 应用程序中,尤其是与 PHP 结合使用的 LAMP(Linux, Apache, MySQL, PHP)架构。MySQL 支持多用户、多线程,提供了丰富的 API 接口,支持多种编程语言(如 C、C++、Java、Python 等)。开源免费高性能易于使用支持多种存储引擎良好的兼容性创建数据库删除数据库。

jay丿的博客 1746

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

MySQL知识点总结合集

因本人刚开始写博客,学识经验有限,如有不正之处望读者指正,不胜感激;也望借此平台留下学习笔记以温故而知新。这个合集是MySQL中涉及的一些相关知识点,留存以备不时之需。 MySQL中的多表连接查询 转载地址:Mysql 多表连接查询 inner join 和 outer join 的使用 转载地址:SQL内连接和外连接的区别、where和on的区别详细介绍 数据库知识点总结 转载地址:M...

曦瓜 1807

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Mysql知识点整理

组合索引的最左前缀原则是指,在查询时,MySQL会使用组合索引中的最左边的列(即索引定义中的第一个列)来进行查找,然后尽可能地使用接下来的列,直到遇到范围查询(例如。主要包括引擎(myisam和innodb),索引,索引类型,锁机制,事务特性,隔离级别,悲观锁乐观锁和字段类型等。INNER JOIN A INNER JOIN B ON A.id=B.id 只返回两表中匹配的行 两表的交集。1.事务的四大特性:原子性,一致性,隔离性,持久性。1)原子性:操作要么都全部完成,要么全部不完成。

Ivan_Leuang的博客 1892

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

【mysql】MySQL 面试,必须掌握的 8 个知识点

内容介绍 对于技术面试来说,考察的核心包含以下两个特点: 考察的知识点广,因为不同的公司和不同的面试官技能知识结构是不同的,所以所关注的问题和面试内容也是不同的,所以具备面试知识点广的特点;考察的知识点较深入,以阿里巴巴为例,这些大厂的面试都是类似的,通常从一个大的面试点切入,然后层层深入,直到问到你不会为止,比如,你了解哪些数据库引擎?这个数据库引擎的特点是什么?这个数据库引擎是如何存储数据...

我的笔记本 1685

mysql知识点

【代码】mysql知识点。

weixin_56851586的博客 265

Mysql面试知识点详解

Mysql常见面试要点

2301_77129242的博客 2273

八大MySQL知识点

欢迎大家关注Java经验分享,里面大量BATJ面试题,Java技术干货、行业杂谈,也欢迎大家投稿~ Java架构之无码不欢​zhuanlan.zhihu.com 在今年上半年的数据库使用状况调查中,笔者收集了众多国内外知名互联网公司的数据库使用情况,其中,国外GitHub、Airbnb、Yelp、Coursera均在使用MySQL数据库,国内阿里巴巴、去哪儿网、腾讯、魅族、京东的部分关键业务同样使用了MySQL数据库。同时,MySQL也是众多数据库排行榜单的第一名,这个开发者和一线互联网企业都在用的开源

qq_37655695的博客 472

MySQL相关知识点

了解 MySQL 的主要知识点可以帮助你更好地设计、管理和优化数据库。通过掌握这些主要知识点,可以帮助你更好地设计和管理MySQL数据库,提升数据操作的效率和安全性。MySQL 是一个广泛使用的。

Rsun2018的博客 1119

MySQL知识点思维脑图

MySQL知识点思维脑图 脑图

打破沉默的博客 261

MySQL详细知识点总结

MySQL详细知识点总结1 Windows服务2 连接与断开服务器3 数据库操作4 表的操作5 数据操作6 字符集编码7 数据类型(列类型)8 选择类型9 列属性(列约束)10 建表规范11 SELECT12 UNION13 子查询14 连接查询(join)15 导出16 INSERT17 DELETE19 备份与还原20 视图21 事务(transaction)22 锁表23 触发器24 SQL编程25 用户和权限管理26 表维护27 杂项 1 Windows服务 – 启动MySQL net start

qq_39126369的博客 771

MySQL知识点整理汇总

2020年暑假期间我开始接触 MySQL,通过阅读了几本相关书籍以及网上的一些教程,我逐渐了解了 MySQL 的入门级内容。在暑假期间学完 MySQL 的基础知识后,我便将其搁置在一旁,没有再进行进一步的探索。 如今,我想要再次拾起 MySQL 时,却发现其中的一些语法和规则已经差不多遗忘。对 MySQL 进阶的需求,再加上以前学过的每本书籍(或每个教程)的知识侧重点偶尔不同,因此我打算用这篇博客来记录我所学习到的 MySQL 重要知识点(包括基础知识与进阶内容)

weixin_45517168的博客 5702

MYSQL入门知识点总结

入门MYSQL数据库操作的知识点总结,也可做速查表。只需要学会下面的知识点就可以在工作中胜任大部分的工作需求。

你不要担心 453

[MySQL] MySQL重要的知识点总结

MySQL重要知识点总结,方便各位更加了解MySQL知识

YANG_sena的博客 1127
上一篇: springboot如何防止恶意刷新,暴力请求接口
下一篇: 多线程杀手锏---countDownLatch&&CyclicBarrier
凌晨里的无聊人
博客等级 码龄8年 2320粉丝 206原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

凌晨里的无聊人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值