WEB基础--数据库事务与连接池

数据库事务

什么是事务

事务(Transaction,简写为tx):

在数据库中,所谓事务是指一组逻辑操作单元,使数据从一种状态变换到另一种状态。

为确保数据库中数据的一致性,数据的操纵应当是离散的成组的逻辑单元:

当每个逻辑操作单元全部完成时,数据的一致性可以保持,

而当这个单元中的一部分操作失败,整个事务应全部视为错误,所有从起始点以后的操作应全部回退到开始状态。

事务的操作:先定义开始一个事务,然后对数据作修改操作,这时如果提交(commit),这些修改就永久地保存下来,如果回退(rollback),数据库管理系统将放弃您所作的所有修改而回到开始事务时的状态。

事务:一组操作在事务空间,要么都成功,要么都失败;

begin Transaction

insert into t_user

insert into t_accout

commit

事务的ACID属性

原子性(atomicity):指整个事务是不可以分割的工作单元。只有事务中所有的操作执行成功,才算整个事务成功,事务中任何一个SQL语句执行失败,那么已经执行成功的SQL语句也必须撤销,数据库状态应该回到执行事务前的状态。

一致性(consistency):指数据库事务不能破坏关系数据的完整性以及业务逻辑上的一致性。例如对于银行转账事务,不管事务成功还是失败,应该保证事务结束后两个转账账户的存款总额是与转账前一致的。

后面操作失败了,前面的要回滚。保证数据一致。

隔离性(isolation):指的是在并发环境中,当不同的事务同时操纵相同的数据时,每个事务都有各自的完整数据空间。

持久性-持续性(durability):指的是只要事务成功结束它对数据库所做的更新就必须永久保存下来。即使发生系统崩溃,重新启动数据库系统后,数据库还能恢复到事务成功结束时的状态。

事务的提交与回滚

提交:commit: 当整个事务中,所有的逻辑单元都正常执行成功. ---->提交事务.---数据已经提交,不能更改.

回滚:rollback: 当整个事务中,有一个逻辑单元执行失败, ---->回滚事务.

撤销该事务中的所有操作--->恢复到最初的状态.

如何在代码中去处理事务:

1.在JDBC中,事务是默认提交的. 必须先设置事务为手动提交.

connection对象.setAutoCommit(false);//设置事务为手动提交.

2.手动的提交事务.

connection对象.commit();

3.若出现异常必须回滚事务:

不回滚事务,总余额依然是正确的. 若不回滚事务,不会释放数据库资源.

connection对象.rollback();

1.在JDBC在事务是默认提交的,那是在什么时候提交的.

在执行一个DML/DDL操作的时候,就已经提交事务了.

2.针对于CRUD操作. 只有DML操作才有事务,查询操作没有事务.

但是,我们一般会把查询也放在事务里面.--->Spring的事务管理的时候再讲.

3.以后,凡是发现自己编写的代码是正确的,测试也通过,但是就是数据库表中的数据不变----->事务没提交的问题. 等 我们学习MyBatis开始就会遇到这个问题了

4.MySQL中,InnoDB支持外键.支持事务,MyISAM不支持外键,不支持事务.

连接池

什么是连接池

连接池:简单的理解,就是用来装连接对象的容器

官方解释:数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个;释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏。这项技术能明显提高对数据库操作的性能。

连接池里面的连接从哪里来?从数据库来;

连接池概述

在Java中,连接池使用javax.sql.DataSource接口来表示连接池. 这里的DataSource就是连接池。连接池就是DataSource

DataSource是接口,和JDBC一样,是Sun公司开发的一套接口,需要各大厂商实现;

为什么要用连接池

一段Java代码操作数据库,需要取得连接,每次操作数据库都是需要取到一个连接。

例如:新浪首页,查询体育新闻,需要一条sql,查询娱乐新闻,需要一条sql,可能一个首页面,就会存在100多个请求(到数据库查询),那这样浪费多少秒? 浪费1000秒

结论:会浪费很多时间

每次请求都会创建一个connection,因此会浪费资源(内存),当同时1000人访问的时候,那就会占用很多资源,因此很浪费时间和容器操作系统崩溃;所以,我们用连接池来提供资源利用率。

常用的连接池

常用的DataSource的实现有下面多种方式:

DBCP: Spring推荐的(Spring框架已经集成DBCP)

C3P0: Hibernate推荐的(早期)(Hibernate框架已经集成C3P0)

boneCP:淘汰了

Druid :Druid是阿里巴巴开源的"为监控而生的数据库连接池!"。 性能测试略低于HikariCP,但是提供了强大的监控和扩展功能。

Hikari:HikariCP可能是目前业内最快的数据库连接池,而且轻量的连接池. springboot默认集成Hikari

如何使用连接池(以Hikari为例说明)

步骤:
 1. 导入jar包:HikariCP 3.2.0【版本根据需求】
 2. 创建连接池参数HikariConfig对象
 3. 连接池参数对象设置连接参数:
 4. 创建连接池对象,将参数对象传入
 5. 获取连接对象:getConnection();
# driverClassName驱动名【自定义即可,现在可以不写】
driverClassName=com.mysql.jdbc.Driver
# url连接ip和端口、数据库,以及字符集。都是项目中约定好的
url=jdbc:mysql://localhost:3306/数据库名?useUnicode=true&characterEncoding=utf8
# username用户名【自定义即可】
username=root
# password密码【自定义即可】
password=root
#连接池启动时的初始值
initialSize=200
#连接池的最大值
maxActive=500
#连接池的最大空闲数
maxIdle=200

写在最后:本篇博客主要和大家分享一些基础知识,其中的事务与ACID是两个面试题考点,希望大家能够多多记忆。笔者小,中,大厂均有面试经历,每日分享JAVA全栈相关知识,希望能够与大家共同进步。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

13 华三三层链路聚和

13 华三三层链路聚和 AI 解析 华三三层静态路由是指在华三交换机上配置的一种路由方式。它通过在交换机上手动配置路由表,将不同网络之间的数据进行转发。 华三三层静态路由的配置步骤如下: 1. 配置交换机接口的IP地址:在交换机上选择要配…

生产者与消费者 PV操作 与 阻塞队列

文章目录 普通方式 wait 与 notifyAll消费者生产者桌子测试类运行结果 阻塞队列Cook生产者Customer消费者测试类 普通方式 wait 与 notifyAll 消费者 package abc;public class Customer extends Thread{Overridepublic void run() {while (true) {synchronized (Desk.lock) {…

如何让加快OpenHarmony编译速度?

OpenHarmony 有两种编译方式,一种是通过 hb 工具编译,一种是通过 build.sh 脚本编译。本文笔者将提升 build.sh 方式编译速度的方法整理如下: 因为笔者只用 build.sh 脚本编译,没用过 hb 工具,好像下面的选项也可以用于…

可编程 IP 新星 Story Protocol 何以引领链上文艺复兴浪潮?

当前,随着 Web3 行业发展进入全新阶段,与生成式人工智能(AIGC)技术融合正在创造潜力新星项目。也是目前的互联网生态下,任何普通民众都有权利创作高质量的音乐、艺术、散文和视频内容,带来了用户生成内容&a…

鸿蒙开发接口Ability框架:【@ohos.application.StartOptions (StartOptions)】

StartOptions StartOptions模块对系统的基本通信组件进行查询和设置的能力。 说明: 本模块首批接口从API version 9 开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 本模块接口仅可在Stage模型下使用。 开发前请熟悉鸿蒙开发指导文档…

idea使用git不提示账号密码登录,而是输入token问题解决

idea 或者 webstream 等全家桶软件 使用git 推送代码时,不提示账号密码登录,而是输入token问题解决 你的代码仓库是gitlab 然后打开修改代码后推送时,会默认使用gitlab插件,所以提示数据token 解决方式就是把gitlab插件取消使用这…

Verilog复习(一)| 模块的定义

模块(module)是Verilog的基本描述单位,用于描述某个设计的功能或结构,及其与其他模块通信(连接)的外部端口。 Verilog程序由关键词module和endmodule进行定义。 定义模块的步骤: 定义模块的端…

Windows系统下修改文件夹和U盘图标实战

文章目录 知识学习一、修改磁盘图标第一步、新建.INF文件第二步、放置图标第三步、重新插入U盘第四步、隐藏与显示文件知识拓展 二、修改文件夹图标设置图标样式恢复图标样式 在日常办公中使用的是windows系统,系统默认的文件图标都一样,不利于分类整理&…

MQTT服务搭建及python使用示例

1、MQTT协议 1.1、MQTT介绍 MQTT(Message Queuing Telemetry Transport)是一种轻量级的、基于发布/订阅模式的通信协议,通常用于物联网设备之间的通讯。它具有低带宽、低功耗和开放性等特点,适合在网络带宽有限或者网络连接不稳定…

利用智能私信软件,快速拓展潜在客户群体

在数字化营销的浪潮中,企业如何快速而有效地触及并吸引潜在客户,已成为一个不可忽视的挑战。随着人工智能技术的不断进步,智能私信软件作为一种新型工具,正逐渐改变着企业的市场拓展方式。本文将探讨如何通过这类软件,…

复现NerfingMVS(更新中)

按以下代码一步步操作 conda create -n NerfingMVS python3.7 conda activate NerfingMVS conda install pytorch1.7.1 torchvision0.8.2 torchaudio0.7.2 -c pytorch pip install -r requirements.txthttps://colmap.github.io/install.html Linux 中 建议的依赖&#xff1…

AI边缘计算盒子优势有哪些?如何实现低延迟处理?

AI边缘计算盒子作为一种集成人工智能技术的边缘计算设备,其优势主要体现在以下几个方面,万物纵横为您详细介绍: 1. 低延迟处理 AI边缘计算盒子靠近数据产生源头,能够即时处理数据,大幅减少数据传输至云端的时间&#…

深入解析算法效率核心:时间与空间复杂度概览及优化策略

算法复杂度,即时间复杂度与空间复杂度,衡量算法运行时资源消耗。时间复杂度反映执行时间随数据规模增长的关系,空间复杂度表明额外内存需求。优化策略,如选择合适数据结构、算法改进、循环展开等,对于提升程序效率、减…

从抖音阳哥的经验看,选品师项目是否值得你投入?

在抖音这个短视频平台上,无数的创作者分享着他们的知识和经验,其中阳哥作为一个备受关注的博主,他的每一次分享都能引起广大网友的热烈讨论。最近,阳哥分享了一个名为“选品师”的项目,让许多对电商和抖音运营感兴趣的…

RK3576 Android平台SD启动

RK3576 Android平台SD启动 要求 1,Android14及以上版本;2,SD卡制作工具:瑞芯微创建升级磁盘工具V1.78及以上版本;3,SD卡容量8G-32G之间; 软件修改 1,Android部分 修改PRODUCT_BO…

Android 的 Timer 和 TimerTask

Timer 简介(来自Gemini) Timer 是 Java 中用于创建定时任务的类。它位于 java.util 包中。可以使用 Timer 来安排一次性或定期执行的任务。 每个 Timer 对象都对应一个后台线程。此线程负责从任务队列中检索任务并按计划执行它们。 使用 Timer 要使用 Timer,首先…

3D 渲染至少需要多少显存?显存真得越大越好吗?

无论是电影制作、游戏开发还是建筑效果图设计,在今天的计算机图形学领域,都需要强大的图形处理能力。而显存(VRAM)作为支持这一切的重要组成部分,对于高效3D渲染同样至关重要。在本文中,我们将一起探讨显存…

Cmake-learning

可以把cmake看成一款自动生成 Makefile的工具,所以编译流程就变成了:cmake—>make–>可执行文件 在哪个目录执行cmake txt位置 就会在哪个目录生成构造文件和可执行文件 project(HELLO): 非强制,指明项目名称 add_executable(he…

【算法】滑动窗口——水果成篮

本篇博客是我对“水果成篮”这道题由暴力解法到滑动窗口思路的具体思路,有需要借鉴即可。 目录 1.题目2.暴力求解3.暴力优化3.1每次right不用回退3.2有些left长度一定不如前一个,不用走,left不回退 4.滑动窗口算法5.总结 1.题目 题目链接&am…

怎么用AI软件设计字体

一 工具准备 软件:Adobe illustrator 如下网盘自取 链接:https://pan.baidu.com/s/1hlImpN4QlsSkOLLUxINOGA 提取码:love 安装的时候看不全界面,多按几下tab键就能看到按钮。 直接找一款喜欢的字体修改,字体包如下…
最新文章