Java数据库Q&A

数据库分页查询

select选出来后用limit分页查询
优化分页
limit查巨额数据返回少量,使用索引覆盖扫描,先压缩数据量,使用order bygroup by之类语句

聚合函数

COUNT(),AVG(),SUM(),MAX(),MIN()
ps.where约束声明,不能用聚合函数;having过滤声明,可以用约束函数

表的连接

内连接:返回两张表满足条件记录
左外连接:左边全部,右表满足条件记录
右外连接:右边全部,左表满足条件记录
自然连接:符合条件的两张表中的记录

SQL行转换为列

CASE...WHEN...THEN语句
eg:sum(case 'subject' when '语文' then score else 0 end) as '语文'
if()函数
eg:sum( if ( 'subject' = '语文', score, 0)) as '语文'

SQL注入理解

SQL注入的原理是在对server端发起的请求参数中植入SQL代码,传递到server解析。server端执行SQL操作时,会拼接对应参数,也会拼接这些植入的SQL代码,导致执行一些预期外的操作
解决方式
严格的参数校验,SQL预编译

关联更新

将两个表关联起来(join),一张表的部分数据可以更新到另一张表内

索引

MySQL索引理解
索引是一个单独的,存储在磁盘上的数据结构,包含对数据表里的所有记录的引用指针。使用其可以快速找出某个或多个列中有一特定值的行,所有MySQL列类型都可以被索引。
优势
保证行数据唯一性;加快查询速度;加速表表连接;缩短查询时分组排序时间
缺点
创建维护索引费时间,占磁盘空间;修改数据时,索引也要跟着动态维护;
分类
普通索引(有重复,空值),唯一索引UNIQUE INDEX(必须唯一,允许空值)
单列索引(1索引只有单个列,1表多个单列索引)
组合索引(多个字段组合上创建的索引)
全文索引(支持值的全文查找)
空间索引
创建保存MySQL索引
1.创建表的时候创建索引(定义主键,外键,唯一性约束的时候相当于创建一个索引)
2.在已存在的表上创建索引alter table语句,createindex语句
alter table book add unique index UniqidIdx(bookId);
create unqiue index UniqidIdx On book(bookId)
判断索引是否要添加
唯一性是数据本身特性时;需要确保定义列的数据完整性的时候
需要频繁进行排序或分组,带排序列有多个,建立组合索引
索引实现原理
在MySQL中,索引是在存储引擎层面实现的
......(B+树)
MySQL中Hash索引和B书索引区别
hash索引底层就是hash表,查找时,一次hash函数就可以获得对应键值,之后回表查询实际数据;
B+树底层实现是多路平衡查找树,从根节点到叶子节点方可获得所查键值
聚簇索引、非聚簇索引、联合索引
聚簇索引:根据主键创建的一颗B+树
非聚簇索引:根据索引键创建的一颗B+树
联合索引:对表上的多个列进行索引,创建方式和单个索引创建方式一样,但和单个索引相比有多个索引列

MySQL事务隔离级别

名词解释
脏读:事务A可以读到事务B为提交的数据(脏数据)
不可重复读:事务A先后两次读取同一数据,两次读取结果不一致
幻读:事务A按某条件先后2此查询数据库,查询结果条数不同
ps.MySQL数据库不支持嵌套事务
四种隔离级别
读未提交(read uncommitted):性能最好,根本不加锁,也没有隔离效果
读提交(read committed):采用多版本并发控制方式
可重复读(repeatable read):采用多版本并发控制方式
串行化(serializable):加共享锁,可并发读,不可写

2021-03-28_152702.jpg

实现可重复读
数据库中一行记录实际上可能有多个版本,除了数据本身还有版本字段
可重复读就是在事物开始的时候生成一个当前事物全局性的快照


明天面试,今天暂时写到这吧,呜呜呜

你可能感兴趣的:(Java数据库Q&A)