数据库面试整理

概念

1、什么是视图?以及视图的使用场景有哪些?

视图是一种虚拟的表,具有和物理表相同的功能。可以对视图进行增,改,查,操作,试图通常是有一个表或者多个表的行或列的子集。对视图的修改不影响基本表。它使得我们获取数据更容易,相比多表查询。

  • 只暴露部分字段给访问者,所以就建一个虚表,就是视图。
  • 查询的数据来源于不同的表,而查询者希望以统一的方式查询,这样也可以建立一个视图,把多个表查询结果联合起来,查询者只需要直接从视图中获取数据,不必考虑数据来源于不同表所带来的差异

2、触发器的作用?

触发器是一中特殊的存储过程,主要是通过事件来触发而被执行的。它可以强化约束,来维护数据的完整性和一致性,可以跟踪数据库内的操作从而不允许未经许可的更新和变化。可以联级运算。如,某表上的触发器上包含对另一个表的数据操作,而该操作又会导致该表触发器被触发。

3、什么是存储过程?用什么来调用?

存储过程是一个预编译的SQL语句,优点是允许模块化的设计,就是说只需创建一次,以后在该程序中就可以调用多次。如果某次操作需要执行多次SQL,使用存储过程比单纯SQL语句执行要快。 调用: 1)可以用一个命令对象来调用存储过程。 2)可以供外部程序调用,比如:java程序。

4、存储过程的优缺点?

优点: 1)存储过程是预编译过的,执行效率高。 2)存储过程的代码直接存放于数据库中,通过存储过程名直接调用,减少网络通讯。 3)安全性高,执行存储过程需要有一定权限的用户。 4)存储过程可以重复使用,可减少数据库开发人员的工作量。 缺点:移植性差

5、索引的作用?和它的优点缺点是什么?

索引就一种特殊的查询表,数据库的搜索可以利用它加速对数据的检索。它很类似与现实生活中书的目录,不需要查询整本书内容就可以找到想要的数据。索引可以是唯一的,创建索引允许指定单个列或者是多个列。缺点是它减慢了数据录入的速度,同时也增加了数据库的尺寸大小。

6、什么样的字段适合建索引

唯一、不为空、经常被查询的字段

7、什么是事务?什么是锁?

事务就是被绑定在一起作为一个逻辑工作单元的SQL语句分组,如果任何一个语句操作失败那么整个操作就被失败,以后操作就会回滚到操作前状态,或者是上有个节点。为了确保要么执行,要么不执行,就可以使用事务。要将有组语句作为事务考虑,就需要通过ACID测试,即原子性,一致性,隔离性和持久性。 锁:在所以的DBMS中,锁是实现事务的关键,锁可以保证事务的完整性和并发性。与现实生活中锁一样,它可以使某些数据的拥有者,在某段时间内不能使用某些数据或数据结构。当然锁还分级别的。

8、什么叫视图?游标是什么?

视图:是一种虚拟的表,具有和物理表相同的功能。可以对视图进行增,改,查,操作,试图通常是有一个表或者多个表的行或列的子集。对视图的修改会影响基本表。它使得我们获取数据更容易,相比多表查询。 游标:是对查询出来的结果集作为一个单元来有效的处理。游标可以定在该单元中的特定行,从结果集的当前行检索一行或多行。可以对结果集当前行做修改。一般不使用游标,但是需要逐条处理数据的时候,游标显得十分重要。

9、视图的优缺点

优点: 1)对数据库的访问,因为视图可以有选择性的选取数据库里的一部分。 2 )用户通过简单的查询可以从复杂查询中得到结果。 3 )维护数据的独立性,试图可从多个表检索数据。 4 )对于相同的数据可产生不同的视图。 缺点: 性能:查询视图时,必须把视图的查询转化成对基本表的查询,如果这个视图是由一个复杂的多表查询所定义,那么,那么就无法更改数据

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

内连接、自连接、外连接(左、右、全)、交叉连接

内连接:只有两个元素表相匹配的才能在结果集中显示。

外连接: 左外连接: 左边为驱动表,驱动表的数据全部显示,匹配表的不匹配的不会显示。

右外连接: 右边为驱动表,驱动表的数据全部显示,匹配表的不匹配的不会显示。

全外连接:连接的表中不匹配的数据全部会显示出来。

交叉连接: 笛卡尔效应,显示的结果是链接表数的乘积。

12、主键和外键的区别?

主键在本表中是唯一的、不可唯空的,外键可以重复可以唯空;外键和另一张表的主键关联,不能创建对应表中不存在的外键。

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

1.建索引

2.减少表之间的关联

3.优化sql,尽量让sql很快定位数据,不要让sql做全表查询,应该走索引,把数据 量大的表排在前面

4.简化查询字段,没用的字段不要,已经对返回结果的控制,尽量返回少量数据

5.尽量用PreparedStatement来查询,不要用Statement

14、数据库三范式是什么?

第一范式:列不可再分

第二范式:行可以唯一区分,主键约束

第三范式:不存在传递依赖。且三大范式是一级一级依赖的,第二范式建立在第一范式上,第三范式建立第一第二范式上

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

UNION在进行表链接后会筛选掉重复的记录,所以在表链接后会对所产生的结果集进行排序运算,删除重复的记录再返回结果。实际大部分应用中是不会产生重复的记录,最常见的是过程表与历史表UNION。

UNION ALL只是简单的将两个结果合并后就返回。这样,如果返回的两个结果集中有重复的数据,那么返回的结果集就会包含重复的数据了。 从效率上说,UNION ALL 要比UNION快很多,所以,如果可以确认合并的两个结果集中不包含重复的数据的话,那么就使用UNION ALL。

16、Varchar和varchar有什么区别?

Char的长度是固定的,而varchar的长度是可以变化的,比如,存储字符串“abc”对于char(20),表示你存储的字符将占20个字节,包含17个空,而同样的varchar2(20)只占了3个字节,20只是最大值,当你存储的字符小于20时,按实际长度存储。 char的效率要比varchar2的效率高。 目前varchar是varchar2的同义词,工业标准的varchar类型可以存储空字符串,但是oracle不能这样做,尽管它保留以后这样做的权利。Oracle自己开发了一个数据类型varchar2,这个类型不是一个标准的varchar,他将在数据库中varchar列可以存储空字符串的特性改为存储null值,如果你想有向后兼容的能力,oracle建议使用varchar2而不是varchar

17、Oracle语句有多少类型

Oracle语句分三类:DDL、DML、DCL。

数据定义语言DDL(Data Definition Language),包括: Create语句:可以创建数据库和数据库的一些对象。

Drop语句:可以删除数据表、索引、触发程序、条件约束以及数据表的权限等。

Alter语句:修改数据表定义及属性。

Truncate语句:删除表中的所有记录,包括所有空间分配的记录被删除。

数据操控语言DML(Data Manipulation Language),包括: Insert语句:向数据表张插入一条记录。

Delete语句:删除数据表中的一条或多条记录,也可以删除数据表中的所有记录,但是它的操作对象仍是记录。

Update语句:用于修改已存在表中的记录的内容。

数据库控制语言DCL(Data Control Language),包括: Grant语句:允许对象的创建者给某用户或某组或所有用户(PUBLIC)某些特定的权限。

Revoke语句:可以废除某用户或某组或所有用户访问权限

18、order by与group by的区别

order by 排序查询、asc升序、desc降序

group by 分组查询、having 只能用于group by子句、作用于组内,having条件子句可以直接跟函数表达式。使用group by 子句的查询语句需要使用聚合函数。

19、MySQL数据库几个基本的索引类型:普通索引、唯一索引、主键索引、全文索引

  • 索引加快数据库的检索速度
  • 索引降低了插入、删除、修改等维护任务的速度
  • 唯一索引可以确保每一行数据的唯一性
  • 通过使用索引,可以在查询的过程中使用优化隐藏器,提高系统的性能
  • 索引需要占物理和数据空间

20、数据库的乐观锁和悲观锁是什么?

数据库管理系统(DBMS)中的并发控制的任务是确保在多个事务同时存取数据库中同一数据时不破坏事务的隔离性和统一性以及数据库的统一性。

乐观并发控制(乐观锁)和悲观并发控制(悲观锁)是并发控制主要采用的技术手段。

  • 悲观锁:假定会发生并发冲突,屏蔽一切可能违反数据完整性的操作
  • 乐观锁:假设不会发生并发冲突,只在提交操作时检查是否违反数据完整性。

21、 超键、候选键、主键、外键分别是什么?

超键:在关系中能唯一标识元组的属性集称为关系模式的超键。一个属性可以为作为一个超键,多个属性组合在一起也可以作为一个超键。超键包含候选键和主键

候选键:是最小超键,即没有冗余元素的超键。

主键:数据库表中对储存数据对象予以唯一和完整标识的数据列或属性的组合。一个数据列只能有一个主键,且主键的取值不能缺失,即不能为空值(Null)。

外键:在一个表中存在的另一个表的主键称此表的外键。

SQL语句

1、1.创建数据库。要求用SQL语句创建满足如下要求的数据库:
(1)数据库名称为School;
(2)主数据文件:逻辑名为SchoolData,文件名为“D:\School\SchoolData.mdf”,文件初始大小为50MB,文件的最大大小不受限制,文件的增长率为20%。

(3)日志文件:逻辑名为SchoolLog,文件名为“D:\School\SchoolLog.ldf,”文件初始大小为10MB,文件的最大大小为50MB,文件的增长率为1MB;

create database School
on primary
(name=‘SchoolData‘,
filename=‘D:\School\SchoolData.mdf‘,
size=50MB,
maxsize=unlimited ,
filegrowth=20%)    
log on(
name=‘SchoolLog‘,
filename=‘D:\School\SchoolLog.ldf‘,
size=10MB,
maxsize=50MB,
filegrowth=1MB
)    

2.创建数据类型和表,增加约束。

(1)表tblstudent(学生表):

create table tblstudent(
stuID bigint primary key,
stuName nvarchar(10) not null,
stuSex nchar(1) not null,
stuBirth datetime,
stuNum nvarchar(18) unique,
Departed int,
City nvarchar(10) default ‘杭州‘ ,//设置默认值
constraint ck_tblstudent_stusex check(stuSex IN(‘男‘,‘女‘) ),//建立约束
constraint ck_tblstudent_stuBirth check(stuBirth<getdate())
)     

2)表tblscore(成绩表):

create table tblscope(
stuID bigint ,
Math int,
English int,
Computer int,
Summary int,
/*建立外键约束*/
constraint stuID_FK foreign key (stuID) references tblstudent(stuID),
constraint ck_tblscope_Math CHECK(Math between 0 and 100 or Math is null),
constraint ck_tblscope_English CHECK(English between 0 and 100 or English is null),
constraint ck_tblscope_Computer CHECK(Computer between 0 and 100 or Computer is null)
)    

3.使用SQL语句插入下表中的数据:

/*批量插入,当添加一条新的记录时,可以省略字段名,但每个字段都必须有值)*/
insert into tblscope values(1001,70,80,90,null),(1002,45,55,60,null);  <strong>
</strong>  

4.找出总成绩最高的学生的学号和姓名

/*第一步:从tblscope表中找出最高成绩*/
select  max(Math+English+Computer) from tblscope     

/*第二步:从tblscope表中找出总成绩=最高分的那位学生ID*/
select stuID from tblscope group by stuID having
sum(Math+English+Computer)=(select  max(Math+English+Computer) from tblscope )    

/*第三步:根据最高分查出来的学生stuID再来查询学生信息*/
select stuID,stuName from tblstudent where stuID=
(select stuID from tblscope group by stuID having
sum(Math+English+Computer)=(select  max(Math+English+Computer) from tblscope ))  

5.统计男生女生的人数

select stuSex as ‘性别‘,count(*) as ‘人数 ‘from tblstudent group by stuSex 

查询结果:

摘自:https://www.2cto.com/database/201710/688377.html

https://www.cnblogs.com/remember-forget/p/6140112.html

http://blog.csdn.net/beauxie/article/details/52946590#

原文地址:https://www.cnblogs.com/qianbin/p/8573159.html

时间: 2024-10-10 22:39:27

数据库面试整理的相关文章

数据库知识整理

关系型数据库知识整理: 一,关系型数据库管理系统简介: 1.1使用数据库的原因: 降低存储数据的冗余度 提高数据的一致性 可以建立数据库所遵循的标准 储存数据可以共享 便于维护数据的完整性 能够实现数据的安全性 1.2基本概念: 对于任何数据库来说,表之间的关联关系存在三种基本的关系类型:一对一,一对多,多对多仅此三种. 目前流行的关系型数据库服务器管理系统有:微软-MS SQL Server.甲骨文-Oracle.IBM-DB2.开源的MySql和PostgreSQL等.(在面试中有被问到过)

PLSQL_Oracle 面试整理(汇总)(整理网上资料DBA and PLSQL面试大全)

2014-08-16 BaoXinjian 一.SQL Tunning类 1. 列举集中表的连接方式 Answer:等连接(内连接).非等连接.自连接.外连接(左.右.全) Or hash join/merge join/nest loop(cluster join)/index join ?? 连接类型 定义 例子 内连接 只连接匹配的行 select A.c1,B.c2 from A join B on A.c3 = B.c3; 左外连接 包含左边表的全部行(不管右边的表中是否存在与它们匹配

【数据库】数据库面试知识点汇总

转自:https://www.cnblogs.com/wenxiaofei/p/9853682.html 数据库面试知识点汇总 一.基本概念 1.主键.外键.超键.候选键 超键:在关系中能唯一标识元组的属性集称为关系模式的超键.一个属性可以为作为一个超键,多个属性组合在一起也可以作为一个超键.超键包含候选键和主键. 候选键:是最小超键,即没有冗余元素的超键. 主键:数据库表中对储存数据对象予以唯一和完整标识的数据列或属性的组合.一个数据列只能有一个主键,且主键的取值不能缺失,即不能为空值(Nul

数据库题目整理及详解(四)

前言 有多少次挥汗如雨,伤痛曾添满记忆,只因为始终相信,去拼搏才能胜利.总在鼓舞自己,要成功就得努力.热血在赛场沸腾,巨人在赛场升起. 相信自己,你将赢得胜利,创造奇迹:相信自己,梦想在你手中,这是你的天地.当一切过去,你们将是第一. 相信自己,你们将超越极限,超越自己! 相信自己,加油吧,健儿们,相信你自己. 坐在中体对面, 听着这振奋激昂的加油欢呼声, 照样可以感受到校运会的气势磅礴, 虽然我还在敲代码-- 来个这个吧, 特殊纪念, 沃夫慈悲: 说明 老生常谈! 接着之前的SQL语句继续整理

CI框架数据库操作整理

整理一下CI框架下数据库的基本操作函数的调用和使用,适用于新人: $this->load->database();//实例化db属性 在实例化db之后,可以运用该对象的丰富的函数来对数据库进行查改删增的操作. mysql数据库 create table users(username varchar(10),password varchar(10),email varchar(10));//创建users表 1.数据库添加操作 $user=arrar( "username"=

数据库面试系列大纲

数据库面试经常被问到的考点: 1.内连接和外连接,左外连接和右外连接,全外连接 2.视图是什么,视图的优点 3.索引的优点,建立索引的规则有哪些? 4.写sql语句:涉及到order by ,group by, having ,like ,limit  等 5.什么是慢查询?如何优化慢查询? 6.mysql性能优化 7.mysql的存储引擎都有哪些?这些存储引擎有什么区别? 后面会针对每个点写单独的博客...

MySQL数据库知识点整理 (持续更新中)

一.修改用户密码 格式(在命令行下输入):mysqladmin -u 用户名 -p旧密码 password 新密码 1. 给root添加密码ab12:  mysqladmin -uroot -password ab12 2. 将root的密码修改为djg345:    mysqladmin -uroot -pab12 password djg345 二.添加新用户 格式:grant 权限 on 数据库名.表名 to 用户名@登录主机  identified by "密码" 1. 增加一

数据库面试相关

文章目录 MyISAM与INNODB的区别 MyISAM强调效率,执行速度比InnoDB快,但是不支持事务,不能在表损坏后修复数据. InnoDB不保存行号,就是在执行count操作时,需要扫描整个表,而MyISAM只要直接读出行号就行.注意:如果count与where组合使用两种引擎都是需要扫描整个表. MyISAM用的是表锁,InnoDB用的是行锁,其实并不一定,因为当不确定扫描对象时,还是会锁住整张表 MyISAM适用: 1. count操作多 2. 插入少,查询多 3. 不需要事务 In

数据库面试宝典

一.数据库问答题1. SQL语言包括哪些类型?数据定义:Create Table,Alter Table,Drop Table, Craete/Drop Index等数据操纵:Select ,insert,update,delete,数据控制:grant,revoke 2. 内联接,外联接区别?内连接是保证两个表中所有的行都要满足连接条件,而外连接则不然.在外连接中,某些不满条件的列也会显示出来,也就是说,只限制其中一个表的行,而不限制另一个表的行.分左连接.右连接.全连接三种. 3. 什么是存