javamysql

article/2025/8/21 4:46:58

文章目录

  • 1、初识MySQL
    • 1.1、数据库分类
  • 2、列类型
    • 2.1、数值
    • 2.2、字符串
    • 2.3、事件日期
  • 3、字段属性
  • 4、表操作
    • 4.1、字符集编码
    • 4.2、修改表结构
    • 4.3、清除表
  • 5、DQL查询数据(最重点)
    • 5.1、DQL
    • 5.2、查询去重
    • 5.3、数据库的表达式
    • 5.4、模糊查询
    • 5.5、连表查询
    • 5.6、分页和排序
      • 排序
      • 分页
  • 6、函数
    • 6.1、常用函数
    • 6.2、聚合函数
    • 6.3、分组和过滤
    • 6.4、数据库级别的MD5加密(扩展)
  • 7、事务
    • 7.1、什么是事务
    • 7.2、测试事务实现转账
  • 8、索引
    • 8.1、索引的分类
    • 8.2、创建索引
    • 8.3、索引原则
  • 9、权限管理和备份
    • 备份
  • 10、规范数据库设计
    • 10.1、为什么需要设计
    • 10.2、数据库设计三大范式
      • **三大范式**
  • 11、JDBC
    • 11.1、数据库连接池
  • 11、JDBC
    • 11.1、数据库连接池

1、初识MySQL

javaEE:企业级java开发,web

后台(连接点:连接数据库jdbc,连接前段(控制,控制视图跳转,给钱地暖传数据))

数据库(存数据,Txt,Excel,word)

操作系统、数据结构与算法
离散数学、数字电路、体系结构、编译原理

1.1、数据库分类

关系型数据库

  • MySQL、Oracle、SqlServer、DB2
  • 通过表和表之间,行和列之间的关系进行数据的存储

非关系型数据库

  • Redis、mongdb
  • 非关系型数据库,对象存储,通过对象的自身的属性来决定

DBMS

  • 数据库的管理软件
  • MySQL、数据库管理系统

2、列类型

2.1、数值

  • tinyint 十分小得数据 1字节
  • smallint 较小的数据 2个字节
  • mediumint 中等大小的数据 3个字节
  • int 标准的整数 4个字节 常用的int
  • bigint 较大的数据 8个字节
  • float 浮点数 4个字节
  • double 浮点数 8个字节
  • decimal 字符串形式的浮点数,金融计算的时候,一般使用

2.2、字符串

  • char 字符串固定的大小 0-255
  • varchar 可变字符串 0-65535 常用的变量 string
  • tingtext 微型文本 2^8-1
  • text 文本串 2^16-1 保存大文本

2.3、事件日期

  • date YYYY-MM-DD 日期格式
  • time HH:MM:SS 时间格式
  • datetime YYYY-MM-DD HH:mm:ss 最常用的时间格式
  • timestamp **时间戳 1970.1.1 到现在的毫秒数!**也较为常用
  • year 年份表示

3、字段属性

Unsigned:

  • 无符号的整数
  • 声明了该列不能声明为负数(否则报错)

zerofill:

  • 0填充的
  • 不足的位数,使用0来填充

4、表操作

  • show create database school;查看创建数据库的语句
  • show create table student;查看数据表的定义语句
  • desc student;显示表的结构
  • id int(4) default not null comment ‘注释’;注释

4.1、字符集编码

charset=utf8

4.2、修改表结构

image-20220507153318848

4.3、清除表

truncate table xxx

作用:完全清空一个数据库表,表的结构和索引约束不变

  • 自增会归 0

5、DQL查询数据(最重点)

5.1、DQL

  • 所有的查询操作都用
  • 简单的查询,复杂的查询
  • 数据库最核心的语言,最重要的查询
  • 使用频率最高的语句

5.2、查询去重

distinct

select distinct id from student;

5.3、数据库的表达式

select version();   查询系统版本(函数)
select  100*3-1 as 结果;用来计算
select @@auto_increment_increment;查询自增的步长(变量)

5.4、模糊查询

比较运算符

image-20220507160201537


image-20220507160424329

5.5、连表查询

img

image-20220508135102779

image-20220508135129115

5.6、分页和排序

limit 和 order by

排序

升序:ASC 降序:DESC

**select 分数 from 表 order by 分数 ASC;**按成绩升序排序

分页

瀑布流

每页只显示五条数据
select 分数  from 表 
order by 分数 ASC
limit 0, 5;

语法:

  • limit 起始值, 页面的大小
  • 网页应用:当前,总的页数,页面大小
pageSize:页面大小
(n-1)*pageSize:起始值
n:当前页
数据总数/页面大小=总页数

6、函数

https://dev.mysql.com/doc/refman/8.0/en/built-in-function-reference.html

6.1、常用函数

abs()   绝对值
ceiling() 向上取整
floor()  向下取整
rand()  返回0-1之间的随机数
sign()  判断一个数的符号  负数返回-1,整数返回1
==字符串函数
char_length()  返回字符串的长度
concat()  拼接字符串
lower()  转小写
upper()  转大写
instr('abc', 'b')  返回第一次出现的字串的索引
replace(a,b,c)  把a中的b字符串替换为c字符串
substr('adf',2,4)  返回指定的字符串(源字符串,截取位置,截取长度)
reverse()  反转==时间和日期==
current_date()  获取当前日期
curdate()  获取当前日期
now()  获取当前时间
localtime()  获取本地时间
system()  获取系统时间
year(now())  获取年
month(now())  获取月
day(now())  获取日
hour(now())  获取时

6.2、聚合函数

count()  函数count(字段)  会忽略null值count(*)  不会忽略null值,计算行数count(1)  计算行数sum()  求和
avg()  平均值

6.3、分组和过滤

group by 字段;  :指定结果按照哪几个字段来分组
having 分数>80;  :记录分组的记录必须满足的次要条件

6.4、数据库级别的MD5加密(扩展)

不可逆

image-20220508145203099

7、事务

7.1、什么是事务

要么都成功,要么都失败

将一组SQL放在一个批次中去执行

事务原则:ACID原则 原子性、一致性、隔离性、持久性

**原子性:**要么都成功,要么都失败

一致性:事务前后的数据完整性要保证一致

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

持久性:事务一旦提交则不可逆,被持久话到数据库中

隔离所导致的一些问题

  • 脏读:指一个事务读取了另外一个事务未提交的数据
  • 不可重复读:在一个事务内读取表中的某一行数据,多次读取结果不同(这个不一定是错误,只是某些场所不对)
  • 虚读(幻读):是指在一个事务内读取到了别的事务插入的数据,导致前后读取不一致

7.2、测试事务实现转账

set autocommit = 0 //关闭事务

set autocommit = 1 //开启事务(mysql默认开启)

手动处理事务
--事务开启
start transaction   --标记一个事务的开始,从这个之后的SQL都在同一个事务内insert xx
insert xx--提交,持久化(成功)
commit
--回滚:回到原来的样子(失败)
rollback--事务结束
set autocommit = 1  --开启自动提交--了解
savepoint  保存点名  --设置一个事务的保存点
rollback to savepoint 保存点名; --回滚到保存点
release  savepoint 保存点名;--撤销保存点名

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zBrNS0FP-1654158069839)(C:\Users\15751083927\AppData\Roaming\Typora\typora-user-images\image-20220508152439832.png)]

8、索引

8.1、索引的分类

高效获取数据的数据结构

索引的本质是数据结构

  • 主键索引(primary key)
    • 唯一的标识,主键不可重复,只能有一个列作为主键
  • 唯一索引(unique key)
    • 避免重复的列出现,可以重复出现,多个列都可以标识位 唯一索引
  • 常规索引(key/index)
    • 默认的,index key关键字来设置
  • 全文索引(fulltext)
    • 在特定的数据库引擎下才有,mylsam
    • 快速定位数据

image-20220508153635568

8.2、创建索引

查询速度快(在大数据的时候)

image-20220508161241402

8.3、索引原则

  • 索引不是越多越好
  • 不要对经常变动的表加索引
  • 小数据量不需要加索引
  • 索引一般加在常用来查询的字段上!

https://blog.csdn.net/qq_44129924/article/details/115333658

9、权限管理和备份

image-20220508162120311

用户表:mysql.user

本质:对这张表进行增删改查

1

备份

为什么要备份:

  • 保证重要的数据不丢失
  • 数据转移

mysql数据库备份的方式

  • 直接拷贝物理文件

  • 在sqlyog这种可视化工具中手动导出

    • 右键,导出
  • 使用命令行导出mysqldump 命令行使用

    • ==导出mysqldump -h主机 -u用户名 -p密码 数据库 表明 >物理磁盘位置/文件名mysqldump -h主机 -u用户名 -p密码 数据库 表1,表2 >物理磁盘位置/文件名==导入
      #登录的情况下,切换到指定的数据库
      #source 备份文件
      
  • 防止数据丢失,发送数据库

10、规范数据库设计

10.1、为什么需要设计

  • 当数据库比较复杂时

  • 节省内存空间

  • 保证数据库的完整性

  • 方便我们开发系统

软件开发中,关于数据库的设计

  • 分析需求:分析业务和需要处理的数据库的需求
  • 概要设计:设计关系图ER图

设计数据库的步骤:(个人博客)

  • 收集信息:分析需求

    • 用户表(用户登录注销、用户的个人信息、写博客、创建分类)
    • 分类表(文章分类、谁创建的)
    • 文章表(文章的信息)
    • 友链表(友链信息)
    • 自定义表 (系统信息,某个关键字,或者一些主字段)key:value (个人)
  • 标识实体(把需求落地到每个字段)

  • 标识实体之间的关系

10.2、数据库设计三大范式

为什么需要信息规范化

  • 信息重复
  • 更新异常
  • 插入异常
    • 无法正常显示信息
  • 删除异常
    • 丢失有效的信息

三大范式

**第一范式(1NF)😗*列不可再分
1.每一列属性都是不可再分的属性值,确保每一列的原子性

​ 2.两列的属性相近或相似或一样,尽量合并属性一样的列,确保不产生冗余数据

第二范式(2NF)属性完全依赖于主键
第二范式(2NF)是在第一范式(1NF)的基础上建立起来的,即满足第二范式(2NF)必须先满足第一范式(1NF)。第二范式(2NF)要求数据库表中的每个实例或行必须
可以被惟一地区分
。为实现区分通常需要为表加上一个列,以存储各个实例的惟一标识。这个惟一属性列被称为主键

每张表只描述一件事

**第三范式(3NF)**属性不依赖于其它非主属性 属性直接依赖于主键
数据不能存在传递关系,即每个属性都跟主键有直接关系而不是间接关系。像:a–>b–>c 属性之间含有这样的关系,是不符合第三范式的。

比如Student表(学号,姓名,年龄,性别,所在院校,院校地址,院校电话)

这样一个表结构,就存在上述关系。 学号–> 所在院校 --> (院校地址,院校电话)

这样的表结构,我们应该拆开来,如下。

(学号,姓名,年龄,性别,所在院校)–(所在院校,院校地址,院校电话)

总结:[三大范式]只是一般设计数据库的基本理念,可以建立冗余较小、结构合理的数据库。如果有特殊情况,当然要特殊对待,数据库设计最重要的是看需求跟性能,需求>性能>表结构。所以不能一味的去追求范式建立数据库。

规范性 和 性能的问题

关联查询的表不得超过三张表

  • 考虑商业化的需求和目标,(成本,用户体验)数据库的性能更加重要
  • 在规范性能的问题的时候,需要是适当考虑一下规范性
  • 故意给某些表增加一些冗余字段(从多表查询变为单表查询)
  • 故意增加一些计算列(从大数据量降低为小数据量的查询)

11、JDBC

介绍:https://blog.csdn.net/weixin_43883917/article/details/112378784

实操:https://blog.csdn.net/Mr_Gaojinchao/article/details/108927711

11.1、数据库连接池

池化技术:准备一些预先的资源,过来就连接预先准备好的

最小连接数:10

最大连接数:100 业务最高重载上限

等待超时:100ms

编写连接池,实现一个接口DataSource

DBCP:https://blog.csdn.net/brushli/article/details/80413461

C3P0:https://www.jianshu.com/p/7858bdef4de5

Druid :阿里巴巴

算列(从大数据量降低为小数据量的查询)

11、JDBC

介绍:https://blog.csdn.net/weixin_43883917/article/details/112378784

实操:https://blog.csdn.net/Mr_Gaojinchao/article/details/108927711

11.1、数据库连接池

池化技术:准备一些预先的资源,过来就连接预先准备好的

最小连接数:10

最大连接数:100 业务最高重载上限

等待超时:100ms

编写连接池,实现一个接口DataSource

DBCP:https://blog.csdn.net/brushli/article/details/80413461

C3P0:https://www.jianshu.com/p/7858bdef4de5

Druid :阿里巴巴


http://chatgpt.dhexx.cn/article/SSg4eibL.shtml

相关文章

java实现操作MySQL

java对mysql数据库的操作分为以下几个步骤: 1.加载mysql jdbc驱动 //加载mysql jdbc驱动Class.forName("com.mysql.cj.jdbc.Driver");2.获取连接 获取连接需要两步,一是使用DriverManager来注册驱动,二是使用DriverManager来获取…

Java+MysQL:Java连接MysQL及进行简单的查询操作

最近想学习一下Java操作MySQL等数据库的教程,但是把整个网络翻遍也没找到令人满意的教程,各种报错,所以就决定,把自己的学习过程记录下来和大家分享,既可以作为日后复习巩固之用,又可以帮到需要的人,希望可以帮助以后想学习的朋友们少走一些弯路。大家一起交流共勉吧。 …

简单介绍Java连接MySQL数据库执行数据库操作

简介:在一般的项目开发中,无不用到对数据库的操作,这些操作无非也就是一些增删改查等操作。那么我们的Java如何操作数据库进行相关的数据操作呢,这里我们需要一个驱动程序,即JDBC驱动,JDBC包含两层&#xf…

数据库 —— Java操作MySQL

系列文章 数据库 —— MySQL 01 数据库 —— MySQL 02 数据库 —— Java操作MySQL 文章目录 系列文章十、JDBC10.1 什么是JDBC10.2、JDBC程序10.2.1、封装工具类10.2.2、SQL注入问题及解决 10.3、使用IDEA连接数据库10.4、JDBC操作事务10.5、数据库连接池 十、JDBC 10.1 什么…

Java-mysql:MYSQL数据操作

添加记录:1.一次添加一条记录:INSERT [INTO] 数据表名[(字段名称1,2……)] {VALUE|VALUES}(值1,2……);2.一次添加多条记录:INSERT [INTO] 数据表名[(字段名称1,2……)] VALUES(值1,2……),(值1…

java JDBC操作Mysql解析

一. 概念: Java DataBase Connectivity Java 数据库连接, Java语言操作数据库。JDBC本质:其实是官方(sun公司)定义的一套操作所有关系型数据库的规则,即接口。各个数据库厂商去实现这套接口,提…

java对mysql的简单操作——增加数据

java连接mysql5.1教程(含代码) 查询数据 下面是数据添加片段的代码 Connection conn null; Statement stmt null; PreparedStatement psnull;try{// 注册 JDBC 驱动Class.forName(JDBC_DRIVER);// 打开链接//连接数据库conn DriverManager.getConne…

Java和MySQL的连接和操作(JDBC)

一、数据库的连接 1. 引入JDBC驱动程序 1.1 如何获取驱动程序 驱动程序由数据库提供商提供下载。 MySQL 的驱动下载地址:http://dev.mysql.com/downloads/ 依次点击 Connector/J -> Platform Independent ,如然后下载下面那个 1.2 如何在Java …

Java连接MySQL数据库具体操作

一,主要分为5个步骤 1,获取驱动 首先下载自己mysql版本的jar包 下载地址:MySQL :: Download Connector/J 将下载好的jar包复制到jdk的安装目录下的jre下的lib下的ext目录下 mysql.5及以下的版本获取驱动是Class.forName("com.mysql.jdb…

MySQL学习(五)JDBC 使用java操作数据库

目录 1.JDBC基本原理 2.数据库驱动包的导入(环境配置) 3.JDBC的使用步骤 4.JDBC的常用接口和抽象类 5.核心小结: 1.JDBC基本原理 现在,要使用java操作数据库,则我们的项目的构建或者说代码的组成增加为了三方&…

Java JDBC操作MySQL

DBMS里有多个数据库,每个库中又有多张表。 客户端有命令终端(DoS)、SQLyog、Java等。 Mysql数据库、普通表的本质仍然是文件。 表的一行称为一条记录,对应Java中的一个对象。 SQL语句的分类为 1、DDL数据定义语言 create 表、库 2、DML 数据操作语言 in…

Java对MySQL数据库进行操作【java】

数据库几乎是每一个应用型的程序都会用到,学会如何高效操作数据库也是开发一个重点。今天我总结了具体的操作步骤以及注意点。Java访问数据库主要用的方法是JDBC,它是java语言中用来规范客户端程序如何来访问数据库的应用程序接口,提供了诸如…

Java 中使用 MySql以及一些Mysql 基本的命令

Linux mint 环境下配置 mysql 打开终端输入 sudo apt-get install mysql-server,回车即可安装 mysql,当然如果你想使用最新的 mysql,可以去官方下载并且配置,教程网上有很多,就不再赘述。 安装完成之后,在终端中输入…

【java对MySQL的操作详解】java学习之增查

文章目录 前言一,封装JDBC二,增2.1,UserDAO.java2,2,UserServier.java2,3,userUI.java添加用户 三,查3.1,UserUI伪iu3.2,UserServier.java3.3,UserDAO.java END 前言 具…

在Java中操作MySQL(JDBC)

准备工作 ideamysql 官方的 jdbc 驱动 先在 idea 中建立一个新的 java 工程 直到这一步之前,一直按下一步就行了 把名字改改直接 finish 在这个工程下面建立一个名字为 lib 的空文件夹 去官方下载依赖的包 https://dev.mysql.com/downloads/connector/j/ 选…

java操作mysql数据库

java操作mysql数据库 学习到数据库操作这一章,遇到了很多问题,只能说无论什么时候,用什么工具来操作数据库,都不是一件简单的事情。 简单记录一下 数据库连接 先看代码界面 要连接数据库,首先需要导入mysql依赖包&…

用Java操作MySQL

用Java操作MySQL目录 一、创建数据库1、建库2、建表 二、开始准备jdbc1、导入mysql驱动jar包2、开始写jdbc代码 三、那就运行吧附:最终代码DBUtilMaindb.properties 一、创建数据库 打开Navicat(我用的是DataGrip)的查询控制台 1、建库 sq…

c++ opencv 身份证OCR识别:前期数据训练库准备(tesseractOCR)

前言:本文已经在个人博客更新排版和讲解【传送门】 整个教程已经在有道云写好了,在博客要重新把每个图片再上传一次有点累,先截了图直接看吧!如果有需要有提供word版本可以下载 https://download.csdn.net/download/stopping5/11…

身份证正反面识别,身份证扫描识别,二代身份证OCR识别,OCR极速识别身份证所有信息正反面均可。离线无需联网,极速秒扫。

项目说明 极速识别二代身份证、驾驶证、护照 (无需联网,离线秒扫,极速识别)身份证所有信息, 包含姓名、性别、出生年月、详细地址,正反面。不需要联网即可离线识别身份证所有信息包括新疆少数民族身份证,识别速度快,识…

如何对接身份证OCR?

【身份证OCR文字识别】身份证OCR识别-身份证识别-身份证-OCR文字-身份证OCR文字-身份证OCR-身份证OCR图像识别【最新版】_图像识别_身份证识别_OCR-云市场-阿里云 身份证OCR免费体验 Java代码如下 public static void main(String[] args) {String host "https://idcar…