数据库和缓存--【python】面试题汇总

1.列举常见的关系型数据库和非关系型数据库都有哪些

  关系型数据库:
        oracle,mysql
    非关系型数据库:
        MongoDB,redis

    关系型数据库的特性:
        1.关系型数据库,是指采用了关系模型来组织数据的数据库
        2.关系型数据库的最大特点就是事务的一致性
        3.关系模型指的就是二维表格模型
    关系型数据库的优点:
        1.容易理解

        2.便用方便
            通用的sql语言使得操作关系型数据库非常方便
        3.易于维护
            丰富的完整性大大降低了数据冗余和数据不一致的概率
        4.支持sql
            可用于复杂的查询

    关系型数据库的缺点:
        1.读写性能比较差
        2.固定的表结构
        3.高并发读写需求
        4.海量数据的高效读写

    非关系型数据库:
        1.使用键值对存储数据
        2.分布式
        3.一般不支持ACID特性
        4.非关系型数据库严格上不是一种数据库,而是一种数据结构化存储方法的几个
    优点:
        无需经过sql层的解析,读写性能很高
        基于键值对,数据没有耦合性,容易扩展
    缺点:
        不提供sql
        无事务处理

2.Mysql常见数据库引擎及比较

  Myisam:
        默认的插件式存储引擎。
    InnoDB:
        用于事务处理应用程序,具有众多特性,包括ACID事务支持
        
    Memory:
        将所有数据保存在RAM中,在需要快速查找引用和其他类似数据的环境下,可以提供极快的访问

3.简述数据三大范式

  第一范式:原子性
        字段不可再分,否则将不是关系型数据库
    第二范式:唯一性
        一个表只能说明一个事物
    第三范式:每列都与主键有直接关系,不存在传递依赖
        非主键字段不能相互依赖

4.什么是事务,mysql如何支持事务

  只有存储引擎为INNODB的MYSQL数据库才支持事务
    事务处理可以用来维护数据库的完整性,保证成批的sql语句要么全部执行要么全部不执行
    ACID事务的四个特点:
        A:原子性
            要么全部完成,要么全部不完成
        C:一致性
            在事务开始之前和事务结束之后,数据库的完整性没有被破坏
        I:隔离性
            数据库允许多个并发事务同时对其数据进行读写和修改的能力
        D:持久性
            事务处理结束后,对数据库的修改是永久的

    Mysql事务处理主要有两种方法:
        1.用BEGIN,ROLLBACK,COMMIT来实现
            BRGIN开始一个事务
            ROLLBACK事务回滚
            COMMIT事务确认
        2.直接用SET来改变MYSQL的自动提交模式
            SET AUTOCOMMIT=0 禁止自动提交
            SET AUTOCOMMIT=1 开启自动提交
    事务做持久化是为了应对数据库奔溃的情况

5.简述数据库设计中一对多和多对多的应用场景

  一对多:
        一个球队拥有多名球员,而一名球员只应对应一个球队,球队和球员的关系就是一对多的关系

    多对多:一们课程有若干个学生选修,一个学生可以同时选修多们课程

6.如何基于数据库实现商城商品计数器   

  

创建一个商城表--包含(id,商品名,每一个商品对应的数量)
    create table product
        (id primary key auto_increment,
            pname varchar(64),
            pcount int);

7.常用sql

  

  1.创建数据库
        create database mydata
    2.选择
        select * from table1 where 范围
    3.插入
        insert into table1(field1,field2) values(value1,value2)
    4.删除
        delete from table1 where 范围
    5.更新
        update table1 set field1=value1 where 范围
    6.查找
        select * from table1 where field1 like '%value1%'
    7.排序
        select * from table1 order by field1,field2 desc
    8.总数
        select count as totalcount from table1
    9.求和
        select sum(field1) as sumvalue from table1
    10.平均
        select avg(field1) as avgvalue from table1
    11.外联
        select a.a,a.b,a.c,b.c,b.d,b.f from a left join b on a.a=b.c

8.简述触发器,函数,视图,存储过程

  触发器是一个特殊的存储过程,它是mysql在insert,update,delete的时候自动执行的代码块
        create trigger trigger_name
            after/bofore insert/update/delete on 表名
            for each row
            begin
            sql语句:
            end
        触发器针对每一行
    视图是一个虚拟表,其本质是根据sql语句获取动态的数据集,并为其命名,用户使用时只需使用名称即可获取结果集,并可以将其当作表来使用

    存储过程
        一组可以编程的函数,是为了完成特定功能的sql语句集,经编译创建并保存在数据库中,用户可以通过指定存储过程的名字并给定参数来调用执行
    优点:
        将重复性很高的一些操作,封装到一个存储过程中,简化了对这些sql的调用
        批量处理:sql+循环,减少流量
        统一接口,确保数据安全

9.mysql索引种类

  普通索引
    唯一索引
        索引列的值必须唯一,但允许有空值
    主键索引
        一种特殊的唯一索引,一个表只能有一个主键,不允许有空值
    组合索引
    全文索引

    索引大大提高查询速度,降低更新表的速度
    索引需要花时间进行优化

10.索引在什么情况下遵循最左前缀规则

  比如我们想在a,b,c三个字段上建立一个联合索引,这里我们就需要选择优先级

11.主键和外键的区别

  主键是能缺点一条记录的唯一标识
    外键用于另一张表的关联

12.mysql常见的函数

  聚集函数
        agv,count,max,min,sum
    处理字符串的函数
        字母大小写转换去空,替换
    处理数值的函数
        绝对值,向上取整,四舍五入

13.列举创建索引但是无法命中索引的8种情况

 1.条件中有or
    2.多列索引,不是使用的第一个
    3.like查询以%开头
    4.列类型是字符串,但是没有用引号引起来
    5.如果mysql估计使用全表扫描要比使用索引快,则不使用索引

14.如何开启慢日志查询

 slow_query_log # 是否开启慢日志查询,默认off
    slow_query_log_file #慢日志文件存储位置
    log_queries_not_using_indexes #是否把没有使用到索引的sql记录到日志中,默认off
    long_query_time #超过多少秒的查询才会记录到日志中,单位是秒

15.数据库导入导出命令(结构+数据)

  导出某个数据库
        mysqldump -u root -p data > test.sql

16.数据库优化方案

 数据结构,sql,索引是低成本方案
    硬件是高成本方案

17.char和varchar的区别

 char定义的列长度固定,范围是0~255
    varchar定义的列长度是可变长度

18.简述mysql的执行计划

 select_type
    type
    ref
    extra

19.在对name做了唯一索引的前提下,简述以下区别:

 select * from tb where name = ‘Oldboy-Wupeiqi’ 

    select * from tb where name = ‘Oldboy-Wupeiqi’ limit 1

20.什么是索引合并    

  把几个索引的范围扫描合并成一个索引

原文地址:https://www.cnblogs.com/bk770466199/p/12671990.html