• 数据库整理知识


    1. 什么是三范式, 反三范式

    第一范式:所有列不可拆分
    第二范式:基于第一范式上,非主键列完全依赖于主键
    第三范式:基于第二范式上,非主键列只依赖与主键
    三范式为了没有冗余的数据,降低了运行效率

    反三范式:为了提高运行效率,提高读取性能,从而打破三范式
                        

    2. MySQL的数据类型

    整数类型:tinyInt 、smallint、mediumint、int(integer)
    小数类型:float、double、decimal(m,d)
    日期类型:year、time、date、datetime
    文本二进制类型:char、varchar 


    3. 约束 (5种)

    主键约束
    非空约束
    唯一约束
    外键约束
    检测约束

    4. 什么是事务, 为什么需要事务, 四大特性, 操作事务的语句 (开启, 提交/回滚)

    事务是一个不可分割的数据库操作系列,是数据库并发控制的基本单位,使数据库从一种一致性状态变到另一种一致性状态。    

    保证数据的一致性和完整性

    原子性:事务要么全部执行,要么全部不执行
    一致性:多个事务对同一个数据读取的结果是一样的
    隔离性:事务之间不会干扰对方
    持久性:一个事务提交后,是对数据库永久改变

    操作事务的语句:BEGIN、 COMMIT ,ROLLBACK

    5. 事务的四种隔离级别

    读未提交
    读已提交
    可重复读
    可串行化

    6. 你对索引的理解
        什么是索引

    是一种特殊文件,记录数据表中的引用指针
    是一种数据结构,协助快速查询

        优缺点

    优点:加快检测速度,提高系统性能
    缺点:时间上:创建索引和维护索引需要耗费时间,增删改需要动态维护,
              会降低执行效率
              空间上:索引占物理空间

        索引的种类

    主键索引:数据列不允许重复,不允许为空,只能有一个主键索引
    唯一索引:不允许重复
    普通索引
    全文索引

        索引的数据结构为什么是B+树

    磁盘i/o效率方面上:B+的非叶子节点不存储数据,所以每一层能存储更多的索引
            间接的减少磁盘i/o的次数
    范围查询效率方面上:B+树的叶子节点存储的是数据,用的是双向链表来关联
              只需要查询两个节点进行遍历就行了
    全表扫描方面上:只需要扫描叶子节点就可以了,不需要扫描整一棵树

          B树与B+树的区别, B+树与Hash的区别

    B树每个节点都存储 k 和  data
    B+只存在叶子节点 节点不存数据,索引可以存储更多的 k 操作效率更高

    hash 不支持范围查询


        聚簇与非聚簇的区别

    索引跟数据放在一起
    索引跟数据分开放

        回表查询

    查询的字段没有全部命中索引,需要回表查询

        最左前缀原则

    最左边的优先,where子句中需要把使用最频繁的一列放在左边

        索引失效的场景

    索引参与了表达式计算
    索引函数运算 between不会走索引
    模糊查询不会走索引
    正则表达式不走索引,检测这个串是否含有某个子串

        索引的优化

    返回所需要的列,不要使用 select *
    只返回必要的行,使用 limit 来限制返回的数据
    缓存重复查询的数据


    7. 数据库锁的种类
        按照是否独占式: 
        按照锁的粒度: 行, 页, 表

    myisam 使用的是表
    innodb 行和表

    8. 什么是死锁, 怎么解决

    两个或者多个事务在同一个资源上互相争夺,然后互相请求对方的资源,产生循环

    解决:获取资源顺序一致
              一次锁定所有资源
              提供锁的粒度 行锁 变成 表锁
              使用乐观锁


    9. 什么是乐观锁, 悲观锁

    乐观锁:假设不会发生并发冲突,在修改数据的时候把事务锁起来,用在读比较多的地方
    悲观锁:假设会发生冲突,在查询完数据的时候把事务锁起来,直到提交给事务,用在写比较多的地方

    10. 内连接与外连接的语法, 区别

    内连接有   等值连接 =  (on a.id = b.id)
        不等值连接 > (on a.id>b.id)
        自连接 inner join (select * from 表a inner join 表b on a.id=b.id)
    外连接有   左外连接 left outer join 左表为主,先查询出左表的数据,
        通过on 来连接右表,没有匹配到的用null
        右外连接
        联合查询 union 和union all 
        union all不会合并重复的列
        union 效率更高一些

    11. 左外连接与右外连接的语法, 区别

    12. 子查询的语法

    子查询返回单行单列
    查询最高的b
    select * from a where b= (select max(b) from a)
    子查询返回多行单列
    子查询返回多行多列

    13. 分组查询的语法

    group by

    14. where 与 having的区别

    where发生分组前 约束声明对数据库
    having发生在分组后,过滤声明对查询后的数据

    15. 说出常用的数据库函数
        日期
        数学
        字符串
        聚合 (统计, 分组)

    16. count (*)  count(主键id) count(1) 的区别

    17. 创建表的语法

    18. 创建索引的语法

    create table
    alter table 表名 add index 索引名字(列名)
    create index 索引名 on 表名 (列名)


    19. drop, delete, truncate的区别

    drop 删除整张表,包括表结构 ddl
    delete 删除一行数据 dml 可以回滚
    truncate 删除整张表数据 ddl

    20. 增删改查的语法

    insert into 表名(name)values(xxx);
    delete from 表名 where xx = xx
    update 表名 set 列名=xx where xxx = xxx


    21. 数据库备份和还原


         冷备份:冷备份指在数据库关闭后,进行备份,适用于所有模式的数据库.
         热备份:指与目标设备共同运转,当目标设备发生故障或停机时,热备设备立即承担起故障设备的工作任务,一般用于保证服务正常不间断运行
         温备份:定期备份数据

    22. SQL语句优化


        不要使用 select *
        在where上的列建立索引避免在where子句上使用 != <> 会是索引失效
        避免查询字段进行null判断
        避免在where 中使用 or 来连接数据 使用 union union all
        避免使用模糊查询
        in 和 not in 也会走模糊查询,使用exists 和 not exists
        


    23. 数据库优化


        限定数据查询范围
            读写分离
        分表
        分区

  • 相关阅读:
    4.10 Forms
    学生个人网页设计作品 学生个人网页模板简单个人主页成品 个人网页制作 HTML学生个人网站作业设计
    新冠病毒分型和突变分析(SARS-CoV2_ARTIC_Nanopore)
    193页5万字智慧物流园解决方案
    05.SpringCloudAlibaba-注册中心Nacos
    【第21例】IPD 体系进阶:什么是产品包?什么是需求包?
    27.集合框架-Map接口及其子类和Collections类(3)[20220728]
    Kanzi Shader入门
    碘乙酰胺在Desthiobiotin-Iodoacetamide试剂中的作用?
    AI绘画Stable Diffusion【艺术写真】:蒙版法图生图,局部重绘实现AI艺术写真
  • 原文地址:https://blog.csdn.net/ZSDLZ37/article/details/126378394