(三)MySql 面试题

数据库

51、简单说一说drop、delete与truncate的区别

drop 用于删除数据库表结构
delete 删除数据,可以回滚
truncate 删除结构重新构建,不可以回滚

基于mysql
delete不重置自动增长列的计数值
truncate重置自动增长列的计数值

52、什么是主键?什么是外键?并说出它们的作用

主键:唯一标识一条记录的字段或字段的组合称为主键。
(主键不能重复,也不允许为空)
外键:用来维护两个表之间数据的一致性。
(外键可以有重复的, 也允许有空值)

作用:
主键:用来保证数据完整性,保证记录的唯一性
外键:通过设置外键和其他表建立关联关系(一对一,一对多,多对多)

53、数据库三范式是什么( 1至6范式分别是什么? )

char是一种固定长度的字符串类型,
varchar是一种可变长度的字符串类型;

适用场景:
char一般用来存储长度固定字段,如:手机号,身份证号等
varchar一般用来存储不固定长度的字段:如:用户名,昵称等

54、说出不小于3种mysql数据库支持的约束,并说明它们的使用场景

1. 主键约束:在主键上使用
2. 外键约束:建立俩个表之间的关系时使用
3. 唯一约束:保证数据表中某个字段数据的唯一性时使用
4. 非空约束:需要保证数据库字段值不为空时使用
5. 自动增长列:数据值自增时使用,字段类型必须是整数,且必须使用主键修饰。

55、说出5种SQL中常用的聚合函数,并说明它们的作用

1. avg():返回指定组中的平均值,空值被忽略;
2. count():返回指定组中的项目个数
3. max():返回指定数据中的最大值;
4. min():返回指定数据中的最小值;
5. sum():返回指定数据的和,只能用于数字列,空值忽略;

56、说出SQL中内连接、左连接、右连接的区别

内连接:是从结果表中删除与其他被连接表中没有匹配行的所有行

左连接(左外连接):以左表作为基准进行查询,左表数据都显示,连接条件成立右表数据显示,条件不成立显示null

右连接(右外连接):以右表作为基准进行查询,右表数据都显示,连接条件成立左表数据显示,条件不成立显示null

57、谈谈数据库连接池的作用

作用:
1.资源重用,避免了数据库连接频繁建立、关闭的开销
2.更快的系统响应速度,直接从连接池中获取连接,响应速度加快
3.控制资源的使用,连接池能自动维护池中的连接数量,提高资源的利用率。
常用的数据库连接池:DBCP、C3P0、Druid

58、数据库有100条数据,怎么查询第50,51条

select * from table_name limit 49, 2

原因:MySQL的limit用法:
select * from table limit m,n
其中m是指记录开始的index,从0开始,表示第一条记录;n是指从第m+1条开始,取n条。

59、什么是数据库事务

事务:业务中的一组操作,要么全部成功,要么全部失败,不可分割的工作单位。

60、数据库事务的四大特性(标红)

数据库事务的四大特性为:ACID,分别是原子性、一致性、隔离性和持久性
原子性:数据库事务是不可分割的工作单位,操作要么全部成功,要么全部失败;即事务中任何一个SQL
执行失败,那么已经执行成功的SQL语句也必须撤回,数据库状态应该退回到执行事务前的状态。
一致性:一个事务执行前后,表中数据必须保持一致。
隔离性:事务的隔离性是指在并发环境中,并发的事务是互相隔离的,一个事务的执行不能被其它事务干扰;
持久性:事务一旦提交后,其结果就是永久性的,即使发生宕机等故障,数据库也能将数据恢复。

61、事务并发访问会产生的问题(标红)

脏读:一个事务读取到了另一个事务中尚未提交的数据。
例:事务A读取了事务B更新的数据,然后B回滚操作,那么A读取到的数据是脏数据。

不可重复读:一个事务读取到了另一个事务中已经提交的数据,通常为update时
引发的问题。
例:事务A多次读取同一数据,事务B在事务A多次读取的过程中,对数据作了更新并提交,导致事务 A 多次读取同一数据时,结果因此本事务先后两次读到的数据结果会不一致。


幻读:一个事务读取到了另一个事务中已经提交的数据,通常为insert或delete时引发的问题。
例:事务 T1 对一个表中所有的行的某个数据项做了从"1"修改为"2"的操作,这时事务 T2 又对这个表中插入了一行数据项,而这个数据项的数值还是为"1"并且提交给数据库。而操作事务 T1 的用户如果再查看刚刚修改的数据,会发现还有跟没有修改一样,其实这行是从事务 T2 中添加的,就好像产生幻觉一样,这就是发生了幻读。

小结:不可重复读的和幻读的很容易混淆,不可重复读侧重于修改,幻读侧重于新增或删除。解决不可重复读的问题只需要锁住满足条件的行,解决幻读需要锁表


62、事务的四种隔离级别(标红)

读未提交:任何问题都没有解决;
读已提交:解决了脏读问题;
可重复读:解决了脏读和不可重复读问题;
串行化:解决了脏读、不可重复读和幻读问题。

63、MySQL是怎么管理事务的

操作开始前开启事务,操作成功完成提交事务,操作失败回滚事务。
开启事务:start transaction
提交事务:commit
回滚事务:rollback

64、谈谈对事务的保存点理解

在事务的处理过程中,业务操作执行了一部分,可以记录一个保持点,程序继续执行,如果程序出现异常,可以回滚所有,也可以回滚到保持点,从而保
证已经执行的部分操作可以进行事务的提交。

事务的保存点,类似单击游戏的存档和读档:
1、如果没有游戏的存档功能,每次玩单机游戏都会从第一关重新开始。
2、如果使用了游戏的存档功能,下次在玩游戏时,就会从存档处开始。

65、数据库去重

distinct 对查询结果去重。
借助group by 进行分组,也可以出现去重效果。

66、group by的注意事项

1.SELECT子句中的列名必须为分组列或聚合函数
2.聚合函数对于GROUP BY子句定义的每个组各返回一个结果
3.必须在GROUP BY 子句之前指定 WHERE 子句
4.having对分组结果进行过滤。

67、什么是索引?

索引是数据库管理系统中一个排序的数据结构,以协助快速查询、更新数据库表中数据。
索引的实现通常使用B树及其变种B+树。
索引相当于字典的目录,作用在于提升查询效率。

68、索引的分类

数据库的功能,可以在数据库设计器中创建三种索引:唯一索引、主键索引和聚集索引。
唯一索引:不允许其中任何两行具有相同索引值的索引。
主键索引:在数据库关系图中为表定义主键将自动创建主键索引,主键索引是唯一索引的特定类型。该索引要求主键中的每个值都唯一。当在查询中使用
主键索引时,它还允许对数据的快速访问。
聚集索引:表中行的物理顺序与键值的逻辑(索引)顺序相同。一个表只能包含一个聚集索引。聚集索引通常提供更快的数据访问速度。

69、索引的优缺点

索引的优点:
1. 通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性;
2. 可以大大加快数据的检索速度,这也是创建索引的最主要的原因;

索引的缺点:
1. 创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增加;
2. 索引需要占物理空间,除了数据表占数据空间之外,每一个索引还要占一定的物理空间,如果要建立聚簇索引,那么需要的空间就会更大;
3. 当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,这样就降低了数据的维护速度

参考:https://blog.csdn.net/u013310119/article/details/52527632

70、什么情况应该使用索引?什么情况下又不应该使用?

适用场景:
1. 加快条件的判断速度; 
2. 在作为主键的列上,强制该列唯一 
3. 在经常用在连接的列上,这些列主要是一些外键,可以加快连接的速度; 
4. 在经常需要排序的列上创 建索引,因为索引已经排序  

不适用场景:
1.  查询少的列
2. 数据内容少的列
3.  text, image和bit数据类型的列不应该增加索引 
4.  修改多于查询的列不能加索引

71、主键(primary key)和唯一索引(unique index)区别

1,  主键一定是唯一性索引,唯一性索引并不一定就是主键。  
2,  一个表中可以有多个唯一性索引,但只能有一个主键。 
3,  主键列不允许空值,而唯一性索引列允许空值。 
注意:唯一索引也称为唯一约束

72、什么是视图?

视图是一个虚拟表,其内容由查询定义。
从用户角度来看,一个视图是从一个特定的角度来查看数据库中的数据。
从数据库系统内部来看,一个视图是由SELECT语句组成的查询定义的虚拟表。创建视图时候,可以是一个数据表的一部分,也可以是多个基表的联合,
从数据库系统外部来看,视图就如同一张表一样,对表能够进行的一般操作都可以应用于视图,例:查询,插入,修改,删除操作等。

73、表和视图的关系

用来创建视图的表叫做基表 base table
视图(view)是在基表之上建立的,它的结构(即所定义的列)和内容(即所有数据行)都来自基表,它依据基表存在而存在。一个视图可以对应一个基
表,也可以对应多个基表。

区别:
1、视图是已经编译好的sql语句;而表不是。
2、视图没有实际的物理记录;而表有。
3、视图是窗口;表是内容
4、表占用物理空间而视图不占用物理空间
5、视图的建立和删除只影响视图本身,不影响对应的基本表。

74、mysql查询条件里如何拼接字符串

1.合并字段concat 
select concat(user_name, password ) from tb_user;
下述只有mysql才有:
2.使用指定连接符合并字段  concat_ws
#是连接符:select concat_ws(""#"" , user_name , password ,id ) from tb_user;
3.合并结果group_concat,将所有结果显示在一个单元格中
:select group_concat(user_name , password ) from tb_user;

75、列举几种表连接方式,有什么区别?

1.交叉连接:交叉连接不带WHERE子句,它返回被连接的两个表所有数据行的笛卡尔积
2.左右外连接:左连接以左表为基表,右表为从表,基表全部展示,从表数据对应匹配条件进行展示,没有匹配显示null
3.内连接:还可以被称为普通连接或者自然连接,内连接是从结果表中删除与其他被连接表中没有匹配行的所有行。


76、having是什么

having关键字通常是与group by关键字联合使用 
group by 进行分组,having对分组结果进行过滤。

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

1 避免在where子句中进行null判断
2 避免在where子句中使用!=
3 避免在where子句中进行or条件连接
4 避免使用select*,而应该使用具体的字段名
5 避免使用like关键字

78、union和union all有什么不同?

都是集合运算,求的是并集:用于合并两个或多个 SELECT 语句的结果集
union:不允许出现重复的记录
union all:允许出现重复的记录

79、在数据库中你怎么把时间进行格式化

在数据库中可以使用 DATE_FORMAT(date,format)进行时间格式化
date 参数是合法的日期
format 参数规定日期/时间的输出格式

80、count(*)和count(1)的效率哪个更高?

count(*)和count(1)执行的效率是完全一样的
count(1)的执行计划将转化为count(*)

参考:
https://www.cnblogs.com/sueris/p/6650301.html
https://blog.csdn.net/moni_mm/article/details/82056021

81、count(*)和count(1)的结果一样吗?

一样

82、数据库图形化工具的好处

可以直观的操作数据 查看数据,可以借助图形化界面轻松完成对数据库的常用操作

83、你做过那些Mysql数据库优化

Mysql的优化,大体可以分为三部分:
1.索引的优化,2.sql语句的优化,3.表的优化


1.索引的优化
(1)只要列中含有NULL值的字段,不使用索引
(2)尽量使用短索引
(3)经常在where子句使用的列,尽量使用索引,有多个列where或者order by子句的,应该建立复合索引,对于like语句,以%或者‘-’开头的不会使
         用索引,以%结尾会使用索引
(4)尽量不要在列上进行运算
(5)尽量不要使用not in和<>操作

2.sql语句的优化
 (1)查询时,避免使用select*,而应该使用具体的字段名
 (2)查询时,尽量使用连接查询代替子查询
 (3)多表连接时,尽量小表驱动大表,即小表 join 大表
 (4)避免在where子句中进行null判断
 (5)避免在where子句中使用!=
 (6)避免在where子句中进行or条件连接
 (7)避免使用like关键字

3.表的优化
 (1)表的字段尽可能用NOT NULL
  (2)字段长度固定的表查询会更快
  (3)把数据库的大表按时间或一些标志分成小表
  (4)将表分区

84、数据库主键,不设置主键会怎么样

1.主键用于表示数据(记录)的唯一性, 不设置主键会导致数据表中可能存在完全相同的数据;
2.一个表的外键必须是另一个表的主键,不设置主键将无法建立俩个表之间的关联关系;
3.设置主键时,会自动增加索引,有利于提高数据的检索速度;

85、【了解】MySQL的数据引擎有了解吗?

MySQL数据库引擎取决于MySQL在安装的时候是如何被编译的。要添加一个新的引擎,就必须重新编译MYSQL。
常见的引擎:Innodb、MyISAM。
InnoDB是默认的MySQL引擎,支持事务,支持行锁定和外键。
MyISAM拥有较高的插入、查询速度,但不支持事物。

说出char和varchar的区别,及它们的适用场景

1、char 长度固定
varchar 长度可变;

2、定义一个char[10]和varchar[10],如果存进去的是‘abcd’,那么char所占的长度依然为10,除了字符‘abcd’外,后面跟六个空格,
而varchar就立马把长度变为4了,取数据的时候,char类型的要用trim()去掉多余的空格,而varchar是不需要的,

3、char的存取效率高于varchar,因为char长度固定,方便存储与查找;
   varchar是以空间效率为首位的

4、char对于英文字符占一个字节,对一个汉字占两个字节;
   varchar无论是英文字符还是汉字都占两个字节  

适用场景:
char 一般用来储存固定字段,如:手机号,身份证号等
varchar 一般用来储存不固定长度的字段,如:用户名,昵称等

 Oracle与MySQL 区别

一、本质区别
Oracle数据库是一个对象关系数据库管理系统。收费
MySQL是一个开源的关系数据库管理系统。提供对多个数据库的多用户访问。开源、免费。

二、安全性
MySQL使用三个参数来验证用户,即用户名,密码和地址。
Oracle使用了许多安全功能,如用户名,密码,配置文件,本地身份验证,外部身份验证,高级安全增强功能等。

三、SQL语法
Oracle 的 SQL 语法与 MySQL 有很大不同。Oracle 为称为 PL / SQL 的编程语言提供了更大的灵活性。Oracle的 SQL  Plus工具提供了比 MySQL 更多的命令,用于生成报表输出和变量定义。

四、对事务的提交
MySQL默认自动提交。
Oracle默认不自动提交,需要手动提交,需要再写 commit;指令或者点击commit按钮。

五、存储上的区别
与 Oracle相比,MySQL没有表空间、角色管理,快照,同义词以及自动存储管理。

六、分页查询
MySQL 是直接在 SQL 语句中写 "select... from ... where... limit x,y",有limit就可以实现分页;
Oracle需要用到ROWNUM和嵌套查询。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值