mysql常问面试题

MySQL常问的面试题

1.数据库的三大范式:

1)第一范式:表示数据库表中的字段具有原子性,不可再分。(所有的关系型数据库都必须满足第一范式)数据库表中的字段是单一属性,不可再分的。举例:姓名字段,其中的姓和名必须作为一个整体,无法区分出哪部分是姓哪部分是名,如果一定要区分的话必须设计出2个独立的字段。

2)第二范式:是在第一范式的基础上建立起来的,即满足第二范式前必须先满足第一范式。要求数据库表中必须要有一个字段作为主键用来唯一标识。

3)第三范式:满足第三范式必须先满足第二范式,第三范式的要求是一个表中不包含已存在于其他表中的已包含的非主关键字信息。  

 第三范式的特征如下: 

  1. 每一列只有一个值;
  2. 每一行都能够区分;
  3. 每一个表中不包含已存在于其他表中的非主关键字信息。

2.MySQL和oracle数据库的区别?

  1. Oracle是大型数据库,MySQL是中小型数据库;
  2. Oracle是收费的,MySQL是免费开源的;
  3. Oracle需要手动提交事务,MySQL默认是自动提交事务的;
  4. Oracle的分页实现是通过rownum函数实现,MySQL是通过limit关键字实现的分页;
  5. Oracle的事务隔离级别是Read Commited(读已提交),MySQL隔离级别是Repeatable Read(可重复读)

3.数据库性能优化的经验

  1. 从JDBC的角度来讲使用preparedStatement比statement的性能高,因为在使用的时候,SQL被预编译存储在preparedStatement对象中,利用它可以多次高效率的执行该SQL。且preparedStatement对象是通过占位符操作SQL的,可以有效的防止SQL注入式攻击。
  2. 有外键约束会影响插入和删除的性能,如果程序能够保证数据的完整性,那在设计数据库的时候就可以去掉外键。
  3. SQL语句全部大写,且避免使用*,用集体的字段查询;(SQL执行机制会先把SQL转为大写再执行)
  4. 经常需要查询,而不经常修改的数据,我们可以给它加索引,提高查询效率。
  5. 尽量避免在WHERE子句中对字段进行null值判断,避免使用NOT IN作为条件判断,否则将导致引擎放弃使用索引而进行全表扫描。

4.MySQL中的事务,以及事务的四个特性是什么?以及事务的隔离级别有哪些?

1)事务:是数据库操作的最小工作单元,是作为单个逻辑工作单元执行的一系列操作;这些操作作为一个整体一起向系统提交,要么都执行,要么都不执行。事务是一组不可再分割的操作集合;

2)ACID特性:

  1. 原子性:事务是一个完整的操作,要么都执行,要么都不执行;
  2. 一致性:数据提交后,必须保持一致状态;
  3. 隔离性:当前事务的操作不会影响到其他事务的操作,事务与事务之间是彼此隔离的;
  4. 持久性:事务提交后,数据会被永久保存,以及先关的日志也会被永久保留。

3)隔离级别分为:

  1. 读未提交:一个事务读取了另外一个并行事务未提交的数据                                                【导致:脏读    解决:更新丢失数据
  2. 读已提交:一个事务再次读取之前的数据时得到的数据不一致,被另外一个事务修改                              【导致:不可重复读  解决:丢失数据和脏读
  3. 可重复提交:一个事务重新执行一个查询,返回的记录包含了其他事务提交的新记录            【导致:幻读  解决:丢失数据、脏读、幻读
  4. 可串行化:通过强制事务排序,使之不可能相互冲突,在每个读的数据行上加上共享锁。

5.MySQL中有哪些锁?

  1. 共享锁:共享锁就是你和另外一个用户可以同时共享数据,但是你和他都不能修改。(读锁 )
  2. 排它锁:当你在修改数据的时候,别人也可以查看,但是他不能修改数据并提交,只能优先你的操作,等你向数据库提交了数据之后他才能执行增删改的操作,这就是排它锁。(写锁)
  3. 表锁:对当前操作的进行加锁;
  4. 行锁:对当前操作的进行加锁;
  5. 乐观锁:对数据的处理持乐观态度,乐观的认为数据一般情况下不会发生冲突,只有提交数据更新时,才会对数据是否冲突进行检测。(发生冲突则会抛出异常)
  6. 悲观锁:对于数据的处理持悲观态度,总认为会发生并发冲突,获取和修改数据时,别人会修改数据。所以在整个数据处理过程中,需要将数据锁定。

6.什么是存储过程?有什么优缺点?

存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,是由流程控制和SQL语句书写的命名语句块,经编译和优化后存储在数据库服务器中,应用程序使用时只要调用即可,可以通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来调用。

优点:

  1. 具有良好的安全性:可保证数据的安全性和完整性;
  2. 执行速度快,效率高;

缺点:

  1. 相对而言,调试比较麻烦;
  2. 数据库的移植问题。
  3. 代码可读性差;

7.存储过程与SQL的区别?

存储过程是一组预编译的SQL语句,经编译后存储在数据库中,可包含一个或多个SQL语句。能够完成一定功能的子程序,需要的时候用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程可以包含数据操作语言,逻辑和调用函数等;它又可分为系统存储过程和用户自定义的存储过程。SQL指结构化查询语言,是一种ANSI的标准计算机语言。

8.MySQL中常见的引擎

Innodb引擎:提供了对数据库ACID事务的支持,并且实现了SQL标准的四种隔离级别。该引擎还提供了行级锁和外键约束。

MyISAM引擎:是MySQL默认的引擎,但是它没有提供对数据库事务的支持,也不支持行级锁和外键,因此当INSERT(插入)或UPDATE(更新)数据时即写操作需要锁定整个表,效率便会低一些。

MEMORY:所有的数据都在内存中,数据的处理速度快,但是安全性不高。如果需要很快的读写速度,对数据的安全性要求较低,可以选择MEMOEY。它对表的大小有要求,不能建立太大的表。所以,这类数据库只使用在相对较小的数据库表。

9.索引的理解

建索引的语法:create index 索引名 on 表名(列名);

索引的分类:

  1. 唯一索引:唯一索引不允许两行具有相同的索引值;
  2. 主键索引:在数据库关系图中为表定义一个主键自动创建主键索引,主键索引是唯一索引的特殊类型
  3. 聚集索引:在聚集索引中表中各行的事物顺序与键值的逻辑(索引)顺序相同且唯一;
  4. 非聚集索引:非聚集索引建立在索引页上,在查询数据时可以从索引中找到记录存放的位置
  5. 复合索引:在创建索引时,并不是只能对其中一列创建索引,与创建主键一样,可以将多个列组合作为索引,这种索引称为复合索引
  6. 全文索引:全文索引是一种特殊类型的基于标记的功能性索引,由SQL Server 中    全文引擎服务创建和维护;

作用:创建索引可以大大提高系统的性能。第一,通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。第二,可以大大加快数据的检索速度。

什么情况下设置了索引但无法使用,导致索引失效?

  1. 使用!= 或者 <> 导致索引失效
  2. 类型不一致导致的索引失效
  3. 函数导致的索引失效
  4. 运算符导致的索引失效(+,-,*,/,!)
  5. OR引起的索引失效;
  6. 模糊搜索导致的索引失效(‘%刘’)

10.主外键的关系

1.主键是能确定一条记录的唯一标识,比如,一条记录包括身份正号,姓名,年龄。

2.外键用于与另一张表的关联。是能确定另一张表记录的字段,用于保持数据的一致性。

11.CHAR和VARCHAR的区别?

char表示的是固定长度,所占存储空间为你定义时的大小,数据量较大的时候以char字段为查询条件时查询得快一些。

varchar表示的是实际占据的长度,所占存储空间是你实际使用的大小。

char最多存储255个字符,varchar最多能存储65532 个字符。

12.在开发过程中遇到过数据库锁吗?怎样解锁?

1)如果oracle中有事务未提交,又打开一个窗口去提交一个新的事务则可能会产生数据库锁。
2)解锁的方式:
        a)    结束当前的session(会话,此处指和数据库的通讯)自动解锁
例如,退出当前数据库连接所用的工具或应用程序.   
        b)    利用dba权限强行关闭掉了执行Lock操作的Session.
示例:通过以上查询知道了sid和 SERIAL#(流水号)就可以开杀(就是去关掉会话,俗称杀掉会话)了
      查询出对应会话操作的sid和serial
    SELECT   sid,   serial#,   username,   osuser   FROM   v$session;

13.delete  from  table  与  truncate  table的区别?drop table呢?

  1. Truncate是数据定义语言(DDL)做的修改是不能回滚的,就是不可恢复的操作。用了这个命令后就收回了表空间。Delete是数据操作语言(DML)删除是要把数据写入系统回滚段(rollback segement)中以便恢复时使用;
  2. 两者都是删除表中的数据而不会影响到表的结构和定义;
  3. 使用drop 的话就会删除表的结构;

14.union和union all有什么不同?

UNION在进行表连接后会筛选掉重复的记录,所以在表连接后会对所产生的结果集进行排序运算,删除重复的记录再返回结果。
 而UNION ALL只是简单的将两个结果合并后就返回。这样,如果返回的两个结果集中有重复的数据,那么返回的结果集就会包含重复的数据了。
 从效率上说,UNION ALL 要比UNION快很多,所以,如果可以确认合并的两个结果集中不包含重复的数据的话,那么就使用UNION ALL;

15.SQL语言包含哪几部分?没部分都有哪些操作的关键字?
SQL语言包括数据定义(DDL)、数据操纵(DML),数据控制(DCL)和数据查询(DQL)四个部分。
数据定义:Create Table,Alter Table,Drop Table, Create/Drop Index等
数据操纵:Select ,insert,update,delete,
数据控制:grant,revoke
数据查询:select

16. 什么是视图?它的作用?

视图是一个数据库中虚拟的表,经过查询操作形成的结果,具有普通表的结构,不能实现数据的存储,对视图的修改 将会影响实际的数据表 
作用:
      1:是出于安全考虑,用户不必看到整个数据结构,而隐藏部分数据;
      2:符合用户日常业务逻辑,使他们对数据更容易理解;
视图给用户和开发人员带来的好处    
     1)    对最终用户的好处:结果更容易理解,获得数据更容易;
     2)    对开发人员的好处:限制数据检索更容易,维护应用程序更方便    ;
  如何创建视图?
          语法:create view 视图名  AS  <select 语句> 
  如何删除视图?
drop  view  视图名
17.BLOB和TEXT有什么区别?

BLOB是一个二进制对象,可以容纳可变数量的数据。TEXT是一个不区分大小写的BLOB。
BLOB和TEXT类型之间的唯一区别在于对BLOB值进行排序和比较时区分大小写,对TEXT值不区分大小写。

18.MySQL的主从复制?

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值