MySql 面试题

1.数据库的三大范式

1、第一范式,字段具有原子性,不可在分,所有关系型数据库都必须满足第一范式
2、第二范式,第二范式就是建立在第一范式上的,要求数据列需要唯一区分,一般都是加一列主键列
3、第三范式,第三范式是建立在第二范式上的,要求一个数据表中不包括已在其他表中非主键的字段信息

一般数据库设计中,为了方便为了速度是可以违反三大范式

2.说出一些数据库优化方面的经验?

1.有外键约束的话会影响增删改的性能,如果应用程序可以保证数据库的完整性那就去除外键
2.Sql语句全部大写,特别是列名大写,因为数据库的机制是这样的,sql语句发送到数据库服务器,数据库首先就会把sql编译成大写在执行,如果一开始就编译成大写就不需要了把sql编译成大写这个步骤了
3.如果应用程序可以保证数据库的完整性,可以不需要按照三大范式来设计数据库
4.其实可以不必要创建很多索引,索引可以加快查询速度,但是索引会消耗磁盘空间
5.如果是jdbc的话,使用PreparedStatement不使用Statement,来创建SQl,PreparedStatement的性能比Statement的速度要快,使用PreparedStatement对象SQL语句会预编译在此对象中,PreparedStatement对象可以多次高效的执行


3.怎么优化SQL查询语句吗

1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引
2.用索引可以提高查询
3.SELECT子句中避免使用*号,尽量全部大写SQL
4.应尽量避免在 where 子句中对字段进行 is null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,使用 IS NOT NULL
6. where 子句中使用 or 来连接条件,也会导致引擎放弃使用索引而进行全表扫描
7.in 和 not in 也要慎用,否则会导致全表扫描


4. 什么是事物,事物的四个特性是什么,有那些隔离级别

1.事物是数据库操作的小的工作单元,是作为单个逻辑中执行的一系列操作,他们要么就执行,要么都不执行

2.事物有四个特性
原子性:事物是一个完整的操作,要么就执行,要么都不执行
一致性:事物完成是,数据要处于一直状态
隔离性:事物与事物之间是彼此隔离的,独立的
持久性:事物完成之后对数据库是永久保存的

3.有四个隔离级别
读未提交
读提交
可重复读
序列号


5.怎么创建索引的,有什么好处,有哪些分类

1.创建索引的语法:create index depe_unique_ide on depe(dept_no) tablespace idx_
2.创建索引可以增加查询速度,唯一索引可以保证数据库列的一致性,可以确定表与表之间的连接
3.索引的分类:
                        逻辑分类:单列索引,复合索引,唯一索引,非唯一索引,函数索引
                        物理分类:B数索引,反向键索引,位图索引


6.你怎么知道SQL语句性能是高还是低

1.查看SQL的执行时间
2.使用EXPLAIN关键字可以模拟优化器执行SQL查询语句,从而知道MYSQL是如何处理你的SQL语句的。分析你的查询语句或是表结构的性能瓶颈。

7.数据库死锁了怎么办

先连接数据库死锁的发生情况,有很多种,

一般是两个事务都持有对方需要的锁,并且在等待对方释放,并且双方都不会释放自己的锁。(一个用户A 访问表A(锁住了表A),然后又访问表B;另一个用户B 访问表B(锁住了表B),然后企图访问表A;这时用户A由于用户B已经锁住表B,它必须等待用户B释 放表B才能继续,同样用户B要等用户A释放表A才能继续,这就死锁就产生了。)

防止死锁解决方案:
        1、对于按钮等控件,点击后使其立刻失效,不让用户重复点击,避免对同时对同一条记录操作。
        2、使用乐观锁进行控制。乐观锁大多是基于数据版本(Version)记录机制实现。
        3、使用悲观锁进行控制。

死锁后的解决方案,MySQL 有两种死锁处理方式:
        等待,直到超时(innodb_lock_wait_timeout=50s)。
        发起死锁检测,主动回滚一条事务,让其他事务继续执行 (innodb_deadlock_detect=on)。


8.怎么处理并发数据

从数据库方面就是加锁来处理,一般都是乐观锁和悲观锁
1.乐观锁就是通过标记值控制,每次执行SQL都判断是否是最新内容
2.悲观锁就是关闭数据库的事物自动提交功能,通过手动开启事物关闭事物,开启事物之后 第一条查询语句在后面加上for update就好了,他每次执行都加锁了


9.delete from table 与 truncate table 的区别,drop table呢

delete 是DML语言,删除了之后还是可以恢复的
truncate是DDL语言,DDL语言做的操作是不可以回滚的
drop是删除数据库中的表

10,union和union all有什么不同

UNION在进行表链接后会筛选掉重复的记录,
Union All不会去除重复记录。
对排序的处理:Union将会按照字段的顺序进行排序;UNION ALL只是简单的将两个结果合并后就返回。
所以UNION ALL 要比UNION快很多,如果可以确认合并的两个结果集中不包含重复数据且不需要排序时的话,那么就使用UNION ALL。

11.简述索引和作用

索引的作用:通过索引可以大大的提高数据库的检索速度,改善数据库性能
1.唯一索引:不允许有俩行具有相同的值
2.主键索引:为了保持数据库表与表之间的关系
3.聚集索引:表中行的物理顺序与键值的逻辑(索引)顺序相同。
4.非聚集索引:聚集索引和非聚集索引的根本区别是表记录的排列顺序和与索引的排列顺序是否一致
5.复合索引:在创建索引时,并不是只能对一列进行创建索引,可以与主键一样,讲多个组合为索引
6.全文索引: 全文索引为在字符串数据中进行复杂的词搜索提供有效支持

12.SQL和存储过程有什么差别

存储过程是一组预编译之后的SQL,经过编译之后保存到数据库中,他其中可以有一个或多个SQL,用来完成特定功能,使用存储过程的话就调用存储过程名,给其相应的参数即可调用,

SQL是数据操纵和数据定义语言,SQL包括了所有对数据库的操作


13.什么是储存过程

存储过程是一组为了完成特点功能SQL语句集,是由远程控制语句和SQL语句集合经过编译后保存到数据库服务器中,应用程序只需要调用就可以了,就像调用方法一样,通过存储过程名,给他相应的参数进行调用

存储过程有什么好处
1.安全性好,可保证数据的安全性和完整性,可以让没有权限访问的人去进行相应的操作
2.速度快,效率高:在运行存储过程之前,存储过程就已经对语法进行的分析,给了优化方案,这种已经预编译的SQL执行速度是很快的
3.减少网络流量,可以降低网络的流量
4.模块化设计了应用程序,存储过程可以封装业务逻辑,保存到数据库,要使用直接通过名称给其参数进行调用就好了

存储过程的缺点
1、很难调试存储过程。只有少数数据库管理系统允许您调试存储过程。而且,MySQL不提供调试存储过程的功能。
2.如果使用大量存储过程,那么使用这些存储过程的每个连接的内存使用量将会大大增加。

14.什么是视图,他的作用

视图是一个数据库虚拟的表,经过查询结果而成,具有普通的的结构,不能实现数据库的储存,对视图修改将会影响真实的数据表

视图的作用:
1.出于安全考虑,用户不必要看到全部的数据结构,隐藏部分的结构
2.简单性。看到的就是需要看到的。
3.隐藏了数据的复杂性,让用户日常业务逻辑更加容易理解


15.视图给开发人员带来什么好处

1.结果更加容易理解,获得数据更容易
2.限制了数据检索更加容易,维护应用方便

16.怎么创建视图,删除视图

创建:create view 视图名 as <查询语句>
删除:drop view 视图名
使用视图查询的话:select * from 视图名


17.MySql, Oracle,Sql Service的区别

1,Sql Service只能在Windows上使用,而MySql和Oracle可以在其他系统上使用, 而且可以支持数据库不同系统之间的移植
2,MySql开源免费的,Sql Service和Oracle要钱。
3,我从小到大排序哈,MySql很小,Sql Service居中,Oracle最大
4, Oracle支持大并发量,大访问量,Sql Service还行,而MySql的话压力没这么大,因此现在的MySql的话最好是要使用集群或者缓存来搭配使用
5,Oracle支持多用户不同权限来进行操作,而MySql只要有登录权限就可操作全部数据库
6. 安装所用的空间差别也是很大的,Mysql安装完后才几百M而Oracle有几G左右,且使用的时候Oracle占用特别大的内存空间和其他机器性能。
7.做分页的话,MySql使用Limit,Sql Service使用top,Oracle使用row
8.Oracle没有自动增长类型,Mysql和Sql Service一般使用自动增长类型

18.内连接,左连接,右连接的区别

内连接是查询俩张表向对应的ID
左连接是查询左边有的Id就显示,右边没有的空值填充
右连接是查询右边有的Id就显示,左边没有的空值填充

19.数据库经常使用的函数

count,sum,max,min,avg,date


20,SQL语句的语法顺序:

SELECT
FROM
JOIN
ON
WHERE
GROUP BY
HAVING
UNION
ORDER BY
LIMIT


21,SQL的执行顺序

FROM:将数据从硬盘加载到数据缓冲区,方便对接下来的数据进行操作。
WHERE:从基表或视图中选择满足条件的元组。(不能使用聚合函数)
JOIN(如right left 右连接-------从右边表中读取某个元组,并且找到该元组在左边表中对应的元组或元组集)
ON:join on实现多表连接查询,推荐该种方式进行多表查询,不使用子查询。
GROUP BY:分组,一般和聚合函数一起使用。
HAVING:在元组的基础上进行筛选,选出符合条件的元组。(一般与GROUP BY进行连用)
SELECT:查询到得所有元组需要罗列的哪些列。
DISTINCT:去重的功能。
UNION:将多个查询结果合并(默认去掉重复的记录)。
ORDER BY:进行相应的排序。
LIMIT 1:显示输出一条数据记录(元组)

你可能感兴趣的:(面试题,mysql)