day13_Mysql事务与数据库连接池学习笔记

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: day13_Mysql事务与数据库连接池学习笔记 一、Mysql的事务    事务: 事务指逻辑上的一组操作,组成这组操作的各个单元,要么全部成功,要么全部不成功(数据回滚)。

day13_Mysql事务与数据库连接池学习笔记

 
 
一、Mysql的事务 
  事务:
        事务指逻辑上的一组操作,组成这组操作的各个单元,要么全部成功,要么全部不成功(数据回滚)。 
        例如:A给B转帐,对应于如下两条sql语句 :
            update account set money=money-100 where name='a';
            update account set money=money+100 where name='b';
            
    、Mysql中的事务
        a、mysql引擎是支持事务的。
        b、mysql语句默认是自动提交事务。每条语句都处在单独的事务中。
        c、手动控制事务(命令行):
            开启事务:start transaction; 或者 begin;
            提交事务:commit;
            回滚事务:rollback;
        
    2、JDBC如何控制事务?
        
    3、事务的特性(ACID)(面试题)
        原子性(Atomicity):指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。多条语句变成一个不可分割的整体。
        一致性(Consistency):事务必须使数据库从一个一致性状态变换到另外一个一致性状态。转账前和转账后的总金额不变。
        隔离性(Isolation):事务的隔离性是多个用户并发访问数据库时,数据库为每一个用户开启的事务,不能被其他事务的操作数据所干扰,多个并发事务之间要相互隔离。(多线程)
        持久性(Durability):指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来即使数据库发生故障也不应该对其有任何影响。
  
    4、事务的隔离级别
        赃读:指一个事务读取了另一个事务未提交的数据读到的是假的数据。
        不可重复读:在一个事务内读取表中的某一行数据,多次读取的结果不同。一个事务读取到了另一个事务提交后的数据。(update) 每次读到的结果不一样。
        虚读(幻读):是指在一个事务内读取到了别的事务插入的数据,导致前后读取的结果不一致。(insert) 读到的数据变多了。
        
        数据库通过设置事务的隔离级别防止以上情况的发生:
            1、READ UNCOMMITTED: 赃读、不可重复读、虚读都有可能发生。 read uncommitted
            2、READ COMMITTED: 避免赃读。不可重复读、虚读都有可能发生。(oracle默认的) read committed
            4、REPEATABLE READ: 避免赃读、不可重复读。虚读有可能发生。(mysql默认的) repeatable read
            8、SERIALIZABLE: 避免赃读、不可重复读、虚读。 serializable
        级别越高,性能越低,数据越安全。实际开发是以级别2、4为主,其余的用程序控制。 
        mysql中:
            查看当前的事务隔离级别:SELECT @@TX_ISOLATION;
            更改当前的事务隔离级别:SET TRANSACTION ISOLATION LEVEL 四个级别之一。
                特别注意:设置隔离级别必须在开启事务之前。      
       
  5、JDBC控制事务的隔离级别
        Connection接口:
      
        JDBC代码中设置隔离级别:必须在开启事务之前。
      
          注意:mysql的默认级别,若是操作mysql数据库,可以不用设置,默认设置就是这个。

 
 
二、数据库连接池
  1、连接池原理:(面试)
        数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个;
        通过释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏。
        这项技术能明显提高对数据库操作的性能。
        目的:解决建立数据库连接耗费资源和时间很多的问题,提高性能。
   
     
  2、编写标准的数据源
        自定义的数据库连接池要实现javax.sql.DataSource接口,一般都叫数据源。
        实现DataSource接口,并实现连接池功能的步骤:
            1. 在MyDataSource构造函数中批量创建与数据库的连接,并把创建的连接加入LinkedList对象中。  
            2. 实现getConnection方法,让getConnection方法每次调用时,从LinkedList中取一个Connection返回给用户。  
            3. 当用户使用完Connection,调用Connection.close()方法时,Collection对象应保证将自己返回到LinkedList中,而不要把conn还给数据库。 
        Collection保证将自己返回到LinkedList中是此处编程的难点。  
      
  3、编写数据源时遇到的问题及解决办法
      
    a、装饰设计模式:使用频率很高
            目的:改写已存在的类的某个方法或某些方法,装饰设计模式(包装设计模式)
            口诀:
            1、编写一个类,实现与被包装类相同的接口。(具备相同的行为)
            2、定义一个被包装类类型的变量,即引用,用于接收被包装的对象。
            3、定义构造方法,把被包装类的对象注入,给被包装类变量赋值。
            4、对于不需要改写的方法,调用原有的方法。
            5、对于需要改写的方法,写自己的代码。
            // 该类本身就是一个装饰类,对原类的具体装饰饰在该类中实现。(但是需要写很多多余的代码)
      
        b、默认适配器模式:是装饰设计模式的一个变体 
            包装适配器类:
      
            包装适配器实现类:
      
  4、常用的数据源配置(日后都使用数据源,所以一定要配置一下)
        4.1、DBCP(数据源开源框架)
            DBCP:Apache推出的 DataBase Connection Pool 数据连接池(数据源)
            使用步骤:
                > 添加jar包:commons-dbcp-1.4.jar 和 commons-pool-1.5.6.jar 和 mysql-connector-java-5.0.8-bin.jar
                > 添加属性资源文件(等待时间,最大连接数等配置信息)
                > 编写数据源操作的工具类
        
            数据源操作的工具类:
        
            测试类:
        
    4.2、C3P0
            使用步骤:
            1、添加jar包
                这次我们使用的是Java Project项目,在该项目下新建lib文件夹,添加jar包:c3p0-0.9.1.2.jar,再添加至构建路径。 
            2、编写配置文件
                c3p0-config.xml,放在classpath中,或classes目录中
        
        3、编写操作数据源的工具类
        
       4、编写测试类
        
         注意:测试类类名TsetCRUD、TestDao、TestJDBC,名字含义都一样。
    5、用JavaWeb服务器管理数据源(连接池):比如用Tomcat,此时不需要导入jar包
        开发JavaWeb应用,必须使用一个JavaWeb服务器,JavaWeb服务器都内置数据源。
        Tomcat:(DBCP)
        数据源只需要配置服务器即可。
        配置数据源的步骤:
            1、拷贝数据库连接的jar包mysql-connector-java-5.0.8-bin.jar到tomcat的lib目录下。
            2、配置数据源XML文件:
                a)如果把配置信息写在tomcat下的conf目录的context.xml中,可以配置多个不同的数据源,那么所有应用都能使用此数据源。
                b)如果是在当前应用的META-INF中创建context.xml,编写数据源,那么只有当前应用可以使用此数据源。
            演示b)
            context.xml文件
        
           3、如何使用连接池呢?如下:
              在xxx.jsp下加入:<% ...... %>
        
          JNDI:java nameing directory interface 
          有多个<Resource/>,就有多个name,多个name就变成了JNDI。
          JNDI容器就是一个Map。
            
二、自定义JDBC框架(练技术)
    1、数据库元信息的获取(很简单、很无聊、很重要)
        a、元信息:(Meta Data)指数据库或表等的定义信息。
    2、自定义JDBC框架
        反射:
        策略设计模式:

 

 

我的GitHub地址: https://github.com/heizemingjun
我的博客园地址: http://www.cnblogs.com/chenmingjun
我的蚂蚁笔记博客地址: http://blog.leanote.com/chenmingjun
Copyright ©2018 黑泽明军
【转载文章务必保留出处和署名,谢谢!】
相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
本文聚焦 MySQL 集群架构中的负载均衡算法,阐述其重要性。详细介绍轮询、加权轮询、最少连接、加权最少连接、随机、源地址哈希等常用算法,分析各自优缺点及适用场景。并提供 Java 语言代码实现示例,助力直观理解。文章结构清晰,语言通俗易懂,对理解和应用负载均衡算法具有实用价值和参考价值。
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
【YashanDB知识库】原生mysql驱动配置连接崖山数据库
【YashanDB知识库】原生mysql驱动配置连接崖山数据库
【YashanDB知识库】原生mysql驱动配置连接崖山数据库
大数据新视界 --面向数据分析师的大数据大厂之 MySQL 基础秘籍:轻松创建数据库与表,踏入大数据殿堂
本文详细介绍了在 MySQL 中创建数据库和表的方法。包括安装 MySQL、用命令行和图形化工具创建数据库、选择数据库、创建表(含数据类型介绍与选择建议、案例分析、最佳实践与注意事项)以及查看数据库和表的内容。文章专业、严谨且具可操作性,对数据管理有实际帮助。
大数据新视界 --面向数据分析师的大数据大厂之 MySQL 基础秘籍:轻松创建数据库与表,踏入大数据殿堂
docker拉取MySQL后数据库连接失败解决方案
通过以上方法,可以解决Docker中拉取MySQL镜像后数据库连接失败的常见问题。关键步骤包括确保容器正确启动、配置正确的环境变量、合理设置网络和权限,以及检查主机防火墙设置等。通过逐步排查,可以快速定位并解决连接问题,确保MySQL服务的正常使用。
374 82
大数据新视界--大数据大厂之MySQL数据库课程设计:MySQL集群架构负载均衡故障排除与解决方案
本文深入探讨 MySQL 集群架构负载均衡的常见故障及排除方法。涵盖请求分配不均、节点无法响应、负载均衡器故障等现象,介绍多种负载均衡算法及故障排除步骤,包括检查负载均衡器状态、调整算法、诊断修复节点故障等。还阐述了预防措施与确保系统稳定性的方法,如定期监控维护、备份恢复策略、团队协作与知识管理等。为确保 MySQL 数据库系统高可用性提供全面指导。
大数据新视界--大数据大厂之MySQL数据库课程设计:MySQL 数据库 SQL 语句调优方法详解(2-1)
本文深入介绍 MySQL 数据库 SQL 语句调优方法。涵盖分析查询执行计划,如使用 EXPLAIN 命令及理解关键指标;优化查询语句结构,包括避免子查询、减少函数使用、合理用索引列及避免 “OR”。还介绍了索引类型知识,如 B 树索引、哈希索引等。结合与 MySQL 数据库课程设计相关文章,强调 SQL 语句调优重要性。为提升数据库性能提供实用方法,适合数据库管理员和开发人员。
大数据新视界--大数据大厂之MySQL 数据库课程设计:MySQL 数据库 SQL 语句调优的进阶策略与实际案例(2-2)
本文延续前篇,深入探讨 MySQL 数据库 SQL 语句调优进阶策略。包括优化索引使用,介绍多种索引类型及避免索引失效等;调整数据库参数,如缓冲池、连接数和日志参数;还有分区表、垂直拆分等其他优化方法。通过实际案例分析展示调优效果。回顾与数据库课程设计相关文章,强调全面认识 MySQL 数据库重要性。为读者提供综合调优指导,确保数据库高效运行。
缓存与数据库的一致性方案,Redis与Mysql一致性方案,大厂P8的终极方案(图解+秒懂+史上最全)
缓存与数据库的一致性方案,Redis与Mysql一致性方案,大厂P8的终极方案(图解+秒懂+史上最全)
从 MySQL 到时序数据库 TDengine:Zendure 如何实现高效储能数据管理?
TDengine 助力广州疆海科技有限公司高效完成储能业务的数据分析任务,轻松应对海量功率、电能及输入输出数据的实时统计与分析,并以接近 1 : 20 的数据文件压缩率大幅降低存储成本。此外,taosX 强大的 transform 功能帮助用户完成原始数据的清洗和结构优化,而其零代码迁移能力更实现了历史数据从 TDengine OSS 与 MySQL 到 TDengine 企业版的平滑迁移,全面提升了企业的数据管理效率。本文将详细解读这一实践案例。
60 0

热门文章

最新文章