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.mzph.cn/bicheng/11398.shtml

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

相关文章

elasticsearch搭建教程

主要参看这里就行,需要特别注意其中报错的解决方案:搭建elasticsearch 单机节点里,按照上述教程搭建只能开放本地访问,如果需要其他机器访问,需要在elasticsearch.yml里新增几个配置: node.name: node-1 network.host…

APP反抓包 - 服务端证书验证

案例引入: app:泡泡聊天 版本:v1.7.4 发送登录请求,抓包发现提示:403 Forbidden 这里就是使用了服务端证书校验,因为charles没有安装证书,所以到达服务器的响应没有通过验证,返回异常。 美之图: 一,校验逻辑 在安卓开发时,在客户端预设证书(p12/bks),客户端…

flink cdc,读取datetime类型

:flink cdc,读取datetime类型,全都变成了时间戳 Flink CDC读取MySQL的datetime类型时会转换为时间戳的问题,可以通过在Flink CDC任务中添加相应的转换器来解决。具体来说,可以在MySQL数据源的debezium.source.converter配置项中指…

AI仿站源码教程

AI仿站源码教程 随着AI技术的不断发展,仿站技术已经越来越成熟,通过AI一键仿站,开发者们可以更快速、更高效地搭建网站。传统的前端开发过程中,需要大量的手工编码和设计,而AI仿站技术可以通过截图或视频,…

智慧公厕:数据驱动的公共厕所智慧化管理

公共厕所作为城市基础设施的重要组成部分,对于城市居民的生活质量和城市形象有着不可忽视的影响。然而,传统的公共厕所管理模式存在诸多问题,如设施老化、卫生状况不佳等,严重限制了公众对于公共厕所的使用体验。随着大数据和智能…

计算机毕业设计系列~~~基于SSM的宠物销售网站

目录 一、项目介绍 二、开题报告 三、项目截图 一、项目介绍 本项目是一款基于SSM的宠物销售网站,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的 Java 学习者。 1. 包含:项目源码、项目文档、数据库脚本、软件工具等所有资料 2. …

【笔记】从零开始做一个男性人体的流程/躯干篇(补充)

1.做手臂和腿部都记着【关键节点】的重要性

day5.12 leetcode80 删除有序数组重复项

删除有序数组重复项 给你一个有序数组 nums ,请你** 原地** 删除重复出现的元素,使得出现次数超过两次的元素只出现两次 ,返回删除后数组的新长度。 不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间…

2024年得物搬砖项目:轻松上手的高利润副业选择

越来越多的人都开始将目光转向互联网,无论是商家还是消费者,都已经习惯网上卖货和购买 其实,其主要原因还是因为如今的生活节奏快,现在的消费主力军转移到了90、00后身上。他们往往忙于工作或者是家庭,无暇去逛商场&a…

webpack压缩css代码示例:压缩css

css-loader用来解析.css文件,将之转换成commjs模块 style-loader用来将css注入到dom中 尽管css-loader和style-loader提供将css导入到js并注入到dom的功能,但webpack默认并不负责压缩css, css-minimizer-webpack-plugin只处理分离出来的CSS文…

jQuery-2.鼠标焦点事件、节点操作、遍历元素、效果

鼠标事件 鼠标事件是当用户在文档上移动或单击鼠标时而产生的事件,常用的鼠标事件: 方法 描述 执行时机 click() 触发或将函数绑定到指定元素的click事件 单击鼠标时 mouseover() 触发或将函数绑定到指定元素的mouse over事件 鼠标移过时 mous…

《一“企”谈》∣企企通走进『鹏辉能源』,探索百亿储能上市企业如何实现供应链数字化转型

随着运营模式的升级和市场竞争的加剧,采购数字化已成为企业提升竞争力的关键。通过整合人工智能、大数据、云计算和物联网等先进技术,采购流程正逐步实现智能化、协同化和绿色化,大幅提升采购效率和决策质量。 广州鹏辉能源科技股份有限公司&…

mysql与idea连接

1、安装mysql,确保电脑中有sql数据库; 2、在‘服务’中开启mysql; 3、将mysql-connector-java-8.0.16.jar包放入web/WEB-INF/lib并配置; mysql-connector-java 5及以下,配置的是com.mysql.jdbc.Driver驱动mysql-connector-java 6…

webpack如何自定义一个loader

我们在使用脚手架的搭建项目的时候往往都会帮我们配置好所需的loader,接下来讲一下我们要如何自己写一个loader应用到项目中(完整代码在最后) 1. 首先搭建一个项目并找到webpack配置文件(webpack.config.js) 在modul…

免费PDF批量加密工具

最近在找PDF批量加密的软件来着,发现很多都是需要收费的,当然如果平时工作需要用的比较多,支持一下还是ok的,但是多数人还是偶尔用一下所以没有必要买。 工作用的话,一般企业文件、个人隐私资料、重要合同...所有重要文…

RK3568外置RTC芯片PCF8563T(或替代型号)实验

RK3568 外接 PCF8563 RTC Chapter0 RK3568 外接 PCF8563 RTC1 menuconfig中打开pcf8563驱动2 设备树DTS3 修改驱动 Chapter1 【正点原子Linux连载】第三十一章 外置RTC芯片AT8563T实验 摘自【正点原子】ATK-DLRK3568嵌入式Linux驱动开发指南第三十一章 外置RTC芯片AT8563T实验3…

蓝桥杯备战20.有奖问答_动态规划

P9230 [蓝桥杯 2023 省 A] 填空问题 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) #include<bits/stdc.h> using namespace std; #define endl \n #define int long long const int N 2e510,M 1e310; int f[M][M]; signed main( {std::ios::sync_with_stdio(0),cin.…

京牌背户车现象及其影响 浅谈解决方案!

作为一名在汽车行业拥有多年经验的专家&#xff0c;小编沐沐曾亲自经历过北京车牌租赁市场的混乱局面。在这个领域&#xff0c;不仅见证了无数政策变动和市场风潮&#xff0c;还亲身参与了诸多关于京牌背户车的研究与讨论。 今天&#xff0c;盛昂京牌小编沐沐想通过一些真实的案…

炫酷渐变官网源码

炫酷渐变官网源码 效果图部分代码领取源码下期更新预报 效果图 部分代码 <!DOCTYPE html> <html lang"en"><head><meta charset"utf-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><title…

linux centos 安装Anaconda3-5.2.0

目录 下载Anaconda3-5.2.0 安装Anaconda3-5.2.0 配置.bashrc 配置 /etc/profile 查看conda是否成功&#xff0c;使用查看conda --version命令 下载Anaconda3-5.2.0 wget https://repo.continuum.io/archive/Anaconda3-5.2.0-Linux-x86_64.sh 安装Anaconda3-5.2.0 bash…