MySQL面试常见问题(1)

MySQL面试常见问题(1)

  1. STR函数遇到小数时如何处理?
    在使用STR函数时,如果数字为小数,则在转换为字符串数据类型时,只返回其整数部分,如果小数点后的数字大于等于5,则四舍五入返回其整数部分
  2. 是不是索引建立得越多越好?
    合理的索引可以提高查询的速度,但不是索引越多越好。在执行插入语句的时候,数据库要为新插入的记录建立索引。所以过多的索引会导致插入操作变慢。原则上是只有查询用的字段才建立索引。
  3. 视图的作用是什么?
    1.数据库视图隐藏了数据的复杂性。
    2.数据库视图有利于控制用户对表中某些列的访问。
    3.数据库视图使用户查询变得简单。
    视图是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。但是,视图并不在数据库中以存储的数据值集形式存在。行和列数据来自由定义视图的查询所引用的表,并且在引用视图时动态生成。对其中所引用的基础表来说,视图的作用类似于筛选。定义视图的筛选可以来自当前或其它数据库的一个或多个表,或者其它视图。分布式查询也可用于定义使用多个异类源数据的视图。如果有几台不同的服务器分别存储组织中不同地区的数据,而您需要将这些服务器上相似结构的数据组合起来,这种方式就很有用。通过视图进行查询没有任何限制,通过它们进行数据修改时的限制也很少。
  4. 存储过程和自定义函数的区别?
    存储过程,功能强大,可以执行包括修改表等一系列数据库操作,也可以创建为 SQL Server 启动时自动运行的存储过程。而自定义函数,用户定义函数不能用于执行一组修改全局数据库状态的操作。
    存储过程,可以使用非确定函数。自定义数,不允许在用户定义函数主体中内置非确定函数。
    存储过程,可返回记录集。自定义函数,可以返回表变量,也可以有任意个输出参数。
    存储过程,其返回值不能被直接引用,必须单独调用。自定义函数,其返回值可以被直接引用,也就是可以直接 select * from 函数。
  5. 一个表中的 Id 有多个记录,把所有这个 id 的记录查出来,并显示共有多少条记录数。select id, Count(*) from tb group by id having count(*)>1
    select * from(select count(ID) as count from table group by ID)T where T.count>1
  6. 为什么 group by 和 order by 会使查询变慢?
    group by 和 order by 操作通常需要创建一个临时表来处理查询的结果,所以如果查询结果很多的话会严重影响性能
  7. delete、truncate 和 drop 的区别?
    Delete 命令用来删除表的全部或者一部分数据行,执行 delete 之后,用户需要提交(commit)或者回滚(rollback) transaction 来执行删除或者撤销删除,delete 命令会触发这个表上所有的 delete触发器。
    Truncate 删除表中的所有数据,这个操作不能回滚,也不会触发这个表上的触发器,truncate 比 delete更快,占用的空间更小。
    Drop 命令从数据库中删除表,所有的数据行,索引和权限也会被删除,所有的 DML 触发器也不会被触发,这个命令也不能回滚。
  8. 简述数据库的设计过程。
    需求分析:主要是准确收集用户信息需求和处理需求,并对收集的结果进行整理和分析,形成需求说明。
    概念结构设计:对用户需求进行综合、归纳、抽象,形成一个与与具体的 DBMS 无关概念模型(一般为 ER 模型)。
    逻辑结构设计:将概念结构设计的概念模型转化为某个特定的 DBMS 所支持的数据模型,建立数据库逻辑模式,并对其进行优化,同时为各种用户和应用设计外模式。
    物理结构设计:为设计好的逻辑模型选择物理结构,包括存储结构和存取方法等,建立数据库物理模式。
    实施和维护:实施就是使用 DLL 语言建立数据库模式,将实际数据载入数据库,建立真正的数据库。
    维护阶段是对运行中的数据库进行评价、调整和修改。
  9. 插入记录时可以不指定字段名称吗?
    不管使用哪种 INSERT 语法,都必须给出VALUES 的正确数目。如果不提供字段名,则必须给每个字段提供一个值,否则将产生一条错误消息。如果要在 INSERT 操作中省略某些字段,这些字段需要满足一定条件:该列定义为允许空值;或者表定义时给出默认值,如果不给出值,将使用默认值。
  10. 本地索引与全局索引的差别与适用情况
    对于本地索引,每一个表分区对应一个索引分区,当表的分区发生变化时,索引的维护由数据库
    自动进行。对于全局索引,可以选择是否分区,而且索引的分区可以不与表分区相对应。当对分区进行维护操作时,通常会导致全局索引的INVALDED,必须在执行完操作后 REBUILD。
  11. 事务和锁有什么关系
    可以使用多种机制来确保数据的完整性,例如约束、触发器以及事务和锁等。事务和锁的关系非常紧密。事务包含一系列的操作,这些操作要么全部成功,要么全部失败,通过事务机制管理多个事务,保证事务的一致性,事务中使用锁保护指定的资源,防止其他用户修改另外一个还没有完成的
    事务中的数据。
  12. 谈谈你对索引的理解
    索引是若干数据行的关键字的列表,查询数据时,通过索引中的关键字可以快速定位到要访问的记录所在的数据块,从而大大减少读取数据块的 I/O 次数,因此可以显著提高性能。
  13. 谈谈你对事务的理解
    事务从 COMMIT、ROLLBACK、连接到数据库或开始第一条可执行的 SQL 语句时开始,到一条COMMIT、ROLLBACK 语句或退出数据库时结束。如果在一个事务中包含 DDL 语句,则在 DDL 语句的前后都会隐含地执行 COMMIT 语句,从而开始或结束一个事务。如果一个事务由于某些故障或者由于用户改变主意而必须在提交前取消它,则数据库被恢复到这些语句和过程执行之前的状态。利用 ROLLBACK语句可以在 COMMIT 命令前随时撤消或回退一个事务。可以回退整个事务,也可以会退部分事务,但是不能回退一个已经被提交的事务。回退部分事务的 ROLLBACK 命令为:ROLLBACK to savepoint 存储点名,存储点是用户放入事务中的标记,用来表示一个可被回退的位置。存储点通过在事务中放入一个SAVEPOINT 命令而被插入。该命令的语法是:SAVEPOINT 存储点名,如果在 ROLLBACK 语句中没有给出存储点名,则整个事务被回退。
  14. 如何设置网络数据包的大小
    一般情况下,设置网络数据包的大小可参考以下方法。如果应用程序常执行大容量复制操作或者是发送、接收大量的 text 和 image 数据的话,可以将此值设大一点。如果应用程序接收和发送的信息量都很小,那么可以将其设为 512 字节。
  15. 你对游标的理解,游标的分类?
    游标是结果集数据中的指针,作用是为遍历结果集时,存储每条记录的结果。游标分为显式游标和隐式游标。
  16. 触发器中能否用 COMMIT,为什么?
    在触发器中不能使用 COMMIT 等事务控制语句。因为触发器是事务触发的如果有事务控制语句就会影响到触发它的事务。即连带触发它的语句之前的已经完成的没有提交的语句都要受到影响。这是会影响到数据的一致性的

猜你喜欢

转载自blog.csdn.net/weixin_44051191/article/details/109167548