数据库笔记
作者:@冰山醉酒
本文为作者原创,转载请注明出处:https://www.cnblogs.com/douFrank/p/16117965.html
1|0初始MySQL
JAvaEE:企业级Java开发 web
前端(页面:展示,数据!)
后台(连接点:连接数据库JDBC,链接前端(控制,控制视图跳转,给前端传递数据))
数据库(存储数据,管理数据)
1|1数据库分类
关系型数据库 (SQl)
-
MySql ,Oracle, Sql Server ,DB2,SQLite
-
通过表与表之间,行和列之间的关系进行数据的存储,学员信息表,考勤表……
非关系数据库 (NoSQl)Not Only
-
redis,MongDB
-
非关系型数据库,对象存储,通过对象额自身属性来决定。
DBMS(数据库管理系统)
-
数据库的管理软件,科学有效的管理我们的数据。维护和获取数据
-
MySQL,数据库管理系统
1|2MySQL简介
1|3安装MySql
-
解压
-
把这个给包放到自己的电脑环境目录下
-
配置环境变量(path中添加MySQL的bin文件的目录)
-
在mysql目录下新建my.ini文件 ,写入
-
启动管理员模式下的CMD,运行所有的命令
-
安装mysql服务
-
初始化数据库文件
-
启动mysql,进去修改密码
-
进入mysql通过命令行(-p后面不要加空格),修改密码(sql语句后面一营要加分号!)改为123456
-
-
重启mysql,连接测试,如果连接成功就OK了。
安装SQlyog
1|4连接数据库
命令行连接!
数据库 XXX语言
DDL 定义
DML 操作
DQL 查询
DCL 控制
2|0操作数据库
操作数据库 > 操作数据库中的表 > 操作数据库中表的数据
mysql不区分大小写
-
创建数据库
-
删除数据库
-
使用数据库
-
查看数据库
对比:SQLyog的可视化操作
学习思路:
-
对照sqlyog可视化历史记录查看sql
-
固定的语法或关键字必须强行记住!
数值
-
tinyint 十分小的数据 1字节
-
smallint 较小的数据 2个字节
-
mediumint 中等大小的数据 3个字节
-
int 标准的整数 4个字节 常用的 int
-
bigint 较大的数据 8个字节
-
float 浮点数 4个字节
-
double 浮点数 8个字节(精度问题)
-
decimal 字符串形式的浮点数 金融计算的时候,一般使用decmial
字符串
-
char 字符串固定大小的 0~255
-
varchar 可变字符 0~65535 常用的变量 String
-
tinytext 文型文本 2^8-1
-
text 文本串 2^16-1 保存大文本
时间日期
java.util.Date
-
date YYYY-MM-DD 日期格式
-
time HH:MM:SS 时间格式
-
datetime YYYY-MM-DD HH:MM:SS 最常用的时间格式
-
timestamp 时间戳 1970.1.1到现在的毫秒数! 也较为常用
-
year 年份表示
null
-
没有值,未知
-
注意,不要使用NULL进行运算,结果为NULL
2|1数据库的字段属性(重点)
unsigned:
-
无符号的整数
-
声明了该列不能为负数
zerofill
-
0填充
-
不足的位数,使用0填充
自增
-
通常理解为自增,自动在上一条记录的基础上+1(默认)
-
通常用来设计唯一的主键~index,必须是整数类型
-
可以自定义审计逐渐自增的起始值和步长
非空
-
假设设置为not null 如果不给它赋值,就会报错
默认
-
设置默认的值!
拓展:
2|2创建数据库表(重点)
格式
常用命令
2|3数据表的类型
MYISAM | INNODB | |
---|---|---|
事务支持 | 不支持 | 支持 |
数据行锁定 | 不支持 | 支持 |
外键约束 | 不支持 | 支持 |
全文索引 | 支持 | 不支持 |
表空间的大小 | 较小 | 较大,约为2倍 |
常规使用操作:
-
MYISAM 节约空间 苏队较快
-
INNODB 安全性高,属的处理,多表多用户操作
在物理空间存在的位置
所有的数据库文件都存在data目录下,一个文件夹对应一个书库,本质还是文件的存储!
MySQL引擎在物理文件上的区别
-
innoDB在数据库表中只有一个*.frm文件,以及上级目录的ibdata1文件
-
MYISAM对应文件
-
*.frm 表结构的定义文件
-
*.MYD 数据文件(data)
-
*.MYI 索引文件(index)
-
设置数据库表的字符集编码
不设置的话,回事mysql默认的字符集编码~(不支持中文!)
MySQL的默认编码是Latin1 ,不支持中文
在my.ini中哦欸之默认的编码
2|4修改删除表
修改
删除
2|5MySQL数据管理
2|6外键(了解即可)
创建表时添加外键
删除有外键关系的表的时候,必须要先删除引用表的的表,在删除被引用的表
建完表后添加外键
以上操作都是物理外键,数据库级别的外键,不建议使用(避免数据库过多造成困扰)
最佳实践
-
数据库就是单纯的表,只用来存储数据,只有行(数据)和列(字段)
-
我们相使用多张表的数据,想使用外键(程序去实现)
2|7DML语言(全部记住)
2|8添加
insert
语法:-- INSERT INTO 表名 (字段名1,字段名2,字段名3) VALUES('值1'),('值2'),('值3')
注意事项:
-
字段与字段之间使用逗号隔开
-
字段是可以省略的,但要一一对应
2|9修改
update 修改谁(条件) set 原来的值=新值
条件:where子句 运算符 id等于某个值,大于某个值,在某个区间内修改
操作符会返回 布尔值
操作符 | 含义 | 范围 | 结果 |
---|---|---|---|
= | |||
<>或!= | 都是不等于 | ||
> | |||
< | |||
<= | |||
>= | |||
betewwn......and..... | 在某个范围内 | [2,5] | |
and | 5>1 and 1>2 | false | |
or | 5>1 and 1>2 | true |
注意:
-
colnum_name时数据库的列,尽量带上``
-
条件,筛选的条件,若果没有指定,则会修改所有的列
-
value,是一个具体的值,也可以是一个变量
-
多个设置的属性之间,使用逗号隔开
2|10删除
delete命令
语法:delete from 表名 [where 条件]
truncate命令
作用:完全清空一个数据库表,表的结构和索引约束不会变!
delete和truncate区别
-
相同点:都能处理数据,都不会删除结构
-
不同:
-
truncate 重新设置 自增列 计数器回归零
-
truncate 不会影响事务
-
delete删除的问题,重启数据库,现象:
-
innoDB 自增列重1开始 (存在内存当中的,断电即失)
-
3|04、DQL查询数据(最重点)
3|1DQL
(Data Query Language:数据查询语言)
语法:select 字段, .... from 表
有的时候,列名字不是南无的见明知意 我们起别名 。 as 字段名 as 别名 表名 as 别名
去重 distinct
数据库的列(表达式)
数据库中的表达式:文本框,列,Null,函数,计算表达式,系统变量
select 表达式 from 表
3|2where条件子句
作用:检索数据中符合条件的值
搜索的条件有一个或者多个表达式组成!结果为布尔值
逻辑运算符
运算符 语法 描述 and && a and b a&&b 逻辑与 or || a or b a||b 一真则真 not ! not a !a 逻辑非 尽量使用英文字母
模糊查询:比较运算符
运算符 语法 描述 is null a is null 判空 is not null a is not null between a between b and c like a like b 可用% _ in a in (a1,a2,a3) 在其中一个值,结果为true 联接查询join
自连接
自己的表和自己的表连接,核心:一张表拆违两张一样的表即可
父类
categoryid categoryName 2 信息技术 3 软件开发 5 美术设计 子类
pid categoryid categoryName 3 4 数据库 2 8 办公信息 3 6 web开发 5 7 ps设计 操作:查询父类对应子类关系
父类 子类 信息技术 办公信息 软件开发 数据库 软件开发 web开发 美术设计 ps技术 排序
分页
子查询
分组查询
4|0MySQL函数
4|1常用函数
4|2聚合函数(常用)
函数名称 描述 count() 计数 sum() 求和 avg() 平均值 max() 最大值 min() 最小值 ........... ........... 4|3数据库级别的MD5加密
什么是MD5?
主要增强算法复杂度和不可逆性
MD5不可逆,具体的值的md5是一样的
MD5破解网站的原理,背后有一个字典,MD5加密后的值,加密前的值
5|0事务
5|1什么是事务
要么都成功,要么都失败
1,SQL执行,A给B转账 A1000 --->200 B200
2,SQL执行 B收到A的钱 A800 ----> B400
将一组SQL放在一个批次中去执行
事务原则:ACID原则 原子性 一致性 隔离性 持久性 (脏读)(幻读)……
参考博客:
原子性(Atomicity)
事务中的操作要么都发生,要么都不发生
一致性(Consistency)
事务前后数据的完整性必须保持一致
隔离性(Isolation)
多个并发事务之间要相互隔离
持久性(Durability)
持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来即使数据库发生故障也不应该对其有任何影响
隔离所导致的一些问题
脏读:
指一个事务读取了另外一个事务未提交的数据
不可重复读:
在一个事务内读取表中的某一行数据,多次读取结果不同。(这个不一定是错误,只是某些场合不对)
虚读(幻读):
是指在一个事务内读取到了别的事务插入的数据,导致前后读取数量总量不一致
6|0索引
MySQL官方对索引的定义:索引(index)是帮助MySQL高效获取数据的数据结构。0.5s 0.00001s 提取句子主干,就可以得到索引的本质:索引是数据结构
7.1、索引的分类
在一个表中,主键索引只能有一个,唯一索引可以有多个
-
主键索引(primary key)
-
唯一的标识,主键不可重复,只能有一个列作为主键
-
-
唯一索引(unique key)
-
避免重复的列出现,唯一索引可以重复,多个列都可以标识位 唯一索引
-
-
常规索引(key/index)
-
默认的,index,key关键字来设置
-
-
全文索引(fulltext)
-
快速定位数据
-
在特定的数据库引擎下才有
-
6|1测试索引
6|2索引原则
-
索引不是越多越好
-
不要对进程变动数据加索引
-
小数据量的表不需要加索引
-
索引一般加载常用来查询的字段上
索引的数据结构
Hash类型的索引
Btree:InnoDB的默认数据结构~
阅读:
7|0权限管理和备份
7|1用户管理
7|2MySQL备份
为什么要备份:
-
保证重要的数据不丢失
-
数据转移
MySQL数据库备份的方式
假如你要备份数据库,防止数据丢失
把数据库给朋友, sql文件传给别人即可
8|0规范数据设计
8|1为什么需要设计
糟糕的数据可设计
良好的数据库设计
三大范式
第一范式(1NF)
原子性:保证每一列不可再分
第二范式(2NF)
前提:满足第一范式
每张表只描述一件事
第三范式(3NF)
前提:满足第一范式和第二范式
第三范式需要确保数据表中每一列数据和主键直接相关,而不能间接相关
(规范数据库的设计)
规范性和性能的问题
关联查询的表不能超过三张表
-
考虑商业化的需求和目标(成本,用户体验!)数据库的性能更加重要
-
在规范性能的问题的时候,需要适当的考虑一下范性
-
故意给某些表增加一些冗余的字段(从多表查询中变为单表查询)
-
故意增加一些计算列(从大数据量降低为小数据量的查询)
9|0JDBC(重点)
9|1数据库驱动
驱动:显卡,声卡,数据库
我们的程序会通过数据库驱动,和数据库打交道
9|2JDBC
SUN公司为了简化开发人员的(对数据库的统一)操作,提供了一个(Java操作数据库的)规范,俗称JDBC。这些规范的事件有具体的厂商去做~
java.sql
javax.sql
还需要导入一个数据库驱动包
9|3第一个JDBC程序
1,创建一个普通项目
2,导入数据库驱动
3,编写测试代码
步骤总结:
-
加载驱动
-
连接数据库 DriverManager
-
获得执行sql的对象 Statement
-
获得返回的结果集
-
释放连接
DiverManager
URL
Statement执行SQL的对象 PrepareStatement执行SQL的对象
ResultSet 查询的结果集:封装了所有的查询结果
获得指定的数据类型
遍历,指针
释放连接
1.提取工具类
2,编写增删改
SQL 注入问题
9|4SQL注入
sql存在漏洞,会被攻击导致数据泄露,SQL会被拼接or
SELECT * FROM users WHERE
name
='' OR '1=1' ANDpassword
='' OR '1=1'9|5PreparedStatrment对象
PreparedStatrment可以防止SQL注入,效率更好!
-
新增
2, 删除
3,更新
4,查询
SQL注入
9|6IDEA连接数据库
9|7事务
要么都成功,要么都失败
ACID原则
原子性:要么全部完成,要么都不完成
一致性:总数不变
隔离性:多个进程互不影响
持久性:一旦提交不可逆,持久到数据库了
隔离性的问题:
脏读:一个事务读取了另一个没有提交的事务
不可重复读:在同一个事务内,重复读取表中的数据,表数据发生了改变
虚读(幻读):在一个事务内,读取到了别人插入的数据,导致前后读出来的结果不一致
代码实现
-
开启事务 conn.setAutoCommit(false);
-
一组业务执行完毕,提交事务
-
可以在catch语句中显示的定义回滚语句,但默认失败就会回滚
9|8数据库连接池
数据库连接->执行完毕-->释放
连接--释放 十分浪费系统资源
池化技术:准备一些预先的资源,过来就是连接预先准备好的
最小连接数:10
最大连接数:15
等待超时:100ms
编写连接池,实现一个接口DataSource
开源数据源实现
DBCP
C3P0
Druid:阿里巴巴
使用了连接数据库连接池之后,我们在项目开发中就不需要编写连接数据库的代码了。
结论
-
__EOF__

本文链接:https://www.cnblogs.com/douFrank/p/16117965.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)