> 文章列表 > 数据库简答题

数据库简答题

数据库简答题

目录

简答题

1、数据库设计过程一般包括哪些内容?

2、数据库系统的特点?

3、简述数据库的三级模式结构?

4、简述视图的特点?

5、简述UNION操作符和JOIN操作的区别与联系?

6、谈谈你对索引的理解,索引越多越好吗?

7、MySQL如何使用like关键字实现模糊查询,有什么注意事项?

8、简述limit以及distinct的用法?

9、MySQL支持哪些外连接,各有什么特点?

10、datetime与timestamp数据类型有什么区别?

11、你怎样理解having子句与where子句之间的区别?

12、忘记MySQL管理员root的密码如何解决?写出步骤和指令

13、请说明mysql数据库中标识符大小写敏感规则?

14、举例说明什么是一对多、多对多关系

15、常见的数据模型有哪些,各有哪些优缺点?

16、简述主键的作用及特征

17、什么是数据库管理系统?

18、什么是数据库,它的用途是什么?

19、请论述数据类型char和varchar的区别和各自的优点。

20、什么是sql注入式攻击,如何防范sql注入式攻击?

21、请描述MySql事务的特点及事务机制的实现方法?

22、实现数据完整性通常有几种方式?请分别阐述每种方式的特点

23、请举例说明使用视图的优点?

24、请简单描述delete语句和drop语句的差异?

25、连接查询中,什么是内连接查询,什么是外连接查询?


简答题

1、数据库设计过程一般包括哪些内容?

需求分析、概念设计、逻辑设计、物理设计、应用开发(系统实施)、系统维护。

2、数据库系统的特点?

数据结构化、数据共享性高,数据独立性强,数据粒度小,统一的管理和控制,独立的数据操作界面。

3、简述数据库的三级模式结构?

  1. 内模式也称为物理结构、物理模式,是对数据的物理结构和存储方式的描述

  2. 模式也成为整理逻辑结构、逻辑模式,是对数据的整体数据逻辑结构和特征的描述,是现实世界信息内容集合的表示。模式是数据库模式结构的中间层,通过建立数据模型的方法来抽象、表示和处理现实世界中的数据和信息。

  3. 外模式也称局部逻辑结构、子模式, 是对数据库用户看到并允许使用的局部数据的逻辑结构和特征的描述,是数据库用户的数据视图。外模式是三级结构的最外层,是保护数据库安全性的一个有力措施。

4、简述视图的特点?

  1. 视图的列可以来自不同的表,是表的抽象和在逻辑意义上建立的新关系。

  2. 视图是由表(实表)产生的虚表。

  3. 视图的建立和删除不影响表。

  4. 对视图数据的修改(增加、删除和更新)直接影响表。

  5. 当视图来自多个表时,不允许添加和删除数据行。

5、简述UNION操作符和JOIN操作的区别与联系?

  1. UNION是将相同列的若干跳数据进行合并。

  2. JOIN是将两个或多个表的若干个列进行连接。

  3. 二者均是进行连接操作,但是一个是对行进行操作,另一个是对列进行操作。

6、谈谈你对索引的理解,索引越多越好吗?

  1. 索引是帮助MySQL高效获取数据的数据结构,可以明显的提高查询效率

  2. 分为普通索引,唯一索引,复合索引,聚簇索引。

  3. 索引不是越多越好。

7、MySQL如何使用like关键字实现模糊查询,有什么注意事项?

  1. SQL的模式匹配允许你使用“ _ ”匹配任何单个字符,而“%”匹配任意数目字符(包括零个字符)。

  2. 在MySQL中,SQL的模式缺省是忽略大小写的。

注意在使用SQL模式时,不能使用 = 或 != ;而使用LIKE或NOTLIKE比较操作符。

  • %:表示任意个或多个字符。可匹配任意类型和长度的字符。

  • _:表示任意单个字符。匹配单个任意字符,它常用来限制表达式的字符长度语句:(可以代表一个中文字符)

8、简述limit以及distinct的用法?

  1. limit用于限制查询的数量,常用于分页语句。

  2. limit子句可以被用于强制select语句返回指定的记录数。

  3. limit接受一个或两个数字参数,参数必须是一个整数常量。

  4. distinct一般是用来去除查询结果中的重复记录的,而且这个语句在select、insert、delete和update中只可以在select中使用。

9、MySQL支持哪些外连接,各有什么特点?

外连接有左外连接、右外连接、全连接。

  1. 左连接的结果集包括指定的左表全部数据与匹配的右表数据,右表中没匹配的全为空值,关键字 leftjoin

  2. 右连接的结果集包含指定的右表全部数据与匹配的左边数据,左边中没匹配的全为空值,关键字rightjoin

  3. 全连接返回左右数据表的所有行,关键字fulljoin

10、datetime与timestamp数据类型有什么区别?

相同点:两者都可用来表示YYYY-MM-DDHH:MM:SS[.fraction]类型的日期。

不同点:

  1. 两者的存储方式不一样对于TIMESTAMP,它把客户端插入的时间从当前时区转化为UTC(世界标准时间)进行存储。查询时,将其又转化为客户端当前时区进行返回。而对于DATETIME,不做任何改变,基本上是原样输入和输出。

  2. 两者所能存储的时间范围不一样

11、你怎样理解having子句与where子句之间的区别?

  1. where不能放在GROUPBY后面

  2. HAVING是跟GROUPBY连在一起用的,放在GROUPBY后面,此时的作用相当于WHERE

  3. WHERE后面的条件中不能有聚集函数,比如SUM(),AVG()等,而HAVING可以

12、忘记MySQL管理员root的密码如何解决?写出步骤和指令

  1. 停止mysql服务开始&→运行&→输入cmd,打开命令提示符窗口,然后输入net stop mysql

  2. 在命令提示符窗口中进入mysql安装目录中的bin目录在命令提示符窗口中分别输入d:和cd www\\mysql\\bin两条命令,每输入一条命令按回车键。

  3. 进入mysql安全模式(这样不用输入密码就能进入mysql数据库)输入mysqld -nt --skip -grant -tables,此时屏幕上可能没啥反应,不用管它,放在一边接着往下做

  4. 重新打开一个cmd命令提示符窗口,开始&→运行&→输入cmd,在新打开命令提示符窗口中输入mysql -uroot -p,然后提示输入密码,不用输入密码,直接按回车键

  5. 输入以下命令开始修改超级管理员root密码(注意:命令中mysql.user中间有个【点】;命令中的htmer.com即为新密码,根据你的实际情况,换成你的新密码即可)

  6. 刷新权限表,输入如下命令flush privileges;

  7. 退出,输入如下命令quit重新启动mysql服务(也可以直接重启服务器)

  8. 重新启动mysql服务(也可以直接重启服务器)①打开任务管理器,将mysql -nt .exe这个进程结束②在命令提示符中输入net start mysql即可重新启动mysql服务了

13、请说明mysql数据库中标识符大小写敏感规则?

  1. 数据库名与表名是严格区分大小写的;

  2. 表的别名是严格区分大小写的;

  3. 列名与列的别名在所有的情况下均是忽略大小写的;

  4. 字段内容默认情况下是大小写不敏感的。

14、举例说明什么是一对多、多对多关系

一对多:一张表中有一条记录可以对应另外一张表中的多条记录;但是反过来,另外一张表的一条记录只能对应第一张表的一条记录,这种关系就是一对多或多对一。

多对多:一对表中(A)的一条记录能够对应另外一张表(B)中的多条记录;同时B表中的一条记录也能对应A表中的多条记录

15、常见的数据模型有哪些,各有哪些优缺点?

1、层次模型特点

  1. 有且只有一个结点没有双亲结点(这个结点叫根结点);

  2. 除根结点外的其他结点有且只有一个双亲结点.

优点:

  1. 层次模型的数据结构比较简单清晰;

  2. 层次数据库的查询效率高;

  3. 层次数据库模型提供了良好的完整性支持。

缺点:

  1. 现实世界中很多联系是非层次性的,如结点之间具有多对多联系。

  2. 一个结点具有多个双亲等,层次模型表示这联系的方法很笨拙,对插入和删除操作的限制比较多。

  3. 查询子女结点必须通过双亲结点。

  4. 由于结构严密,层次命令趋于程序化.

2、网状模型特点

  1. 允许一个以上的结点没有双亲结点;

  2. 一个结点可以有多个双亲结点.

优点:

  1. 能够更为直接地描述现实世界。如一个结点可以有多个双亲,结点之间可以有多种联系。

  2. 具有良好的性能,存取效率较高。

缺点:

  1. 结构负责,而且随着应用环境的扩大,数据库的结构就变得越来越复杂,不利于最终用户掌握。

  2. 其数据定义语言(DDL)、数据操作语言(DML)复杂,用户不容易使用。

3、关系模型

优点:

  1. 关系模型和格式化模型不同,它是简历在严格的数学概念的基础上的

  2. 关系模型的概念单一。无论实体还是实体之间的联系都用关系来表示。对数据库的检索和更新结果也是关系(即表)。所以其数据结构简单、清晰,用户易懂易用。

  3. 关系模型的存取路径对用户透明,从而具有更高的数据独立性、更好的安全保密性,也简化了程序员的工作和数据库开发建立的工作。

缺点:

  1. 由于存取路径岛屿用户是隐蔽的,查询效率往往不如格式化数据模型。

  2. 为了提高性能,数据库管理系统必须到用户的查询请求进行优化,因此增加了开发数据库管理系统的难度。

16、简述主键的作用及特征

主键的作用:

  1. 保证实体的完整性;

  2. 加快数据库的操作速度;

  3. 强化每行的唯一标识;

  4. 降低磁盘占用空间

主键的特征:

  1. 唯一性:不能有重复值;

  2. 非空性:不能为空值。

17、什么是数据库管理系统?

  1. 数据库管理系统(Database Management System)是一种操纵和管理数据库的大型软件,用于建立、使用和维护数据库,简称DBMS。

  2. 它对数据库进行统一的管理和控制,以保证数据库的安全性和完整性。

  3. 用户通过DBMS访问数据库中的数据,数据库管理员也通过DBMS进行数据库的维护工作。

  4. 它可以支持多个应用程序和用户用不同的方法在同时或不同时刻去建立,修改和询问数据库。

  5. 大部分DBMS提供数据定义语言DDL(Data Definition Language)和数据操作语言DML(Data Manipulation Language),供用户定义数据库的模式结构与权限约束,实现对数据的追加、删除等操作。

18、什么是数据库,它的用途是什么?

  1. 数据库是“按照数据结构来组织、存储和管理数据的仓库”。是一个长期存储在计算机内的、有组织的、可共享的、统一管理的大量数据的集合。

  2. 数据库是存放数据的仓库。它的存储空间很大,可以存放百万条、千万条、上亿条数据。但是数据库并不是随意地将数据进行存放,是有一定的规则的,否则查询的效率会很低。

  3. 当今世界是一个充满着数据的互联网世界,充斥着大量的数据。即这个互联网世界就是数据世界。数据的来源有很多,比如出行记录、消费记录、浏览的网页、发送的消息等等。

  4. 除了文本类型的数据,图像、音乐、声音都是数据。数据库是一个按数据结构来存储和管理数据的计算机软件系统。

数据库的概念实际包括两层意思:

(1)数据库是一个实体,它是能够合理保管数据的“仓库”,用户在该“仓库”中存放要管理的事务数据,“数据”和“库”两个概念结合成为数据库。

(2)数据库是数据管理的新方法和技术,它能更合适的组织数据、更方便的维护数据、更严密的控制数据和更有效的利用数据。利用数据库可以高效、有组织地存储数据,使人们能够更快、更方便地管理数据,

主要表现在以下几个方面:

  1. 从结构上存储大量的数据信息,方便用户对数据进行有效的检索和访问。

  2. 数据库可以对数据进行排序和保存,并提供快速查询在去百度搜索所需要的数据时,实际上,百度也基于数据库和数据分类技术来达到快速搜索的目的。

  3. 数据库中存储的数据能够保证数据有效,无损.可满足应用程序共享和安全的要求。在许多情况下,将数据放入数据库也是出于安全原因。例如,如果所有员工信息和薪资数据都放在磁盘文件中,那么就不可能谈论工资的机密性:如果将员工信息和薪资信息放在数据库中,则只能查询和修改员工信息,而薪资信息只能由财务人员查看,从而确保数据的安全性。

  4. 4数据库技术可以很容易和智能地分析和产生新的有用信息。例如,超市将销售信息保存在数据库中,月销售额排名实际确定下月的采购数量,数据库查询的信息实际生成新信息。数据挖掘、在线分析技术最近已经发展起来,其核心意义在于从一堆数据中分析有用的新信息。

19、请论述数据类型char和varchar的区别和各自的优点。

  • char是固定长度的,

  • varchar是可变长度的;

  • char的索引效率高,

  • varchar的索引效率稍弱

20、什么是sql注入式攻击,如何防范sql注入式攻击?

SQL注入攻击是黑客对数据库进行攻击的常用手段之一。随着B/S模式应用开发的发展,使用这种模式编写应用程序的程序员也越来越多。但是由于程序员的水平及经验也参差不齐,相当大一部分程序员在编写代码的时候,没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患。用户可以提交一段数据库查询代码,根据程序返回的结果,获得某些他想得知的数据,这就是所谓的SQL Injection如何防范。

  1. 在构造动态SQL语句时,一定要使用类安全(type-safe)的参数加码机制。大多数的数据API,包括ADO和ADO.NET,有这样的支持,允许你指定所提供的参数的确切类型(譬如,字符串,整数,日期等),可以保证这些参数被恰当地escaped/encoded了,来避免黑客利用它们。一定要从始到终地使用这些特性。

  2. 在部署你的应用前,始终要做安全审评(securityreview)。建立一个正式的安全过程(formalsecurityprocess),在每次你做更新时,对所有的编码做审评。后面一点特别重要。很多次我听说开发队伍在正式上线(goinglive)前会做很详细的安全审评,然后在几周或几个月之后他们做一些很小的更新时,他们会跳过安全审评这关,推说,“就是一个小小的更新,我们以后再做编码审评好了”。请始终坚持做安全审评。

  3. 千万别把敏感性数据在数据库里以明文存放。我个人的意见是,密码应该总是在单向(one-way)hashed过后再存放,我甚至不喜欢将它们在加密后存放。在默认设置下,ASP.NET2.0MembershipAPI自动为你这么做,还同时实现了安全的SALT随机化行为(SALTrandomizationbehavior)。如果你决定建立自己的成员数据库,我建议你查看一下我们在这里发表的我们自己的Membershipprovider的源码。同时也确定对你的数据库里的信用卡和其他的私有数据进行了加密。这样即使你的数据库被人入侵(compromised)了的话,起码你的客户的私有数据不会被人利用。

  4. 确认你编写了自动化的单元测试,来特别校验你的数据访问层和应用程序不受SQL注入攻击。这么做是非常重要的,有助于捕捉住(catch)“就是一个小小的更新,所有不会有安全问题”的情形带来的疏忽,来提供额外的安全层以避免偶然地引进坏的安全缺陷到你的应用里去。

  5. 锁定你的数据库的安全,只给访问数据库的web应用功能所需的最低的权限。如果web应用不需要访问某些表,那么确认它没有访问这些表的权限。如果web应用只需要只读的权限从你的accountpayables表来生成报表,那么确认你禁止它对此表的insert/update/delete的权限。

  6. 很多新手从网上下载SQL通用防注入系统的程序,在需要防范注入的页面头部用来防止别人进行手动注入测试(。可是如果通过SQL注入分析器就可轻松跳过防注入系统并自动分析其注入点。然后只需要几分钟,你的管理员账号及密码就会被分析出来。

  7. 对于注入分析器的防范,笔者通过实验,发现了一种简单有效的防范方法。首先我们要知道SQL注入分析器是如何工作的。在操作过程中,发现软件并不是冲着“admin”管理员账号去的,而是冲着权限(如flag=1)去的。这样一来,无论你的管理员账号怎么变都无法逃过检测。

21、请描述MySql事务的特点及事务机制的实现方法?

  1. 原子性(atomicity):一个事务必须被作为一个不可分割的最小工作单元,每个事务中的所有操作必须要么成功,或者要么失败,永远不可能一些操作失败,一些操作成功,这就是所谓的原子性的概念.

  2. 一致性(consistency):一致性就像上面举的一个例子一样,当发生异常情况下,数据仍然是正确的。就是说当一个事务执行失败了,数据之间是不会受异常的情况而影响,永远保持着他的正确性.

  3. 隔离性(isolation):当一个事务还未提交,每个事务之间是相互隔离的,互补受到影响

  4. 持久性(durability):当一个事务进行提交之后,发生的变化就会永远保存在数据库中.

22、实现数据完整性通常有几种方式?请分别阐述每种方式的特点

数据完整性(DataIntegrity)是指数据的精确性(Accuracy)和可靠性(Reliability)。它是应防止数据库中存在不符合语义规定的数据和防止因错误信息的输入输出造成无效操作或错误信息而提出的。

数据完整性分为四类:实体完整性(EntityIntegrity)、域完整性(DomainIntegrity)、参照完整性(ReferentialIntegrity)、用户定义的完整性(User-definedIntegrity)。

保证数据的完整性:

  1. 用约束而非商务规则强制数据完整性如果你按照商务规则来处理需求,那么你应当检查商务层次/用户界面:如果商务规则以后发生变化,那么只需要进行更新即可。假如需求源于维护数据完整性的需要,那么在数据库层面上需要施加限制条件。如果你在数据层确实采用了约束,你要保证有办法把更新不能通过约束检查的原因采用用户理解的语言通知用户界面。除非你的字段命名很冗长,否则字段名本身还不够。只要有可能,请采用数据库系统实现数据的完整性。这不但包括通过标准化实现的完整性而且还包括数据的功能性。在写数据的时候还可以增加触发器来保证数据的正确性。不要依赖于商务层保证数据完整性;它不能保证表之间(外键)的完整性所以不能强加于其他完整性规则之上。

  2. 分布式数据系统对分布式系统而言,在你决定是否在各个站点复制所有数据还是把数据保存在一个地方之前应该估计一下未来5年或者10年的数据量。当你把数据传送到其他站点的时候,最好在数据库字段中设置一些标记。在目的站点收到你的数据之后更新你的标记。为了进行这种数据传输,请写下你自己的批处理或者调度程序以特定时间间隔运行而不要让用户在每天的工作后传输数据。本地拷贝你的维护数据,比如计算常数和利息率等,设置版本号保证数据在每个站点都完全一致。

  3. 强制指示完整性没有好办法能在有害数据进入数据库之后消除它,所以你应该在它进入数据库之前将其剔除。激活数据库系统的指示完整性特性。这样可以保持数据的清洁而能迫使开发人员投入更多的时间处理错误条件。

  4. 关系如果两个实体之间存在多对一关系,而且还有可能转化为多对多关系,那么你最好一开始就设置成多对多关系。从现有的多对一关系转变为多对多关系比一开始就是多对多关系要难得多。

  5. 采用视图为了在你的数据库和你的应用程序代码之间提供另一层抽象,你可以为你的应用程序建立专门的视图而不必非要应用程序直接访问数据表。这样做还等于在处理数据库变更时给你提供了更多的自由。

  6. 给数据保有和恢复制定计划考虑数据保有策略并包含在设计过程中,预先设计你的数据恢复过程。采用可以发布给用户/开发人员的数据字典实现方便的数据识别同时保证对数据源文档化。编写在线更新来“更新查询”供以后万一数据丢失可以重新处理更新。

  7. 用存储过程让系统做重活解决了许多麻烦来产生一个具有高度完整性的数据库解决方案之后,我所在的团队决定封装一些关联表的功能组,提供一整套常规的存储过程来访问各组以便加快速度和简化客户程序代码的开发。在此期间,我们发现3GL编码器设置了所有可能的错误条件,比如以下所示:SELECTCnt=COUNT(*)FROM[<Table>]WHERE[<primarykeycolumn>]=<newvalue>IFCnt=0BEGININSERTINTO<Table>VALUES(<Newvalue>)ENDELSEBEGIN<indicateduplicationerror>END而一个非3GL编码器是这样做的:INSERTINTO<Table>VALUES(<Newvalue>)IF@@ERROR=2627--LiteralerrorcodeforPrimaryKeyConstraintBEGIN<indicateduplicationerror>END第2个程序简单多了,而且事实上,利用了我们给数据库的功能。虽然我个人不喜欢使用嵌入文字(2627)。但是那样可以很方便地用一点预先处理来代替。数据库不只是一个存放数据的地方,它也是简化编码之地。

  8. 使用查找控制数据完整性的最佳方式就是限制用户的选择。只要有可能都应该提供给用户一个清晰的价值列表供其选择。这样将减少键入代码的错误和误解同时提供数据的一致性。某些公共数据特别适合查找:国家代码、状态代码等

23、请举例说明使用视图的优点?

  1. 视图能够简化用户的操作

  2. 视图使用户能以多钟角度看待同一数据

  3. 视图对重构数据库提供了一定程度的逻辑独立性

  4. 视图能够对机密数据提供安全保护

  5. 适当的利用视图可以更清晰的表达查询,

24、请简单描述delete语句和drop语句的差异?

  1. 执行速度不同drop语句的速度要大于delete语句。

  2. 语言种类不同delete语句是DML语言,不会自动提交。drop语句是DDL语言,执行后会自动提交。

  3. 功能不同delete语句用于删除局部性数据如表中的某一元组。drop语句一般用于删除整体性数据如表,模式,索引,视图,完整性限制等。

  4. 删除形式不同delete语句删除内容、释放空间但不删除定义,但是delete既可以对行数据进行删除,也可以对整表数据进行删除。drop语句删除内容和定义,并释放空间。执行drop语句,将使此表的结构一起删除。

25、连接查询中,什么是内连接查询,什么是外连接查询?

  • 内连接查询:内连接查询的关键字是innerjoin或者join。返回的是表中存在至少一个匹配的数据,那么不匹配的数据肯定就不返回了,如果都不匹配,是空。

  • 外连接查询:左外连接关键字是LEFTOUTERJOIN或LEFT JOIN。左外连接查询是以左边的表为基准,去匹配要连接的表,不管是否匹配条件都会以基准表的条数返回结果(这里明显不同于内连接),匹配到的数据就显示匹配到的数据,没有匹配条件的数据就显示为null。