MySQL (8)

news2025/8/16 17:09:32

MySQL (8)

前言 :

知识点回顾 : 上文我们已经了解到了我们的事务 , 知道了事务是将诺干个独立的操作打包成一个整体 , 如 1 + 1 此时想将这个结果写到纸上 ,那么 1 + 1 计算 可以看做一个操作, 将答案 2 写 到纸上 也是一个操作 , 事务就是将这两个操作合并成一个整体, 此时如果我们想要只计算出 1 + 1 = 2 ,不写道纸上,这是不行的 , 必须完成整个过程 算 与 写 这就是事务的原子性 。

另外 : 我们还了解到数据库并发执行会带来 的一些问题 ,如 脏读 , 不可重复读问题 幻读 等问题 。

脏读 :

简单的例子 : 张三 通过 update user set math = 100 where name = '李四' ; , 将李四的数学成绩改为了 100 ,

此时李四通过 select * from user where name = '李四' 获取到了他的成绩 ,发现数学成绩为 100 , 就将整个消息告诉了同学 你看我数学考了一百呢

厉不厉害 , 但是过了一会 张三 发现 看错了 将 10 看成了 100 , 那么 就通过 update user set math = 100 where name = '李四' 改了 回来, 此时 李四 查询的数据就为脏数据 , 出现这种情况就称为脏读

将 张三 和 李四 就可以看作事务 A 和 B 就能得出结论 : 事务A在对某个数据进行修改的同时,事务B 去 读取了 这个 数据。此时,事务B 读到的很可能是一个“脏数据”(这个数据是一个临时的结果,而不是最终的结果)


不可重复读 : 在同一个事务中,同一个查询在不同的时间得到了不同的结果。例如事务在 T1 读取到了某一行数据,在 T2 时间重新读取这一行时候,这一行的数据已经发生修改,所以再次读取时得到了一个和 T1 查询时不同的结果。


简单来说 张山通过 一个 SQL 如 : select * from user where id = 2 去查询数据, 一开始通过sql 拿到了数据 假设数据中有一个字段 为 name , 此时拿到 一个name 为 张三 , 在此时又有一个人 李四, 通过 update user set name = '李四' where id = 2 ,此时 李四将整个信息改变了, 当 张三 在次通过 select * from user where id = 2 查询到的信息与之前不一样了


幻读 : 同一个查询在不同时间得到了不同的结果,这就是事务中的幻读问题。例如,一个 SELECT 被执行了两次,但是第二次返回了第一次没有返回的一行,那么这一行就是一个“幻像”行。

简单来说 : 张山 通过 select * from user; 发现 user 表里面有一条数据, 此时 李四 通过 insert into user values() 又往 user 表里面插入了一条数据, 此时 张三又 通过 select * from user 查询会发现多了一条, 那么此时就成为 幻读问题 。


补充 :

这里再补充一下 : 我们的MySQL 中有 4 种事务隔离级别:读未提交(存在脏读/不可重复读/幻读问题)、读已提交(存在不可重复读/幻读问题)、可重复读(存在幻读问题)和序列化,其中可重复读是 MySQL 默认的事务隔离级别。脏读是读到了其他事务未提交的数据,不可重复读是读到了其他事务修改的数据,而幻读则是读取到了其他事务新增或删除的“幻像”行数据

复习完 ,下面就进入到我们的 JDBC 学习 :

JDBC

我们之前再学习MySQL 的时候一直是再黑框框内敲的SQL, 但是再实际开发的时候SQL是很少手动输入的,绝大多数的SQL 都是通过代码自动执行的, 这里就需要通过其他编程语言来操作数据库服务器.

在这里插入图片描述

这里我们就可以通过 MySQL 提供的 API 来实现我们的客户端 .

扩展 : MySQL 本来提供的 API 是 C语言, 但考虑到 MySQL 使用的非常广泛, 也就提供了其他语言版本的API , 另外 其他语言的API 本质上还是使用C语言那一套,这里会涉及到跨语言调用的操作.


小问题 :

市面上有很多数据库 如 Oracle , SQLServer ,SQLite等数据 都会提供自己的API, 那么这些API是否相同还是各自拥有一套体系呢?

答案 : 这里是不一样的 , 这里不同的数据库是不同的人开发的, 每个人就会以自己的思路去开发 , 所以说这些API 会一样吗 .


引出 JDBC

小问题看完, 有没有想过 , 这么多数据库 每个都有自己一套的API , 假设我们掌握 了MySQL的 API, 后面到公司发现公司使用的数据库是 Oracle, 那么我们还需要去掌握 Oracle 的API ,如果后面跳槽 公司使用的 又是其他的 数据库, 那么还需要去掌握其他的API,那么是不是就会显的力不从心 ,我靠我咋到哪里都要学呀, 此时我们是不是就渴望能有人能站起来,将这些API 统一成一套,制定成标准 此时我们就学一套即可 .

在我们的java 中就有人站了出来,他就是我们接下来要学习的 JDBC , 为啥是 JDBC呢 因为我们的 JDBC 这一套 API 已经成了java标准库的一部分, 由于java的影响力很大,以自身作为标准, 此时各种数据库厂商,都提供了能供使用 JDBC 相关的驱动包 (驱动包 :相当于 API的具体实现 , JDBC 是约定了API 都有啥,该咋用)

有了JDBC 那么我们就可以只掌握这一套API , 就可以去操作市面上的数据库了(只要他提供给java驱动包) .


知道了由来 这里稍微看看概念 :

JDBC,即Java Database Connectivity,java数据库连接。是一种用于执行SQL语句的Java API,它是Java中的数据库连接规范。这个API由 java.sql.,javax.sql. 包中的一些类和接口组成,它为Java开发人员操作数据库提供了一个标准的API,可以为多种关系数据库提供统一访问。

概念看完下面我们来学习一下JDBC的使用

JDBC的使用


1. 安装对应数据库的驱动包

之前说过 JDBC是将各种数据库的API统一成一个标准,我们只需要掌握JDBC的``API即可,但是有一个前提是需要让JDBC`拥有数据库厂商提供的驱动包, 所以我们想要使用JDBC那么就需要去安装我们数据库对应的驱动包 .

在这里插入图片描述

这里我们需要操作MySQL 就需要安装 MySQL的驱动包,在哪里下载呢 ? 我们直接到官网下载即可 。

题外话 : 因为MySQL被 Oracle 收购了,所以我们需要到Oracle的官网进行下载,但是因为Oracle的官网需要注册啥的一堆,这里就不建议去Oracle的官网进行下载 , 这里就可以去我们的中央仓库进行下载. 这里中央仓库就相当于一个应用商店, 里面包含了各个厂商提供的库和组件。

这里提供地址可以保存一下 ,后面会常用 : Maven Repository: Search/Browse/Explore (mvnrepository.com)

点进这个网站 :

在这里插入图片描述

因为我们需要MySQL 的驱动包,这里就直接搜索MySQL即可

在这里插入图片描述

点击第一个 :

在这里插入图片描述

这里我们演示 5.1.49这个版本 :

在这里插入图片描述

下载完我们的 驱动包, 可以看到 他是一个 .jar 格式的压缩包 他是一个java格式的压缩包 类似于 .rar .zip , 这里我们可以通过解压缩的工具看看

在这里插入图片描述

有了 .jar 包 我们就可以导入 idea中 , 使用即可 。


打开我们的 idea

在这里插入图片描述


下面我们就可以来编写我们的数据库代码 :

1. 创建数据源操作


图一 :

在这里插入图片描述


图二 :

在这里插入图片描述


图三 :

在这里插入图片描述


图四 :
在这里插入图片描述


到此我们的第一步就完成了 , 可以看到我们这里只是描述了服务器在哪里,并没有真正的进行访问 , 下面的连接操作菜是真正的开始通过网络进行通信。

2.与数据库建立网络连接

在这里插入图片描述

3.构造SQL 语句

在这里插入图片描述

4. 执行SQL + 5.资源回收

在这里插入图片描述

另外 :

我们见到过的池有 字符串常量池 , 和刚刚看到的数据库连接池 , 后面我们还能见到 进程池 , 线程池, 内存池,数据库连接池 等

那么 就来简单的了解一下 池 pool : 假设 : 我们是一个妹子 长的好看, 又有才华 追求者非常多 , 此时我们同一时刻,只能谈一个对象, 此时我们想要换一个对象 ,此时成本就比较高 , 因为需要和新的小哥哥重新培养感情 , 此时就比较麻烦, 俗话说日久生情吗 , 此时我们就想到了一个办法 , 就是 与 A 谈对象的时候和B搞暧昧(这里本质上就在培养感情),一旦我们分手了, 那么B是不是就可以立刻上位 ,此时是不是就大大的提高了效率 ,此时B 就称为 备胎 。

这里 只有一个B , 假设我们除 了B 还有 C D E F G 等搞暧昧 ,此时 C D E F G 是不是就构成了一个备胎池 , 这样我们是不是一天换一个都有可能,此时是不是就非常高效 。

注意 : 这里的例子生活上是不提倡的, 虽然生活上不提倡, 但计算里面确非常流行 , 这里我们的数据库连接池就是这样 , 我们创建连接池的同时可以准备一批新的连接 ,此时就不是建立一个连接而是建立好几个连接,这些连接只是暂时未用放在池子里面,随时都可以拿出来使用 。如果我们需要很多连接就可以直接从池子里面拿出来进行连接使用, 另外我们释放的连接也是可以放到池子里面。


改造代码 :

下面继续 : 上面我们的插入操作, 其实不太还好,因为我们将数据写死了,insert into student values(1,'张三')这里就将我们插入的数据写死了 , 按道理是不是应该让用户来自己添加数据,我们根据用户的数据来进行插入,所以这里的代码就有些许不合理,下面我们就来改造一下。

图一 :
在这里插入图片描述

图二 :

在这里插入图片描述

这里我们的增删查 , 都是返回影响的行数 ,最后我们来看一下 我们的查找操作 也是重点(我们往后大部分都在查找数据) , 这里我们就来学习一下 。

查找操作 :

其实 也不要太慌, 这里查找操作之不过多了一步就是遍历结果集合

图一 :
在这里插入图片描述

图二 :

在这里插入图片描述

最后我们来写一个通过 id 来查询结果

在这里插入图片描述

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

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

相关文章

酪氨酸激酶、自噬等抗肿瘤抑制剂

TPCA-1 TPCA-1 是一种有效,选择性的 IKK-2 抑制剂,IC50 值为 17.9 nM。TPCA-1 也是 STAT3 磷酸化、DNA 结合以及反式激活的有效抑制剂。 表皮生长因子受体 (EGFR) 是治疗 EGFR 突变型非小细胞肺癌 (NSCLC) 的有效靶点。然而,一些 EGFR 突变表…

独家,阿里技术人限产的MySQL高级笔记及面试宝典,简直开挂

又逢“金九银十”,年轻的毕业生们满怀希望与忐忑,去寻找、竞争一个工作机会。已经在职的开发同学,也想通过社会招聘或者内推的时机争取到更好的待遇、更大的平台。 然而,面试人群众多,技术市场却相对冷淡,…

【Linux】深刻理解进程概念、进程状态、进程常用指令和系统调用

文章目录1、什么是进程?1.1 PCB的概念1.2 程序加载到内存2、初识进程2.1 进程相关的指令2.2 进程相关的系统调用3、进程状态3.1 运行、阻塞和挂起状态3.2 具体的Linux进程状态3.3 僵尸进程3.4 孤儿进程1、什么是进程? 从程序说起,我们写好的程序在经过编译链接最…

【cmake】cmake应用:安装和打包

【cmake】cmake应用:安装和打包 在本系列前序的文章中已经介绍了CMake很多内容,在CMake应用:CMakeLists.txt完全指南一文中简略介绍了安装和打包,本文会更加深入地介绍CMake的安装和打包功能。【cmake】cmake应用:安装…

分享500道我在“金九银十”收集的Java架构面试题

前段时间,字节跳动官方就发布消息称在武汉扩招至5000人,放出了2000个岗位名额。可见,互联网大厂岗位需求仍然奇缺。 在已经过去的“金九银十”,我有许多朋友就已经成功的跳槽,有的还在家等候下一步的面试通知。我托朋…

【计算机扫盲】计算机的基础操作你知多少?

计算机的高级操作 控制面板 ​ 控制面板(control panel)是Windows图形用户界面的一部分,可通过开始菜单访问。它允许用户查看并操作基本的系统设置,比如添加/删除软件,控制用户帐户,更改辅助功能选项。 …

CAS号:60535-02-6,二肽Met-Trp

血管紧张素-1转换酶(ACE)非竞争性抑制剂IC₅₀9.8 μM。 编号: 154290中文名称: 二肽Met-Trp英文名: Met-TrpCAS号: 60535-02-6单字母: H2N-MW-OH三字母: H2N-Met-Trp-COOH氨基酸个数: 2分子式: C16H21N3O3S1平均分子量: 335.42精确分子量: 335.13等电点(PI): 6.11pH7.0时的净电…

服装连锁店管理系统 服装连锁店如何高效管理 服装连锁店管理怎么走捷径

服装连锁店管理繁杂,难以把控,好在有“捷径”可走。 开服装连锁店的老板,来看看这是不是你的“头痛”日常: 新品上市,加盟店全上了,但无法迅速判断出畅销品和滞销品,搜集数据速度慢,…

Coursera自动驾驶1.4——车辆建模

文章目录一、运动学建模(二维)1.坐标系转换2.两轮机器人运动学建模3.两轮自行车运动学建模(1)后轴参考点(2)前轴参考点(3)重心参考点二、基本动力学模型(2D)1…

中台和微服务有什么区别?

中台不就是微服务吗?这种说法实际上混淆了中台与微服务的定义,要说清楚这个问题,就要先了解,什么是中台?什么是微服务?中台和微服务之间有什么样的关系? 什么是中台 来自阿里官方的定义&#x…

【强化学习】TensorFlow2实现DQN(处理CartPole问题)

文章目录1. 情景介绍2. DQN(Deep Q Network)核心思路:3. DQN算法流程4. 代码实现以及注释5. 实验结果文章阅读预备知识:Q Learning算法的基本流程、TensorFlow2多层感知机的实现。1. 情景介绍 CartPole问题:黑色小车上…

【并发编程五】c++进程通信——信号量(semaphore)

【并发编程五】c进程通信——信号量(semaphore)一、概述二、信号量三、原理四、过程1、进程A过程2、进程B过程五、demo1、进程A2、进程B六、输出七、windows api介绍1. 创建信号量 CreateSemaphore()2. 打开信号量 OpenSemaphore()3. 等待 WaitForSingle…

一种基于IO口的模拟串口(LOG)实现方法

一、使用背景 当MCU的串口不够用时,可以通过IO模拟的方式将任意一个具有输出功能的管脚配置为串口输出,从而方便开发和调试。 二、实现原理 通过IO口模拟串口发送波形,配置对应的波特率等信息,然后映射printf函数,从…

基于粒子群优化算法的冷热电联供型综合能源系统运行优化(Matlab代码实现)

👨‍🎓个人主页:研学社的博客 💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜…

redis 支持的数据类型

Redis 数据库支持五种数据类型。 字符串(string) 哈希(hash) 列表(list) 集合(set) 有序集合(sorted set) 位图 ( Bitmaps ) 基数统计 ( HyperLogLogs ) 字…

Vue3.2 + Element-Plus 二次封装 el-table(Pro版)

前言 📖 ProTable 组件目前已是 2.0版本🌈,在 1.0版本 中大家提出的问题与功能优化,目前已经得到优化和解决。 😀 欢迎大家在使用过程中发现任何问题或更好的想法,都可以在下方评论区留言,或者我…

【计算机网络】局域网体系结构、以太网Ethernet详解

注:最后有面试挑战,看看自己掌握了吗 文章目录局域网LAN决定局域网的要素网络拓扑传输介质局域网的分类以太网令牌环网FDDI网----Fiber Distributed Data InterfaceATM网---Asynchronous Transfer Mode无线局域网WLAN----Wireless Local Area NetworkMAC…

Red Hat Enterprise Linux (RHEL) 9 更新了哪些新特性?

文章目录1. 前言2. 软件3. 支持的硬件架构4. GNOME更新到40版5. 安全和身份6. 构建容器的通用基础镜像7. 改进了用于管理 RHEL 9 的 Cockpit Web 控制台1. 前言 体验一下最新的rhel 9.0 是什么感觉。它会飞吗? Red Hat Enterprise Linux (RHEL) 9现已普遍可用 (GA…

吃柿子的禁忌靠谱吗?

图片来源:pixabay 秋冬是柿子上市的季节,虽然柿子并不是苹果、香蕉这样的大宗水果,但是秋天不吃个柿子,冬天不吃个柿饼,总觉得少了点什么。 关于吃柿子有很多禁忌,比如说柿子不能与螃蟹同时吃,柿…

​怎么保留硬盘数据合并分区 ,如何才能合并且不丢失数据

硬盘分区合并是比较常见的操作,​怎么保留硬盘数据合并分区,还是具有一定的难度。因为在Windows操作系统中,用户可以通过磁盘管理来实现硬盘分区合并,但是要删除该磁盘分区右侧的相邻分区,但是对于部分不懂计算机的用户…