美文网首页
数据库常见面试问题

数据库常见面试问题

作者: 加油11dd23 | 来源:发表于2020-07-13 16:46 被阅读0次

1、count(*),count(1)和count(列名)的区别

(1). 列名为主键,count(列名) 会比count(1) 和count(*) 快;

(2). 多列且没有主键,count(1) 执行会比count(*) 快。

2、请你介绍一下数据库事务的ACID特性

事务(Transaction)是由一系列对系统中数据进行访问与更新的操作所组成的一个程序执行逻辑单元。事务是DBMS中最基础的单位,事务不可分割。

1)原子性:务被视为不可分割的最小单元,事物的所有操作要不成功,要不失败回滚,而回滚可以通过日志来实现,日志记录着事务所执行的修改操作,在回滚时反向执行这些修改操作。

2)一致性:数据库在事务执行前后都保持一致性状态,在一致性状态下,所有事务对一个数据的读取结果都是相同的。

3)隔离性:个事务所做的修改在最终提交以前,对其他事务是可不见的。

4)持久性:一旦事务提交,则其所做的修改将会永远保存到数据库中。

3、请你说一说数据库的三大范式

第一范式:当关系模式R的所有属性都不能再分解为更基本的数据单位时,称R是满足第一范式,即属性不可分

第二范式:如果关系模式R满足第一范式,并且R得所有非主属性都完全依赖于R的每一个候选关键属性,称R满足第二范式

第三范式:设R是一个满足第一范式条件的关系模式X是R的任意属性集,如果X非传递依赖于R的任意一个候选关键字,称R满足第三范式,即非主属性不传递依赖于键码

4、 请你写一下mysql删除语句

1.drop语句。可以用来删除数据库和表。

用drop语句来删除数据库:drop database db;

用drop语句来删除表:drop table tb;

2.delete语句。用来删除表中的字段。

delete from tb where id=1;

如果delete语句中没有加入where就会把表中的所有记录全部删除:

3.用truncate来删除表中的所有字段:

truncate table tb;

5、请你写一些基本的SQL语句

选择:select * from table1 where 范围

插入:insert into table1(field1,field2) values(value1,value2)

删除:delete from table1 where 范围

更新:update table1 set field1=value1 where 范围

查找:select * from table1 where field1 like '%value1%' ---like的语法很精妙,查资料!

排序:select * from table1 order by field1,field2 [desc]

总数:select count as totalcount from table1

求和:select sum(field1) as sumvalue from table1

平均:select avg(field1) as avgvalue from table1

最大:select max(field1) as maxvalue from table1

最小:select min(field1) as minvalue from table1

6、 请你说一说数据库索引

索引是对数据库表中一列或多列的值进行排序的一种结构使用索引可快速访问数据库表中的特定信息。如果想按特定职员的姓来查找他或她,则与在表中搜索所有的行相比,索引有助于更快地获取信息。

索引的一个主要目的就是加快检索表中数据的方法亦即能协助信息搜索者尽快的找到符合限制条件的记录ID的辅助数据结构。

优点:

·通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。

·可以大大加快数据的检索速度,这也是创建索引的最主要的原因。

·可以加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义。

·在使用分组和排序子句进行数据检索时,同样可以显著减少查询中分组和排序的时间。

·通过使用索引,可以在查询的过程中,使用优化隐藏器,提高系统的性能。

缺点:

·创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增加。

·索引需要占物理空间,除了数据表占数据空间之外,每一个索引还要占一定的物理空间,如果要建立聚簇索引,·那么需要的空间就会更大。

·当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,这样就降低了数据的维护速度。

7、请你说一说数据库事务隔离

同一时间,只允许一个事务请求同一数据,不同的事务之间彼此没有任何干扰。比如A正在从一张银行卡中取钱,在A取钱的过程结束前,B不能向这张卡转账。

8、请你说一说inner join和left join

left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录 

right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录

inner join(等值连接) 只返回两个表中联结字段相等的行

9、谈谈SQL优化

(1)在经常性的检索列上,建立必要索引,以加快搜索速率,避免全表扫描(索引覆盖扫描);

(2)多次查询同样的数据,可以考虑缓存该组数据;

(3)审视select * form tables, 你需要所有列数据吗?

(4)切分查询(大查询切分成为小查询,避免一次性锁住大量数据)

(5)分解关联查询(单表查询,结果在应用程序中进行关联,可以减少处理过程中的锁争用)

(6)尽量先做单表查询;

...

10、请你说一下数据库连接泄露的含义

数据库连接泄露指的是如果在某次使用或者某段程序中有正确地关闭Connection、Statement和ResultSet资源那么每次执行都会留下一些没有关闭的连接,这些连接失去了引用而不能得到重新使用,因此就造成了数据库连接的泄漏。数据库连接的资源是宝贵而且是有限的,如果在某段使用频率很高的代码中出现这种泄漏,那么数据库连接资源将被耗尽,影响系统的正常运转。

11、请你说一下SQL左连接以及使用场景

left join(左连接) 返回包括 LEFT OUTER子句中指定的左表的所有行,而不仅仅是联接列所匹配的行。如果左表的某行在右表中没有匹配行,则在相关联的结果集行中右表的所有选择列表列均为空值。

使用场景:可以保持左表完整加入另一表中的数据。

12、请你说一下数据库事务、主键与外键的区别?

数据库的事务:事务即用户定义的一个数据库操作序列,这些操作要么全做要全不做,是一个不可分割的工作单位,它具有四个特性,ACID,原子性,一致性,隔离性,持续性

主键和外键的区别:

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

身份证号是唯一能确定你这个人的,其他都可能有重复,所以,身份证号是主键。

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

13、请问count和sum的区别,以及count(*)和count(列名)的区别

Count和sum区别:求和用累加sum(),求行的个数用累计count

Count(*)包括了所有的列,在统计结果的时候不会忽略列值为null

Count(列名)只包括列名那一项,会忽略列值为空的计数

相关文章

网友评论

      本文标题:数据库常见面试问题

      本文链接:https://www.haomeiwen.com/subject/lqwacktx.html