Java学习-Mysql(下)

目录

发布成功 (csdn.net)    :上半部分  (基础)

28、事务ACID原则、脏读、不可重复读

29、测试事务实现转账

30、索引介绍及索引的分类

31、SQL编程创建100万条数据测试索引

32、索引原则和明日安排

33、数据库用户管理

34、MySQL备份

35、如何设计一个项目的数据库

36、数据库的三大范式

37、数据库驱动和JDBC

38、第一个JDBC程序

39、JDBC中对象解释

40、Statement对象详解

41、SQL注入问题

42、PreparedStatement对象

43、使用IDEA连接数据库

44、JDBC操作事务

45、DBCP-C3P0连接池


28、事务ACID原则、脏读、不可重复读

  •  事务原则:ACID
  • 原子性(Atomicity)

原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。

  • 一致性(Consistency)

事务前后数据的完整性必须保持一致。

  • 持久性(Durability)

持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来即使数据库发生故障也不应该对其有任何影响

  • 隔离性(Isolation)

事务的隔离性是多个用户并发访问数据库时,数据库为每一个用户开启的事务,不能被其他事务的操作数据所干扰,多个并发事务之间要相互隔离。

  • 隔离产生的问题:
  • 脏读:

  • 不可重复读
  • 虚读


29、测试事务实现转账

mysql默认自动开启事务:

 

事务执行过程:

 

一组事务的提交:(回滚后回到上一次提交的状态)

 

30、索引介绍及索引的分类

  • MysQL官方对索引的定义为:索引(ndex)是帮助MySQL高效获取数据的数据结构。提取句子主千,就可以得到索引的本质:索引是数据结构。
  • 索引分类:
  1.  主键索引 primary key(不可重复,只能有一个列为主键)
  2. 唯一索引 UNIQUE KEY  (避免重复列出现,多个列都可标识为唯一索引)
  3. 常规索引 KEY/INDEX  (默认的)
  4. 全文索引 FullText(特定数据库引擎才有,目的也是快速定位数据)

 基础语法:


31、SQL编程创建100万条数据测试索引

写一个函数

结果(55s):

 

创建索引后,搜索时间缩短到毫秒级别: 

  


32、索引原则和明日安排

  1.  经常变动的数据不加索引
  2. 数据量较小没有必要加索引

索引数据结构:

INNODB默认btree, 

了解底层原理:CodingLabs - MySQL索引背后的数据结构及算法原理 


33、数据库用户管理

权限管理:

 

 


34、MySQL备份

方式:

  • 直接物理备份文件
  • 在sqlyog里手动导出

  • 命令行 mysqldump导出 

导入:


35、如何设计一个项目的数据库

 

 

bbs论坛系统、crm管理系统、blog博客系统


36、数据库的三大范式

 数据规范化:避免 信息重复、更新异常、插入异常

  • 1NF:每一个字段都要是不可分的原子项
  • 2NF:满足1NF,且每张表只描述一件事情
  • 3NF:在2NF上消除传递依赖

  • 规范性和性能不可兼得:


37、数据库驱动和JDBC

 数据库驱动:

java.sql

javax.sql


38、第一个JDBC程序

 

useSSL在sql版本高于connect时候应该改为false:

SHOW CREATE DATABASE dbestudy;
/*
CREATE DATABASE `dbestudy` 
/*!40100 DEFAULT CHARACTER SET utf8mb3 */ 
/*!80016 DEFAULT ENCRYPTION='N' 
*/
SHOW CREATE TABLE users
CREATE TABLE `users` (
  `id` INT NOT NULL,
  `NAME` VARCHAR(40) DEFAULT NULL,
  `PASSWORD` VARCHAR(40) DEFAULT NULL,
  `email` VARCHAR(60) DEFAULT NULL,
  `birthday` DATE DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8mb3
package com.xinge.learning01;

import java.sql.*;

//jdbc测试程序
public class JdbcTest01 {
    public static void main(String[] args) throws ClassNotFoundException, SQLException {
        //加载驱动
        Class.forName("com.mysql.cj.jdbc.Driver");
        //创建信息
        String url = "jdbc:mysql://localhost:3306/dbestudy?useUnicode=true&characterEncoding=utf8&useSSL=false";
        String name = "root";
        String password = "31415926xG";
        //连接数据库对象
        Connection connection = DriverManager.getConnection(url,name,password);
        //执行对象
        Statement statement = connection.createStatement();
        String sql = "SELECT * FROM users";
        ResultSet resultSet = statement.executeQuery(sql);

        while(resultSet.next()){
            System.out.println("id="+resultSet.getObject("id"));
            System.out.println("name="+resultSet.getObject("NAME"));
            System.out.println("pwd="+resultSet.getObject("PASSWORD"));
            System.out.println("email="+resultSet.getObject("email"));
            System.out.println("birth="+resultSet.getObject("birthday"));
        }
        //释放
        resultSet.close();
        statement.close();
        connection.close();

    }
}

 

39、JDBC中对象解释

 


40、Statement对象详解

 

40、Statement对象详解_哔哩哔哩_bilibili 


41、SQL注入问题

SQL存在漏洞,可能被攻击 ,sql会被拼接


42、PreparedStatement对象

这个对象不会被拼接,可以避免sql注入问题,而且效率更高 


43、使用IDEA连接数据库

 

 


44、JDBC操作事务

如果失败默认回滚,没有必要显式定义


45、DBCP-C3P0连接池

  • 数据库连接-释放十分浪费资源,可以预先准备资源,后面直接连接准备好的资源
  • 最小连接数一般设置为最小连接数,业务最高承载上限是最大连接数,超过最大连接的等待,
  • DataSource接口
  • 开源数据源实现(DBCP、C3P0,Druid阿里巴巴),使用此方法就不用手写代码连接数据库了
  • DBCP加入jar包: 
  • C3P0导入jar包:

DBCP实例:

测试类:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值