一、数据库系统1.1:数据库基本理论1.数据库与数据库管理系统有什么区别?答:数据库是以某种数据模型所确定的数据结构方式来组织和存储数据的。简单来说,数据库是存放数据的仓库,数据库管理系统是用来管理数据库的。2.是什么数据模型?答:数据模型是对现实世界数据特征进行抽象的工具,用来描述和处理现实世界中的数据和信息。数据模型主要由数据结构、数据操作、数据完整性规则三部分组成。数据结构描述了组成数据库的基本成分,数据操作描述了对数据结构允许执行的操作的集合,数据完整性规则描述了对数据结构所具有的约束和存储规则。3.什么是关系数据模型?答:关系数据模型是用二维表的方式来组织、存储和处理数据和信息的。4.什么是记录和字段?答:二维表中的每一行称为一条记录,描述了关系中一个具体的个体,在数据文件中是一个记录值。二维表中的每一列是一个字段,描述了关系中的一个特征。5.什么是主键?答:主键是指二维表中的某个列或者某几个列,它们的值能够唯一确定数据表中的一条记录。6.什么是数据完整性规则?答:数据完整性是指数据库中存储的数据是有意义的或者说是正确的。关系数据模型中的数据完整性规则是指对二维表的定义和操作过程要遵循的某些约束条件。数据完整性包括:a).实体完整性,指每张数据表都必须有主键,而且表中不允许存在无主键的记录和主键值相同的记录。b).参照完整性,指一张数据表中某列的取值受另一张数据表中某列的取值范围的约束,描述了多张表之间的关联关系。C).用户定义完整性,指针对某一具体应用定义的数据库约束条件,反应某一具体应用所涉及的数据必须满足应用语义的要求。即限制属性的取值类型和范围,防止属性的值与应用语义矛盾。7.什么是视图?答:视图是一种虚拟的表,具有和基本表相同的功能。可以对视图进行增加、修改、查找操作,视图通常是由一个基本表或者多个基本表的行或列的子集组成。对视图的修改不影响基本表。8.索引的作用及其优缺点?答:索引是对数据表中一个或者多个列的值进行排序的结构。数据库的搜索引擎可以利用它加速对数据的检索。其优点是有助于更快地获取信息。缺点是降低添加、删除和更新数据的速度,同时也增减了数据库的大小。因此,只有经常查询索引列中的数据时,才需要在表中创建索引。不过在大多数情况下,索引所带来的数据检索速度的优势大大超过了它的不足之处。如果应用程序非常频繁地更新数据,或磁盘空间有限,那么最好限制索引的数量。9.什么是存储过程?用什么来调用存储过程?答:存储过程是SQL语句和可选控制流语句的预编译集合,以一个名称存储并作为一个单元处理。存储过程存储在数据库内,可以由应用程序通过一个调用执行。存储过程具有很强的编程能力,在其中允许用户声明变量及定义条件执行语句。存储过程可包含程序流、逻辑以及对数据库的查询。它们可以接受参数、输出参数、返回单个或多个结果集及返回值。其优点主要包括:A).允许多个模块化的设计:也就是说只需创建一次并将其存储在数据库中,以后在该程序中就可以调用多次。存储过程可由在数据库编程方面有专长的人员创建,可独立于程序源代码而独立修改。B)执行速度更快:如果某操作需要大量SQL代码或需重复执行,存储过程将比SQL批量代码的执行要快。在创建存储过程时,数据库将对其进行分析和优化,并可在首次执行该存储过程后,直接调用存放在内存中的该存储过程。C)减少网络流量:在B/S或者C/S结构的程序中,一个需要数百行SQL代码的操作由一条执行存储过程的单独语句即可实现,不需要在网络中发送数百行代码。D)可使用安全机制进行控制:执行存储过程的用户必须具有一定的权限,否则无法调用存储过程。存储过程的唯一弊端就是移植性差。如果一个项目的数据库操作全部使用存储过程,当使用的数据库服务器发生改变时,几乎所有的存储过程都要重写。10.触发器的作用?答:触发器是一种特殊类型的存储过程,不由用户直接调用,主要是通过事件触发而被执行。使用UPDATE、INSERT、DELETE等数据修改操作在指定表中进行数据修改时,触发器会自动执行。它可以强化约束来维护数据的完整性和一致性,以便在添加、更新或删除表中的行时保留表之间已定义的关系。可以跟踪数据库内的操作从而不允许未经许可的更新和变化。触发器的优点:A)触发器是自动的。表中的数据做了修改之后,触发器将立即被激活。B)触发器可以通过数据库中的相关表进行层叠更改。例如,可以在数据表的某列上写入一个删除触发器,以使其他表中的各匹配行采取删除操作。C)触发器可以强制限制,这些限制比用CHECK约束所定义的更复杂。与CHECK约束不同的是,触发器可以引用其他表中的列。11.什么是数据库事务?答:数据库事务是被绑定在一起作为一个逻辑工作单元的SQL语句分组。如果其中任何一条语句操作失败,那么整个事务操作就会失败,回滚到操作前的状态,只有全部语句都执行成功,事务才算执行成功。因此,如果要确保一组SQL语句要么都执行,那么都不执行,就需要使用数据库事务。事务是恢复和并发控制的基本单位。它具有四个属性:原子性、一致性、隔离性、持续性。这四个属性通常称为ACID特性。A)原子性(automicity):一个事务是一个不可分割的工作单位,事务中包括的所有操作要么都做,要么都不做。B)一致性(consistency):事务必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。C)隔离性(isolation):一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能相互干扰。D)持久性(durability):持久性也称为永久性(permanence),指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其有任何影响。12.什么叫做SQL注入式攻击?答:所谓SQL注入式攻击就是攻击者把SQL命令插入到WEB表单的输入域或者提交页面请求的查询字符串中,从而执行恶意的SQL命令。在某些情况下,用户在输入域中输入的内容直接被用来构造动态SQL命令,或作为存储过程的输入参数,这类表单特别容易受到SQL注入式攻击。防范SQL注入式攻击闯入并不是特别困难的一件事,只需要在利用表单输入的内容构造SQL命令之前,把所有输入内容过滤一番就可以了。过滤输入内容可以按多种方式进行。A)替换单引号,即把所有的单独出现的单引号改成两个单引号,防止攻击者修改SQL命令的含义。B)删除用户输入内容中的所有连字符,防止攻击者构造出带有注释的语句,从而使数据库忽略一部分信息而直接执行。C)对于执行查询的数据库账户,限制其权限。用不同的用户帐户执行查询、插入、更新、删除操作。由于隔离了不同账户可执行的操作,因此也就防止了原本用于执行SELECT命令的地方却用于执行INSERT、UPDATE或DELETE命令。D)用存储过程来执行所有的查询。SQL参数的传递方式将防止攻击者利用单引号和连字符实施攻击。此外,还使得数据库权限可以限制到只允许特定的存储过程执行,所有的用户输入必须遵从被调用的存储过程的安全上下文,这样就很难再发生注入式攻击了。E)限制表单或查询字符串输入的长度。F)检查用户输入的合法性,确信输入的内容只包含合法的数据。数据检查应当在客户端和服务器端都执行。之所以要执行服务器端验证,是为了弥补客户端验证机制脆弱的安全性。G)将用户登录名、密码等数据加密保存。加密用户输入的数据,让后再将它与数据库中保存的数据比较,这样用户输入的数据不再对数据库有任何特殊的意义。H)检查提取数据的查询所返回的记录数量。如果程序只要求返回一条记录,但实际返回的记录却超过一行,则就当作错误处理。13试解释COMMIT操作和ROLLBACK操作的语义?答:COMMIT语句表示事务执行成功地结束,此时告诉系统,该事务对数据库的所有更新都将写入磁盘。ROLLBACK表示事务执行不成功地结束,应该回退到初始状态(上一次COMMIT之后)。该事务对数据库的所有更新必须被撤销,数据库应该恢复该事务到初始状态。14.如何估计一张表的大小?答:数据表的大小=所有字段的字节数之和*数据表中记录的条数15.谈谈你所知道的JOIN语句的使用,考虑到性能的优化,你有什么建议?答:JOIN语句分为以下几种:A)LEFTJOIN:左连接,返回左表中所有的记录以及右表中与连接字段相等的记录。即显示符合条件的数据行,同时显示左边数据表不符合条件的数据行,右边没有对应的条目显示NULL。B)RIGHTJOIN:右连接,返回右表中所有的记录以及左表中与连接字段相等的记录。即显示符合条件的数据行,同时显示右边数据表不符合条件的数据行,左边没有对应的条目显示NULL。C)INNERJOIN:内连接,又叫等值连接,只返回两个表中连接字段相等的行。D)FULLJOIN:外连接,显示符合条件的数据行,同时显示左右不符合条件的数据行,相应的左右两边显示NULL,即显示左连接、右连接和内连接的并集。E)CROSSJOIN:交叉连接,结果是笛卡尔积,就是第一个表的行数乘以第二个表的行数。交叉连接如果不带WHERE条件字句,他将返回被连接的两个表的笛卡尔积,返回结果的行数等于两个表行数的乘积。因此,如果两个需要求交集的表太大,将会非常非常慢,不建议使用。16.NULL在数据库中是什么含义?在SQLServer数据库中有哪些涉及NULL的操作?答:NULL表示未知,不表示空字符串。与NULL的任何比较都会产生一个NULL值。因为不能把任何值与一个未知值进行比较。在SQLServer中判断是否等于NULL,不能用=NULL和NULL。而要使用ISNULL和ISNOTNULL操作符。设置字段值时可以用:updateXXsetYY=NULL插入新纪录时可以用:insertXXX(YYY)values(NULL)17.SQLServer中有几种不同类型的触发器?答:触发器是一种专用类型的存储过程,他被捆绑到SQLServer的表或视图上。在SQLServer里,有INSTEAD-OF和AFTER两种类型的触发器。INSTEAD-OF触发器是替代数据操控语言语句对表执行的存储过程。AFTER触发器则在DML语句在数据库里使用之后才执行。18.请解释Oracle中冷备份和热备份的不同点以及各自的优点?答:热备份针对归档模式的数据库,在数据库仍处于工作状态时进行备份。而冷备份是指在数据库关闭后进行备份,适用于所有模式的数据库。热备份的优点在于备份时,数据库仍可以被使用并且可以将数据库恢复到任意一个时间点。冷备份的优点在于它的备份和恢复操作相当简单,并且由于冷备份的数据库可以工作在非归档模式下,数据库性能会比归档模式稍好。19.Oracle的主要内存结构有哪些?答:软件代码区:用于存储正在执行的或可以执行的程序代码。系统全局区(SGA):一组由Oracle分配的共享的内存结构,可包含一个数据库实例的数据或控制信息。程序全局区(PGA):包含单个用户或服务器数据和控制信息的内存区域,它是在用户进程连接到Oracle并创建一个会话时由Oracle自动分配的。PGA包含的是有关进程正在使用操作系统资源信息以及进程的状态信息,而其他的进程所使用的Oracle的共享资源在SGA中。排序区:Oracle利用该内存排序数据。20.Oracle中的临时表有几种?使用临时表的主要原因是什么?答:临时表在Oracle数据库中起到建立一个临时性的存放某些数据集的作用。临时表一般分为事务临时表和会话临时表两种。当事务结束的时候,就会清空事务临时表。所以在数据库临时表中插入数据后,只要事务没有提交,该表中的数据就会存在。但是,在事务提交或者回滚以后,该表中的数据就会被删除。而且,这个变化不会在重做日志中显示。当然,如果会话结束,事务临时表中的数据也会被清空。会话里临时表是指数据只在当前会话内有效的临时表。关闭当前会话或者进行新的连接之后,数据表中的内容就会被清楚。Oracle的临时表在应用系统中有很大的作用,它可以让用户只能够操作各自的数据而互不干扰,