数据库部分面试题(一)

数据库面试题

点击这里关注GitHub,期待您的参与!

  1. MySQL 如何做分页?

    MySQL 数据库做分页用 limit 关键字,它后面跟两个参数 startIndex 和 pageSize

  2. MySQL 引擎有哪些?各自的区别是什么?

    1. InnoDB 和 MyIsam 。

    2. 区别:

      特性 InnoDB MyIsam
      事物 支持 不支持
      外键 支持 不支持
      全文索引 不支持 支持
      其它 提供提交,回滚,崩溃回复能力的事物安全能力,实现并发控制 提供较高的插入和查询记录的效率,主要用于插入和查询
  3. 数据库如何建立索引?

    create index account_index on `table name `(`字段名`(length)
    
  4. 同一张表的多个字段如何创建组合索引?

    create index account_index on `table name `(`字段名`,'字段名')
    
  5. 如何应对数据的高并发和大量数据计算?

    • 创建索引。
    • 数据库读写分离(一个负责读,一个负责写)。
    • 去掉外键。
    • Django 中 ORM 表优化:
      • select_related:一对多使用,查询主动做连表。
      • prefetch_related:多对多或者一对多的时候使用,不做连表,做多次查询。
  6. 什么叫做内连表、左连表和右连表?

    • 内连接是根据某个条件连接两个表共有的数据。
    • 左连接是根据某个条件以及左边的表连接数据,右边的表没有数据的话则为 null。
    • 右连接是根据某个条件以及右边的表连接数据,左边的表没有数据的话则为 null。
  7. 视图和表有何区别?

    • 视图是已经编译好的 sql 语句,是基于 sql 语句的结果集的可视化的表,而表不是。
    • 视图是窗口,表示内容。
    • 视图没有实际的物理记录,而表有。
    • 视图的建立和删除只影响视图本身,不影响对应的表。
  8. 关系型数据库有何特点?

    • 数据集中控制
    • 数据独立性高
    • 数据共享性好
    • 数据冗余度小
    • 数据结构化
    • 数据保护能力统一
  9. MySQL 数据库都有哪些索引?

    • 普通索引:普通索引仅有一个功能:加速查找
    • 唯一索引:唯一索引两个功能:加速查找和唯一约束(可含 null)
    • 外键索引:外键索引两个功能:加速查找和唯一约束(不可为 null)
    • 联合索引:联合索引是将 n 个列组合成一个索引,应用场景:同时使用n列来进行查询
  10. 存储过程

    存储过程不允许执行 return 语句,但是可以通过 out 参数返回多个值,存储过程一般是作为一个独立的部分来执行,存储过程是一个预编译的 SQL 语句。

  11. SQL 有哪些优化方式?

    • 选择最有效率的表名顺序(只在基于规则的优化器中有效)。
    • WHERE子句中的连接顺序。
    • SELECT子句中避免使用‘*’。
    • 减少访问数据库的次数。
    • 在 SQLPlus , SQLForms 和 Pro*C 中重新设置 ARRAYSIZE 参数, 可以增加每次数据库访问的检索数据量 ,建议值为200。
    • 使用 DECODE 函数来减少处理时间。
    • 整合简单,无关联的数据库访问。
    • 删除重复记录。
    • 用 TRUNCATE 替代 DELETE。
    • 尽量多使用COMMIT。
    • 用 Where 子句替换 HAVING 子句。
    • 减少对表的查询。
    • 通过内部函数提高SQL效率。
    • 使用表的别名(Alias)。
    • 用 EXISTS 替代 IN、用 NOT EXISTS 替代 NOT IN。
    • 用EXISTS替换DISTINCT
    • SQL 语句用大写的(因为 Oracle 总是先解析 SQL 语句,把小写的字母转换成大写的再执行)。
    • 其它。
  12. char 和 vachar 区别?

    • char 是固定长度,存储需要空间12个字节,处理速度比 vachar 快,费内存空间。
    • vachar 是不固定长度,需要存储空间13个字节,节约存储空间。
  13. Mechached 与 redis区别?

    • mechached
      • 缺点:
        • 只支持字符串。
        • 不能持久化。
        • 数据仅存在内存中。
        • 宕机或重启数据将全部失效。
        • 不能进行分布式扩展,文件无法异步法。
      • 优点:
        • mechached 进程运行之后,会预申请一块较大的内存空间,自己进行管理。
    • redis
      • 优点:
        • 支持服务器端的数据类型,redis 与 memcached 相比来说,拥有更多的数据结构。
        • 并发支持更丰富的数据操作
        • 可持久化。
        • 五大类型数据:string、hash、list、set 和有序集合。
      • 缺点:
        • 数据库的容量受到物理内存的限制。
        • redis 是单进程单线程的。
  14. 什么是 SQL 注入?如何防止?

    • SQL 注入是比较常见的攻击方式之一,针对编程员编程的疏忽,通过 SQL 语句,实现账号无法登陆,甚至篡改数据库。
    • 防止:
      • 切记变量不要用拼接字符串的方法。
      • 检查变量数据类型和格式。
      • 过滤特殊符号。
      • 绑定变量,使用预编译语句
      • 严格加密处理用户的机密信息
  15. 什么是触发器?

    • 触发器是一种特殊的存储过程,主要是通过事件来触发而被执行的,他可以强化约束,来维护数据库的完整性和一致性,可以跟踪数据内的操作从而不允许未经许可的更新和变化,可以联级运算。

    注意:只有表支持触发器,视图不支持触发器。

  16. 游标是什么?

    • 是对查询出来的结果集作为一个单元来有效的处理,游标可以定在该单元中的特定行,从结果集的当前行检索一行或多行,可以对结果集当前行做修改。
    • 一般不使用游标,但是需要逐条处理数据的时候,游标显得十分重要。
  17. 数据库支持多有标准的 SQL 数据类型,主要分为哪些类?

    • 数值类型(tinyint,int,bigint,浮点数,bit)
    • 字符串类型(char和vachar,enum,text,set)
    • 日期类型(date,datetime,timestamp)
  18. 什么是慢查询?如何通过慢查询日志优化?

    • MySQL 会记录下查询超过指定时间的语句,我们将超过指定时间的 SQL 语句查询称为慢查询,都记在慢查询日志里。
  19. 如何提高 Memcached 命中率?

    • 程序端过滤掉非法请求。
    • 使用一致性哈希算法。
    • 数据生成时就写入到缓存中,避免预热数据时访问数据库。
    • 设置合理的数据过期时间,减少因为数据过期产生的并发穿透。
    • 设置主从,主从过期时间不同。
  20. Oracle 和 MySQL 有何使用上的区别?如何选择?

    • 区别:
      • 主键:MySQL 可使用自动增长类型(AUTO INCREMENT);Oracle 中没有自动增长。
      • 单引号的处理:MySQL 里可以使用双引号来包起字符串;Oracle 里要使用单引号包起字符串。
      • 分页查询:MySQL 中分页很简单,因为他有专门的关键字 LIMIT 来实现分页查询;Oracle 里面没有,实现起来比较复杂。
      • 长字符串的处理:Oracle 有一个 CLOB 类型专门用于在 INSERT 或者 UPDATE 时候字符串长度大于等于4000个单字节时;MySQL 没有。
      • 修改表的数据:Oracle 数据库在使用表的数据操作时,需要用 SQL 语句来执行,修改完了之后记得点击提交事务按钮;MySQL 中可直接修改或添加数据。
    • 选择 MySQL:
      • MySQL 免费开源。
      • MySQL 轻便快捷。
      • MySQL 对命令行和图形界面的支持都很好。
      • MySQL 支持通过 Query Browser 进行管理。

猜你喜欢

转载自blog.csdn.net/qq_33567641/article/details/84451504
今日推荐