zoukankan      html  css  js  c++  java
  • 数据库常见面试题

    1、触发器的作用?

    触发器是一种特殊的存储过程,主要通过事件触发而被执行。可以强化约束,来维护数据的完整性和一致性,可以跟踪数据库内的操作而不允许未经许可的更改和变化,可以级联运算,如:某表上的触发器上包含对另一个表的数据操作,而该操作又会导致该表触发器被触发。

    2、什么是存储过程?用什么来调用?

    存储过程是一个预编译的SQL语句。优点是允许模块化的设计,就是说只需创建一次,以后在该程序中就可以调用多次。如果某次操作需要执行多次SQL,使用存储过程比单纯SQL语句执行要快。调用:1)可以用一个命令对象来调用存储过程 2)可以供外部程序调用,比如:Java程序

    3、存储过程的优缺点?

    优点:1)存储过程是预编译过的,执行效率高 2)存储过程的代码直接存放于数据库中,通过存储过程名直接调用,减少网络通讯 3)安全性高,执行存储过程需要有一定权限的用户 4)存储过程可以重复使用,可以减少数据库开发人员的工作量

    缺点:移植性差

    4、索引的作用?优缺点?

    索引是一种特殊的查询表,数据库的搜索可以利用它加速对数据的检索。他很类似与现实生活中的目录,不需要查询整本书的内容就可以找到想要的数据。索引可以是唯一的,创建索引允许指定单个列或者是多个列。缺点是减慢了数据录入的速度,同时也增加了数据库的尺寸大小

    5、什么样的字段适合创建索引?

    唯一、不为空、经常被查询的字段

    6、索引的类型有哪些?

    逻辑上

    单行索引、多行索引、唯一索引、非唯一索引、函数索引、域索引

    物理上:

    分区索引、非分区索引

    7、什么是事务?什么是锁?

    事务就是被绑定在一起作为一个逻辑工作单元的SQL语句分组,如果任何一个语句操作失败,以后的操作就会回滚到操作前状态,或者是上一个节点。为了确保要么执行,要么不执行,就可以使用事务。要将有组语句作为事务考虑,就需要通过ACID测试,即原子性,一致性,隔离性和持久性。

    锁:是实现事务的关键,所可以保证事务的完整性和并发行,与现实生活中的锁一样,可以使某些数据的拥有者,在某段时间内不能使用某些数据或者数据结构。

    8、什么是视图?优缺点?

    视图:是一种虚表,其本质是一个SQL语句,为了方便查询,是一个表或者多个表的行或列的子集。对视图的修改会影响基本表。视图创建后不会自动消失,必须人为删除。

    视图的优缺点?

    优点:1)对数据库的访问,因为视图可以有选择性的选取数据库里的一部分。2)用户通过简单的查询可以从复杂查询里得到结果。3)维护数据的独立性,视图可从多个表检索数据 4)对于相同的数据,可以产生不同的视图

    缺点:性能:查询视图时,必须把视图的查询转换成对基本表的查询,如果这个视图是又由一个复杂的多表查询所定义,那么就无法更改数据

    9、列举几种表的连接方式?区别?

    内连接、自连接、外连接、交叉连接

    内连接:只有两个元素表相匹配的才能在结果集中显示。

    外连接:

    左外连接:左边为驱动表,驱动表的数据全部显示,匹配表的不匹配的不会显示。

    右外连接:右边为驱动表,驱动表的数据全部显示,匹配表的不匹配的不会显示。

    全外连接:连接的表中不匹配的数据全部会显示出来。

    交叉连接: 笛卡尔效应,显示的结果是链接表数的乘积。

    10、主键和外键的区别?

    主键在本表中是唯一的,不可为空的,外键可以重复,可以为空

    外键和另一张表的主键关联,不能创建对应表中不存在的外键

    11、在数据库中查询语句速度很慢时,如何优化?

    1)创建索引 2)减少表之间连接 3)优化sql,尽量让sql很快定位数据,不要做全表查询,尽量使用索引,把数据量大的表排在前面 4)简化查询字段,没用的字段不要,尽量返回少量数据 5、尽量用PreparedStatement来查询,不要用Statement

    12、当数据库的数据量很大时,有什么优化方案?

    1)创建索引 2)对缓存进行配置,修改缓存的大小,当再次查询相同的条件时,可以从缓存中进行获取 3)对慢查询日志进行分析,进行有目的的优化 4)分库分表,对数据量进行分流 5)子查询优化,子句中用到in或exist关键字时,可以用join查询替代,服务器对join的查询优化远高于子查询优化

    13、数据库的三范式?

    第一范式:列不可再分

    第二范式:行可以唯一区分,主键约束

    第三范式:表的非主属性不能依赖与其他表的非主属性 外键约束

    14、varchar和char的区别?

    char定长,varchar为边长;char中英文字符占一字节,中文占两字节,varchar中英文字符均占两字节

    15、从数据库中随机取50条数据

    select * from 表 order by rand() limit50;

    16、order by 和 group by

    order by:排序查询:desc 降序  asc 升序

    group by:分组查询:having 只能用于group by子句、作用于组内,having条件子句可以直接跟函数表达式。使用group by 子句的查询语句需要使用聚合函数。

  • 相关阅读:
    剑指Offer——构建乘积数组
    剑指Offer——把二叉树打印成多行
    剑指Offer——二叉树的下一个结点
    剑指Offer——二叉搜索树与双向链表
    剑指Offer——二叉搜索树的后序遍历序列
    LeetCode——Construct Binary Tree from Inorder and Postorder Traversal
    LeetCode——Construct Binary Tree from Preorder and Inorder Traversal
    剑指Offer——重建二叉树2
    C++ STL基本容器的使用
    mysql中模糊查询的四种用法介绍
  • 原文地址:https://www.cnblogs.com/czhang2-12/p/9645078.html
Copyright © 2011-2022 走看看