数据库
2021-03-23 11:09:41 95 举报
AI智能生成
数据库是用于存储、管理和检索数据的计算机化系统。它以结构化的方式组织数据,使用户能够轻松地访问和操作信息。数据库通常包括一个或多个表格,每个表格包含一组相关的数据记录。这些记录可以通过主键和其他关联字段进行连接,从而实现数据的整合和分析。数据库管理系统(DBMS)负责处理数据的增删改查操作,确保数据的安全性和完整性。常见的数据库类型有关系型数据库(如MySQL、Oracle)和非关系型数据库(如MongoDB、Redis)。数据库在各种应用场景中发挥着重要作用,如企业资源规划(ERP)、客户关系管理(CRM)、内容管理系统(CMS)等。
作者其他创作
大纲/内容
数据库
数据库分类
关系型数据库
通过行列存储
mysql
orcle
sql serve
DB2
非关系型数据库
通过对象存储
redis
MongDB
数据库引擎
INNODB(MySQL默认使用)(使用聚簇索引)
优点
1、支持事务
2、支持外键
3、支持崩溃安全恢复
4、支持行级锁,减少并发冲突
缺点
1、不支持全文索引(但是可以使用sphinx插件支持,效果比myisam更好)
存储格式
.frm文件
存储表定义文件
.ibd文件
数据和索引存储文件
MYISAM(非聚簇索引)
1、可被压缩,节省存储空间
2、可以被转换成只读表,提交检索效率
3、支持全文索引
4、支持延迟更新索引,提高写入效率
1、不支持事务
2、只支持表锁,并发冲突概率高
3、不支持崩溃安全恢复
.frm表结构文件
.myd数据文件
.myi索引文件
MySQL
基本使用
外键
坚决避免使用,一切的外键约束需在应用层完成
⭐distinct(去重关键字)
条件顺序
1、联合查询
2、where子句
只要是数据库中表的字段就可以
3、group by子句
4、having子句
必须是查询字段中含有的
5、order by子句
DESC降序
ASC升序
6、limit子句
CURD
insert
delete
删除某条记录
update
select
truncate tableName
初始化表,使得主键自增归一
drop
删除表
联表查询
left join
inner join
right join
分页
limit实现
缓解数据库压力
常见函数
ABS()取绝对值
RAND()0~1的随机数
CEILING()向上取整
FLOOR()向下取整
NOW()获取当前时间
聚合函数
COUNT()
COUNT(字段名)
忽略null值
COUNT(*)
计算行数,会走一遍所有数据,不忽略null
COUNT(1)
计算行数,把所有的行都当成1,不忽略null
AVG()
计算平均值
SUM()
计算总和
MIN()
计算最小值
MAX()
计算最大值
MD5加密
MD5不可逆
MD5破解原理:跑字典,字典没有的数据是无法破解的
使用方法
MD5()
ps:insert into table values(\"user\
加密后如何校验?
把前台输入的值使用MD5再次加密后对比表中数据
事务(transaction)
定义:把一组sql放在一个批次处理
ACID原则
Atomicity(原子性)
一个事务中的所有操作要么一起成功,要么一起失败
Consistency(一致性)
最终一致性
事务不管怎么完成,最终结果一定只有一种
Durability(持久性)
事务一旦提交就不可逆
事务未提交:恢复原状
事务已提交:数据持久化到数据库
Isolation(隔离性)
多个用户并发访问数据库时,每个用户的事务不会别其他事务干扰
隔离产生的问题
1、脏读
某个事务读到了别的事务未提交的数据
2、不可重复读
一个事务中两次读取的同一数据的内容不同(读取了其他事务已提交的数据)
3、幻读
一个事务中,两次读操作,读到的结果不一致(常见数据变多,因为有其他事务新增的数据)
数据库的隔离级别
1、读未提交
并发性最高,三种问题都可能导致
2、读已提交
解决脏读问题
3、可重复读
解决脏读和不可重复读问题
4、串行化
解决脏读、不可重复读和幻读问题
事务隔离级别的实现
LBCC(Lock-Based Concurrent Control)
Record Lock(行锁)
Gap Lock(间隙锁)
Next-Key
左开右闭
MVCC(Multi-Version Concurrent Control)
多版本并发控制
每个事务都有一个事务ID
每个事务更改数据的时候一定要去读最新的值(当前读)
每个事务单纯读的时候读取快照读
实际操作
1、set transaction = 0/1 关闭/开启事务
2、start transaction 开始事务
3、自己的逻辑处理
rollback 回滚
回到事务开始前的状态
4、commit 提交
一旦事务提交就会被持久化,不能被回滚了
索引
定义
快速获取数据的一种数据结构
实质
以空间换时间
数据结构
BTree(默认)
Hash
分类
主键索引(PrimaryKey)
唯一的标识,主键不可重复,只有一个列可以作为主键
唯一索引(UniqueKey)
避免重复的列,可以重复,多个列都可以是唯一索引
常规索引(key / index)
默认的
全文索引(FullTextKey)
特点的数据库引擎中才有---innodb不支持
适用场景
大数据量的查询
原则
索引不是越多越好
不要对经常变动的数据加索引
小数据量的表不要加索引
索引一般加在常用来查询的字段上
权限管理
user表
MySQL备份
保证数据安全
数据转移
备份方式
导出
直接拷走data文件夹
可视化工具手动导出
命令行中mysqldump导出
mysqldump -hlocalhost -p123456 school student>d:/a.sql
导入
登录mysql后
切换到指定数据库
source a.sql
数据库的设计步骤
1、需求分析
分析用户的需求,包括数据、功能和性能需求
2、概念结构设计
主要采用E-R模型进行设计
3、逻辑结构设计
通过将E-R图转换成表,实现从E-R模型到关系模型的转换
4、物理结构设计
为所设计的数据库选择合适的存储结构和存取路径
5、数据库实施
包括编程、测试和试运行
6、数据库运行和维护
系统的运行与数据库的日常维护
三大范式
第一范式1NF
每列都是不可再分的列
第二范式2NF
消除部分函数依赖
全部的非主键列完全依赖主键组
第三范式3NF
消除传递依赖
产生的问题
规范性和性能的权衡
关联查询不要超过联查三张表
综合考虑设计规范和用户体验以及性能
可以增加一些冗余字段,把多表查询变成单表查询
⭐JDBC
数据库驱动
程序员直接操作jdbc,jdbc去操作底层驱动完成数据库调用
代码实现
1、加载驱动
Class.forName(\"com.mysql.jdbc.Deiver\")
类加载时会调用静态代码块
2、编写url
String url = \"jdbc:mysql://localhost:3306/数据库名称&useUnicode=true&characterEncoding=utf8&useSSL=false&serveTimezone=CTT\"useUnicode=true(唯一编码)characterEncoding=utf8(设置字符集)useSSL=false(安全连接)serveTimezone=CTT(mysql8新增时区设置)
3、编写username和password
String username = \"root\"
String password = \"root\"
4、连接数据库,获得数据库对象
5、获得执行sql的statement对象,用于向数据库发送请求
Statement statement = connection.createStatement();
6、编写sql,使用执行slq的对象去执行sql
String query = \"select * from student\";
ResultSet resultSet = statement.executeQuery(query);
7、释放连接
resultSet.close();
statement.close();
connection.close();
sql注入
statement存在sql注入
prestatement可以防止sql注入,并且效率更高
数据库连接池
DBCP
C3P0
Druid
0 条评论
下一页