IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发测试 -> 数据库知识总结 -> 正文阅读

[开发测试]数据库知识总结


本部分来自公众号?软件测试面试汇总

图片

select e.Emp_id,e.Emp_name,e.Dept_id FROM emp e LEFT JOIN dept d on e.Dept_id=d.Dept_id

请编写SQL语句:

1)创建一张学生表,包含以下信息,学号,姓名,年龄,性别,家庭住址,联系电话

CREATE TABLE Student(

s_id int(5),

s_name VARCHAR(20),

s_age INT(3),

s_sex char(2),

s_address VARCHAR(20),

s_phone char(11)

)

2)修改学生表的结构,添加一列信息,学历

alter TABLE Student add s_ed VARCHAR(10);

3)修改学生表结构,删除一列信息,家庭住址

ALTER TABLE Student DROP COLUMN s_address;

4)向学生表添加如下信息:?学号?姓名?年龄?性别?联系电话?学历

1A22男123456小学;2B21男119中学;3C23男110高中;4D18女114大学

INSERT into Student VALUES(1,'A',22,'男','123456','小学');

INSERT into Student VALUES(2,'B',21,'男','119','中学');

INSERT into Student VALUES(3,'C',23,'男','110','高中');

INSERT into Student VALUES(4,'B',18,'女','114','大学');

5)修改学生表的数据,将电话号码以11开头的学员的学历改为“大专‘’

UPDATE Student SET s_ed='大专' WHERE s_phone like '11%';

6)删除学生表的数据,姓名以C开头,性别为“男”的记录删除

DELETE FROM Student where s_sex='男' and s_name like 'C%';

7)查询学生表的数据,将所有年龄小于22岁的,学历为“’大专”的,学生的姓名和学号示出来

SELECT s_name,s_id FROM Student WHERE s_sex < 22 and s_ed='大专';

设计题:已知教学数据库包含三个关系:学生关系S(SND,SNAME,SA,SD)课程关系C(CNO,CN,TNAME),选课关系SC(SNO,CNO,G)其中,下划线的字段为该关系的码,SNO代表学号,SNAME代表学生姓名,SA代表学生年龄,SD代表学生所在系,CNO代表课程号,CN代表课程名,TNAME代表任课老师姓名,G代表成绩,请用SQL语句实现:

??1、简历学生关系和选课关系,有完整约束的要定义完整性约束

??CREATE TABLE S(

SNO INT(10) not null PRIMARY KEY,-- 学号

SNAME VARCHAR(20) not null,-- 姓名

SAINT(3),--?年龄

SD VARCHAR(10)-- 所在系

)

CREATE TABLE C(

CNO INT(10) not null PRIMARY KEY,-- 课程号

CN VARCHAR(20) UNIQUE , -- 课程名

TNAMEINT(3) not null--?任课老师

)

CREATE TABLE SC(

SNO INT(10),-- 学号

CNO VARCHAR(20), -- 课程号

GINT(3),--?成绩

FOREIGN KEY (SNO) REFERENCES S(SNO),

FOREIGN KEY (CNO) REFERENCES C(CNO)

)

??2、将下列学生信息插入学生关系中:李丹,18岁,电信系,学号:20070206

INSERT into S(SNO,SNAME,SD) VALUES(20070206,'李丹','电信系');

??3、找出选修了课程为“112002”的学生学号和姓名

SELECT S.SNO,S.SNAME FROM S S,SC C where S.SNO=C.SNO ?AND C.CNO='112002';

??4、修改学号为“20070206”的学生所在的系为计算机

UPDATE S SET SD='计算机' WHERE SNO='20070206'

5、?查询选修了数据库系统原理?这门课的学生的姓名和成绩

SELECT S.SNAME,C.G FROM S S,SC C where S.SNO=C.SNO;

本部分来自公众号?编测编学0基础软件测试训练营

图片

?第一题参考答案:

select?*?from?Laagent?where?Sex=0?and?EmployDate?>'2003-11-02'???order?by?Agentcode?desc;

第二题参考答案:

update  Laagent set State='01'  where Agentcode in (select Agentcode from LaTree where StartDate >'2003-01-01');

第三题参考答案:

union:对两个结果集进行并集操作,不包括重复行,同时进行默认规则的排序;union all:对两个结果集进行并集操作,包括重复行,不进行排序;

本部分内容来自公众号DB宝

Q

题目如下所示:

Linux文件的三种时间(mtime、atime、ctime)的区别是什么?

A

答案如下所示:

在Windows下,一个文件有:创建时间、修改时间、访问时间,而在Linux下,一个文件也有三种时间,分别是:访问时间、修改时间、状态时间。在Linux中,文件是没有创建时间的,只是如果刚刚创建一个文件,毋庸置疑它的三个时间是都等于创建时间的。下面分别介绍这3种时间状态:

l?修改时间(mtime,Modify time):文件的内容被最后一次修改的时间,“ls -l”命令显示出来的文件时间就是这个时间,当用vim对文件进行编辑之后保存,它的mtime就会相应的改变;

l?访问时间(atime,Access time):对文件进行一次读操作,它的访问时间就会改变。例如:cat、more等操作,但是stat、ls命令对atime是不会有影响的;

l?状态时间(ctime,Change time):当文件的状态被改变的时候,状态时间就会随之改变,例如当使用chmod、chown等命令改变文件属性时,ctime就会变动。

可以使用stat命令查看文件的mtime、atime、ctime属性,也可以通过ls命令来查看,具体如下:

ls -lc filename ?#列出文件的ctime

ls -lu filename ?#列出文件的atime

ls -l filename ??#列出文件的mtime

以下示例是查看a.txt文件的属性:

[root@rhel6lhr adump]# stat a.txt

??File: `a.txt'

??Size: 2 ??????????????Blocks: 8 ?????????IO Block: 4096 ??regular file

Device: fd07h/64775d ???Inode: 278405 ?????Links: 1

Access: (0644/-rw-r--r--) ?Uid: ( ???0/ ???root) ??Gid: ( ???0/ ???root)

Access: 2017-08-22 18:03:35.432369855 +0800

Modify: 2017-08-22 18:04:05.602610124 +0800

Change: 2017-08-22 18:04:05.602610124 +0800

[root@rhel6lhr adump]#?ls -lc a.txt

-rw-r--r-- 1 root root 2 Aug 22 18:04 a.txt

[root@rhel6lhr adump]#?ls -lu a.txt

-rw-r--r-- 1 root root 2 Aug 22 18:03 a.txt

[root@rhel6lhr adump]#?ls -l a.txt

-rw-r--r-- 1 root root 2 Aug 22 18:04 a.txt

在Oracle中,SELECT语句在带有下列哪个选项中的子句时可以在表的一行或多行放置排它锁()

A、FOR INSERT????

B、FOR UPDATE???

C、FOR DELETE????

D、FOR REFRESH

答案:B。

如果只是SELECT的话,Oracle是不会加任何锁的,也就是Oracle对SELECT读到的数据不会有任何限制,虽然这时候有可能另外一个进程正在修改表中的数据,并且修改的结果可能影响到你目前SELECT语句的结果,但是因为没有锁,所以SELECT结果为当前时刻表中记录的状态。

当对话使用SELECT ... FOR UPDATE子串打开一个游标时,所有返回结果集中的数据行都将处于行级(Row-X)独占式锁定,其它对象只能查询这些数据行,不能进行UPDATE、DELETE或SELECT ... FOR UPDATE操作,但是可以执行INSERT的操作。在Oracle 10g之前FOR UPDATE是行级共享锁(SS,Sub-Share)锁,在Oracle 10g及其以后的版本中,FOR UPDATE属于行级排它锁(SX,Sub-Exclusive)。

在Oracle中无A、C和D选项的语法。

所以,本题的答案为B。

在Oracle中,通过下列哪个选项中的命令可以释放锁()

A、INSERT???

B、DELETE???

C、ROLLBACK???

D、UNLOCK

答案:C。

要结束一个事务,只有通过COMMIT或者ROLLBACK命令,而INSERT、DELETE或UPDATE都会加锁。对于选项D,Oracle中没有UNLOCK这个命令。

显然,本题的答案为C。

在Oracle中,当以SYSDBA登录,CUSTOMER表位于MARY用户方案中,下面哪条语句为数据库中的所有用户创建CUSTOMER表的同义词()

A、CREATE PUBLIC SYNONYM CUST ON MARY.CUSTOMER;

B、CREATE PUBLIC SYNONYM CUST FOR MARY.CUSTOMER;

C、CREATE SYNONYM CUST ON MARY.CUSTOMER FOR PUBLIC;

D、不能创建CUSTOMER的公用同义词。

答案:B。

创建同义词的语法为:

CREATE OR REPLACE ?[PUBLIC ] ?SYNONYM?同义词名称?FOR?用户名.表名称;

要为所有用户创建同义词需要使用PUBLIC关键词。所以,本题的答案为B。

在Oracle数据库中,表VENDOR包含以下列:

VENDOR_ID NUMBER PRIMARY KEY

NAME VARCHAR2(30)

LOCATION_ID NUMBER

ORDER_DT DATE

ORDER_AMOUNT NUMBER(8,2)

下面对表VENDOR运用分组函数的子句合法的是?()

A、FROM MAX(ORDER_DT)??

B、SELECT SUM(ORDER_DT)

C、SELECT SUM(ORDER_AMOUNT)????

D、WHERE?GROUP BY??ORDER_D

答案:C。

考察SELECT查询的写法。

本题中,对于选项A,FROM后边只能跟表名或视图名称。所以,选项A错误。

对于选项B,ORDER_DT为日期类型,不能采用SUM函数进行相加。所以,选项B错误。

对于选项C,ORDER_AMOUNT为数字类型,可以采用SUM函数进行相加。所以,选项C正确。

对于选项D,WHERE后应该跟上过滤条件或者连接条件。所以,选项D错误。

所以,本题的答案为C。

在SQL Server 2000中,如果希望用户U1在DB1数据库中具有查询T1表的权限,那么正确的授权语句是()

A、GRANT SELECT ON DB1(T1) TO U1 ?

B、GRANT SELECT TO U1 ON DB1(T1)

C、GRANT SELECT TO U1 ON T1 ???????

D、GRANT SELECT ON T1 TO U1

答案:D。

授权语句的语法为:

GRANT?对象权限名[,…] ON {表名|视图名|存储过程名} TO {数据库用户名|用户角色名};

这里权限是SELECT,表名是T1,用户是U1。

所以,本题的答案为D。

数据模型定义了数据库中数据的组织、描述、存储和操作规范,可以分为概念模型、数据结构模型和物理模型三大类。概念模型的典型代表是()

A、实体-联系模型 ??

B、关系模型 ??

C、面向对象模型 ??

D、网状模型

概念数据模型也可简称为概念模型,最典型的概念数据模型是实体-联系模型,所以,本题的答案为A。

以下关于查询语句叙述错误的是()

A、查询语句的功能是从数据库中检索满足条件的数据 ?????

B、查询的数据源可以来自一张表,或多张表甚至是视图

C、查询的结果是由0行或是多行记录组成的一个记录集合 ?

D、不允许选择多个字段作为输出字段

答案:D。

查询语句的功能是从数据库中检索满足条件的数据;查询的数据源可以来自一张表,或多张表关联,也可以来自于视图,包括物化视图;查询的结果是由0行或多行记录组成的一个记录集合,并且可以选择一个或多个字段作为输出字段,使用“*”可以输出所有字段。所以,本题的答案为D。

关于视图的属性列有如下说法,正确的是()

A、组成视图的属性列名应该全部指定

B、组成视图的属性列名可以省略一部分或者指定一部分,其他隐含在子查询中

C、组成视图的属性列名或者全部省略或者全部指定,别无选择

D、组成视图的属性列名应该全部省略

视图是从一个或几个基本表或视图导出的表,组成视图的属性列名或者全部省略或者全部指定,没有第三种选择。如果省略了视图的各个属性列名,那么该视图的列名就隐含在子查询中,所以,本题的答案为C。

当对通过视图看到的数据进行修改时,相应的基本表的数据也要发生变化,同时,若基本表的数据发生变化,则这种变化也可以自动地反映到视图中。

什么是视图?视图的作用是什么?哪一类是可更新视图?

视图是由从数据库的基本表中选取出来的数据组成的逻辑窗口,它不同于基本表,它是一个虚拟表,其内容由查询定义。在数据库中,存放的只是视图的定义而已,而不存放数据,这些数据仍然存放在原来的基本表结构中。只有在使用视图的时候,才会执行视图的定义,从基本表中查询数据。

同真实的表一样,视图包含一系列带有名称的列和行数据。但是,视图并不在数据库中以存储的数据值集形式存在。行和列数据来自由定义视图的查询所引用的表,并且在引用视图时动态生成。对其中所引用的基础表而言,视图的作用类似于筛选。定义视图可以来自当前或其它数据库的一个或多个表,或者其它视图。分布式查询也可用于定义使用多个异类源数据的视图。如果有几台不同的服务器分别存储不同地区的数据,那么当需要将这些服务器上相似结构的数据组合起来的时候,这种方式就非常有用。

通过视图进行查询没有任何限制,用户可以将注意力集中在其关心的数据上,而非全部数据,这样就大大提高了运行效率与用户满意度。如果数据来源于多个基本表结构,或者数据不仅来自于基本表结构,还有一部分数据来源于其它视图,并且搜索条件又比较复杂,需要编写的查询语句就会比较繁琐,此时定义视图就可以使数据的查询语句变得简单可行。定义视图可以将表与表之间的复杂的操作连接和搜索条件对用户不可见,用户只需要简单地对一个视图进行查询即可,所以,视图虽然增加了数据的安全性,但是不能提高查询的效率。

视图看上去非常像数据库的物理表,对它的操作同任何其它的表一样。当通过视图修改数据时,实际上是在改变基表(即视图定义中涉及到的表)中的数据;相反地,基表数据的改变也会自动反映在由基表产生的视图中。由于逻辑上的原因,有些Oracle视图可以修改对应的基表,有些则不能(仅仅能查询)。

数据库视图的作用有以下几点:

(1)隐藏了数据的复杂性,可以作为外模式,提供了一定程度的逻辑独立性。

(2)有利于控制用户对表中某些列或某些机密数据的访问,提高了数据的安全性。

(3)能够简化结构,执行复杂查询操作。

(4)使用户能以多种角度、更灵活地观察和共享同一数据。

视图对于DML操作应遵循的原则如下所示:

(1)简单视图可以执行DML操作。

(2)当视图包含GROUP BY子句、DISTINCT关键字时,不能执行DELETE操作。

(3)当视图出现下列情况时,不能通过视图修改基表或插入数据到基表:

(a)视图中包含GROUP BY子句、DISTINCT关键字。

(b)视图中包含了由表达式定义的列。

(c)视图中包含了ROWNUM伪列(针对Oracle数据库)。

(d)基表中未在视图中选择的其它列定义为非空且无默认值。

设计题

有商品表(商品号,商品名,分类,单价),请编写一个实现更改商品单价的存储过程(存储过程名为PUPDATE),更改规则如下:“电脑”类商品降价10%,“电视”类商品降价6%,“冰箱”类商品降价3%,其它商品不降价。以商品的分类作为输入参数,假设“分类”为字符串类型,长度最多为6个字符。如果商品表中没有用户指定的分类,那么用输出参数返回字符串“指定的分类不存在”;如果用户指定的分类存在,那么用输出参数返回字符串“修改已成功”。

这里以Oracle的存储过程语法进行说明:

CREATE PROCEDURE PUPDATE(P_TYPE VARCHAR2(6), P_OUT VARCHAR2(10)) AS

??V_COUNT NUMBER;

BEGIN

??SELECT COUNT(1) INTO V_COUNT FROM?商品表?WHERE?分类?= P_TYPE;

??IF V_COUNT > 0 THEN

????IF P_TYPE = '电脑' THEN

??????UPDATE?商品表?SET?单价?=?单价?* 0.9 WHERE?分类='电脑';

????END IF;

????IF P_TYPE = '电视' THEN

??????UPDATE?商品表?SET?单价?=?单价?* 0.94 WHERE?分类='电视';

????END IF;

????IF P_TYPE = '冰箱' THEN

??????UPDATE?商品表?SET?单价?=?单价?* 0.97 WHERE?分类='冰箱';

????END IF;

????P_OUT := '修改已成功';

??ELSE

????P_OUT := '指定的分类不存在';

??END IF;

END;

数据库系统的组成与结构有哪些?

数据库系统(DataBase System,简称DBS)一般由4个部分组成:数据库、硬件、软件、人员。

(1)数据库:是指长期存储在计算机内的、有组织、可共享的数据的集合。数据库中的数据按一定的数学模型组织、描述和存储,具有较小的冗余,较高的数据独立性和易扩展性,并可为各种用户共享。

(2)硬件:构成计算机系统的各种物理设备,包括存储所需的外部设备。硬件的配置应满足整个数据库系统的需要。

(3)软件:包括操作系统、数据库管理系统及应用程序。数据库管理系统(DataBase Management System,简称DBMS)是数据库系统的核心软件,它在操作系统的支持下工作,解决如何科学地组织和存储数据,如何高效获取和维护数据的系统软件,其主要功能包括:数据定义功能、数据操纵功能、数据库的运行管理和数据库的建立与维护等。

(4)人员:主要有4类。第一类为系统分析员和数据库设计人员:系统分析员负责应用系统的需求分析和规范说明,他们和用户及数据库管理员一起确定系统的硬件配置,并参与数据库系统的概要设计。数据库设计人员负责数据库中数据的确定、数据库各级模式的设计。第二类为应用程序员,负责编写使用数据库的应用程序。这些应用程序可对数据进行检索、建立、删除或修改。第三类为最终用户,他们利用系统的接口或查询语言访问数据库。第四类用户是数据库管理员(DBA),负责数据库的总体信息控制。DBA的职责通常包括以下几点内容:维护数据库中的信息内容和结构,制定数据库的存储结构和存取策略,定义数据库的安全性要求和完整性约束条件,监控数据库的使用和运行,负责数据库的性能改进、数据库的重组和重构,以提高系统的性能。其中,应用程序包含在软件范围内,是指数据库应用系统,例如开发工具、人才管理系统、信息管理系统等。

索引有哪些作用?

答案:创建索引可以大大提高系统的性能,总体来说,创建索引有如下几点用途:

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

② 索引可以加速表和表之间的连接。

③ 索引在实现数据的参照完整性方面特别有意义,例如在外键列上创建索引可以有效的避免死锁的发生,也可以防止当更新父表主键时,数据库对子表的全表锁定。

④ 索引是减少磁盘I/O的许多有效手段之一。

⑤ 当使用分组(GROUP BY)和排序(ORDER BY)子句进行数据检索时,可以显著减少查询中分组和排序的时间,大大加快数据的检索速度。

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

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

什么是聚簇索引和非聚簇索引?在哪些列上适合创建聚簇索引?

索引是一种特殊的数据结构。微软的SQL Server提供了两种索引:聚集索引(Clustered Index,也称聚类索引、簇集索引、聚簇索引)和非聚集索引(Nonclustered Index,也称非聚类索引、非簇集索引)。

聚集索引是一种对磁盘上实际数据重新组织以按指定的一个或多个列的值排序的一种索引。由于聚集索引的索引页面指针指向数据页面,所以,使用聚集索引查找数据几乎总是比使用非聚集索引快。需要注意的是,由于聚集索引规定了数据在表中的物理存储顺序,所以,每张表只能创建一个聚集索引,并且创建聚集索引需要更多的存储空间,以存放该表的副本和索引中间页。

聚集索引表记录的排列顺序与索引的排列顺序一致,优点是查询速度快,因为一旦具有第一个索引值的纪录被找到,具有连续索引值的记录也一定物理的紧跟其后。聚集索引的缺点是对表进行修改速度较慢,这是为了保持表中的记录的物理顺序与索引的顺序一致,而把记录插入到数据页的相应位置,必须在数据页中进行数据重排,降低了执行速度。

聚集索引对于那些经常要搜索范围值的列特别有效。使用聚集索引找到包含第一个值的行后,便可以确保包含后续索引值的行在物理上是相邻的。例如,如果应用程序执行的一个查询经常检索某一日期范围内的记录,那么使用聚集索引可以迅速找到包含开始日期的行,然后检索表中所有相邻的行,直到到达结束日期。这样有助于提高此类查询的性能。同样,如果对从表中检索的数据进行排序时经常要用到某一列,那么可以将该表在该列上聚集(物理排序),避免每次查询该列时都进行排序,从而节省成本。

非聚集索引指定了表中记录的逻辑顺序,但记录的物理顺序和索引的顺序不一致,聚集索引和非聚集索引都采用了B+Tree的结构,但非聚集索引的叶子层并不与实际的数据页相重叠,而采用叶子层包含一个指向表中的记录在数据页中的指针的方式。非聚集索引比聚集索引层次多,添加记录不会引起数据顺序的重组。

聚集索引和非聚集索引的根本区别是表记录的物理排列顺序和索引的排列顺序是否一致。聚集索引和非聚集索引有如下几点不同:

① 聚集索引一个表只能有一个,而非聚集索引一个表可以存在多个。

② 聚集索引存储记录是物理上连续存在,物理存储按照索引排序,而非聚集索引是逻辑上的连续,物理存储并不连续,物理存储不按照索引排序。

③ 聚集索引查询数据比非聚集索引速度快,插入数据速度慢(时间花费在“物理存储的排序”上,也就是首先要找到位置然后插入);非聚集索引反之。

④ 索引是通过二叉树的数据结构来描述的,聚集索引的叶节点就是数据节点,而非聚集索引的叶节点仍然是索引节点,只不过有一个指针指向对应的数据块。

下表列出了何时使用聚集索引或非聚集索引:

动作描述

使用聚集索引

使用非聚集索引

列经常被分组或排序

返回某范围内的数据

不应

一个或极少不同值

不应

不应

小数目的不同值

不应

大数目的不同值

不应

频繁更新的列

不应

外键列

主键列

频繁修改索引列

不应

在Oracle中,位图索引是什么?在哪些列上适合创建位图索引?

位图索引(Bitmap Indexes)是一种使用位图的特殊数据库索引。它针对大量相同值的列而创建,例如:类别、型号等。位图索引块的一个索引行中存储的是键值(以比特位0、1的形式存储)和起止ROWID(ROWID的内容可以参考【3.2.28?ROWID和ROWNUM有什么区别?】),以及这些键值的位置编码,位置编码中的每一位表示键值对应的数据行的有无。一个块可能指向的是几十甚至成百上千行数据的位置。

在位图索引中,数据库为每个索引键存储一个位图。在传统的B-Tree索引中,一个索引条目指向单个行,但是在位图索引中,每个索引键存储指向多个行的指针。相对于B-Tree索引,位图索引占用的空间非常小,创建和使用速度非常快。当根据键值查询时,可以根据起始ROWID和位图状态,快速定位数据。当根据键值做AND、OR或IN?(X,Y,..)查询时,直接用索引的位图进行或运算,快速得出结果集。当SELECT COUNT(XX)时,可以直接访问索引从而快速得出统计数据。

位图索引与其它索引不同,它不是存储的索引列的列值,而是以比特位0、1的形式存储,所以在空间上它占的空间比较小,相应的一致性查询所使用的数据块也比较小,查询的效率就会比较高。所以,一般应用于即席查询和快速统计条数。由于位图索引本身存储特性的限制,所以,在重复率较低的列或需要经常更新的列上是不适合建立位图索引的。另外,位图索引更新列更容易引起死锁。

在Oracle中,哪几种情况不能用上索引?

“为什么索引没有被使用”是一个涉及面较广的问题。有多种原因会导致索引不能被使用。首要的原因就是统计信息不准,第二原因就是索引的选择度不高,使用索引比使用全表扫描效率更差。还有一个比较常见的原因,就是对索引列进行了函数、算术运算或其他表达式等操作,或出现隐式类型转换,导致无法使用索引。还有很多其它原因会导致不能使用索引,这个问题在MOS(MOS即My Oracle Support)“文档1549181.1为何在查询中索引未被使用”中有非常详细的解释,作者已经将相关内容发布到BLOG(http://blog.itpub.net/26736162/viewspace-2113670/)上了。下面是一些非常有用的检查项目。

在Oracle中,行迁移和行连接的区别有哪些?

当一行的数据过长而不能存储在单个数据块中时,可能发生两种事情:行链接(Row Chaining)或行迁移(Row Migration)。

① 行链接(Row Chaining):当第一次插入行时,由于行太长而不能容纳在一个数据块中时,就会发生行链接。在这种情况下,Oracle会使用与该块链接的一个或多个数据块来容纳该行的数据。行链接经常在插入比较大的行时才会发生,例如包含LONG、LONG ROW、LOB等类型的数据。在这些情况下,行链接是不可避免的。行链接通常由INSERT操作引起。

② 行迁移(Row Migration):当一个行上的更新操作导致当前的数据增加以致于不能再容纳在当前块,这个时候就需要进行行迁移,在这种情况下,Oracle将会迁移整行数据到一个新的数据块中。一个行迁移意味着整行数据都将会移动,原始的数据块上仅仅保留的是指向新块的一个地址信息。发生行迁移的时候行的ROWID不会改变。行迁移的情况主要是由于表上的PCTFREE参数设置过小导致,所以必须设置一个合适的PCTFREE参数。可以使用exp/imp工具导入导出来处理行迁移。行迁移通常由UPDATE操作引起。

在Oracle中,如何查看登陆到系统的用户的用户名?

以下3个命令均可以查看当前登录到系统的用户名:

SHOW ??USER;

SELECT ??SYS_CONTEXT('USERENV','SESSION_USER') ??FROM ??DUAL;

SELECT ??USER ??FROM ??DUAL;

Oracle和MySQL中的分组(GROUP BY)有什么区别?

Oracle对于GROUP BY是严格的,所有要SELECT出来的字段必须在GROUP BY后边出现,否则会报错:“ORA-00979: not a GROUP BY expression”。而MySQL则不同,如果SELECT出来的字段在GROUP BY后面没有出现,那么会随机取出一个值,而这样查询出来的数据不准确,语义也不明确。所以,作者建议在写SQL语句的时候,应该给数据库一个非常明确的指令,而不是让数据库去猜测,这也是写SQL语句的一个非常良好的习惯。

MySQL支持哪几类分区表?

表分区是指根据一定规则,将数据库中的一张表分解成多个更小的,容易管理的部分。从逻辑上看,只有一张表,但是底层却是由多个物理分区组成,每个分区都是一个独立的对象。分区有利于管理大表,体现了“分而治之”的理念。一个表最多支持1024个分区。MySQL支持的分区类型主要包括RANGE分区、LIST分区、HASH分区、KEY分区。分区表中对每个分区再次分割就是子分区(Subpartitioning),又称为复合分区。在MySQL 5.5中引入了COLUMNS分区,细分为RANGE COLUMNS和LIST COLUMNS分区。引人COLUMNS分区解决了MySQL 5.5版本之前RANGE分区和LIST分区只支持整数分区,从而导致需要額外的函数计算得到整数或者通过额外的转换表来转换为整数再分区的问题。

下列关于数据库基本概念的叙述中,哪一条是错误的()

A、数据库可理解为是在计算机存储设备中按一定格式存放数据的仓库

B、数据库是按一定结构组织并可以长期存储在计算机内的、在逻辑上保持一致的、可共享的大量相关联数据的集合

C、数据库中的数据一般都具有较大的冗余度

D、数据库中的数据是按一定的数据模型组织在一起的

数据库中的数据一般满足第三范式,具有较小的冗余度,所以,选项C描述错误。

所以,本题的答案为C。

设有关系模式:教师表(教师号,教师名,所在系,工资),现需建立一个统计每个系全体教师工资总额的视图,正确的语句是()

A、CREATE VIEW SALARYVIEW(系名,工资总额)AS

?????SELECT?所在系,COUNT(工资) FROM?教师表?GROUP BY?所在系;

B、CREATE VIEW SALARYVIEW(系名,工资总额)AS

?????SELECT?所在系,SUM(工资) FROM?教师表?GROUP BY?所在系;

C、CREATE VIEW SALARYVIEW AS

?????SELECT?所在系,COUNT(工资) FROM?教师表?GROUP BY?所在系;

D、CREATE VIEW SALARYVIEW AS

?????SELECT?所在系,SUM(工资) FROM?教师表?GROUP BY?所在系;

本题中,求工资总额应该使用SUM函数,据此排除A和C,另外,由于要返回所在系和工资总额,共有2列,D选项的列“SUM(工资)”必须有别名,否则会报错。所以,选项B正确。

下列关于数据模型的叙述中,哪一条是错误的()

A、数据模型是用来描述、组织和处理现实世界中数据的工具

B、数据模型主要用于定义数据库的静态特征,但是不便于描述数据间的动态行为

C、数据模型需要能比较真实地模拟现实世界

D、数据模型是数据库系统的核心和基础

模型是现实世界特征的模拟和抽象。数据模型(概念模型、逻辑模型、物理模型)是用来描述数据库数据的结构、定义在结构上的操纵、数据间的约束的一组概念和定义,描述数据库的静态特征、动态行为、数据约束条件,为数据库的表示和操纵提供框架。数据模型的三要素:数据结构、数据操作、数据约束。数据模型应满足:①能比较真实的模拟现实世界,②容易为人理解,③便于在计算机上实现。显然,选项A、C和D的描述正确。

对于选项B,数据模型主要用于描述数据库的静态特征、动态行为、数据约束条件,所以,选项B描述错误。

若一门课程只能由一位教师讲授,而一位教师可以讲授若干门课程,则课程与教师这两个实体型之间的联系是()

A、一对一 ????

B、多对多 ????

C、一对多 ???

D、多对一

实体集A、B,若对于A中的每一个实体,B中有n(n≥0)个于之关联,反之,对于B中的每一个实体,A中至多只有一个实体与之关联,则A:B=1:n。所以,选项D正确。

下列关于概念模型的叙述中,哪一条是错误的()

A、概念模型是现实世界到信息世界的抽象 ? ? ? ? ? ? ? ??

B、概念模型是从用户观点对数据和信息的建模

C、概念模型具有较强的语法表达能力,却无法描述语义信息 ?

D、E-R模型是概念模型最常用的表示方法

概念模型是现实世界到信息世界的语义抽象,主要用于数据库设计中的概念设计,是划分客观世界概念、描述概念的性质以及概念间联系的语义模型,是数据库设计者与用户之间交流的工具,是数据库逻辑模型的基础,它表示简单、易于理解且具有较强的语义表达能力,独立于具体的逻辑模型并易于向逻辑模型转换。E-R模型是概念模型最常用的表示方法。

下列关于数据库中“型”和“值”的叙述中,哪一条是错误的()

A、数据库中的型是指对某一类数据的结构和属性的描述 ?

B、数据库的型是随时间发生不断变化的

C、数据库的型亦称为数据库的内涵 ???????????????????

D、数据库的值是型的一个具体赋值

数据库中的型也称为数据库的内涵,是指对数据结构及其属性的描述。数据库的型是稳定的,而其值是随时间不断变化的,因为数据库中的数据在不断变更。数据库的值称为数据库的外延。

下列关于关系数据模型的叙述中,哪一条是错误的()

A、关系模型中数据的物理结构是一张二维表

B、在关系模型中,现实世界的实体以及实体间的各种联系均用关系来表示

C、插入、删除、更新是关系模型中的常用操作

D、关系操作通过关系语言实现,关系语言的特点是高度非过程化

关系模型是用二维表结构表示各类实体及实体间的联系,一个关系数据库由多张二维表组成。一个二维表就是一个关系。

本题中,对于选项A,关系模型中数据的逻辑结构是一张二维表,选项中说成了物理结构,所以选项A描述错误。所以,选项A正确。其它选项的描述均正确。

下列关于关系数据语言的叙述中,哪一条是错误的()

A、关系代数是关系操作语言的一种传统表示方式,是一种抽象的查询语言

B、元组关系演算和域关系演算属于关系演算语言

C、关系代数比关系演算具有更强的表达能力

D、SQL语言是一种重要的关系数据语言

关系代数是关系操作语言的一种传统表示方式,以集合代数为基础而发展,关系代数操作的操作对象和操作结果均为关系。关系代数、元组关系演算、域关系演算均是抽象的查询语言,三种语言在在表达能力上完全等价。所以,选项C的描述是错误的。

现有“学生-选课-课程”数据库中的三个关系如下:

S(S#,SNAME,SEX,BIRTHYEAR,DEPT),主码是S#

C(C#,CNAME,TEACHER),主码是C#

SC(S#,C#,GRADE),主码是(S#,C#)

下列关于保持数据库完整性的叙述中,哪一条是错误的()

A、向关系SC插入元组时,S#和C#都不能是空值(NULL) ????

B、可以任意删除关系SC中的元组

C、向任何一个关系插入元组时,必须保证关系主码值的唯一性 ??

D、可以任意删除关系C中的元组

实体完整性规则:若属性A是关系R的主属性,则属性A不能为空。实体完整性约束是对关系的约束;每个关系必须有主码且非空;组成主码的属性都不能为空,而不仅仅是主码属性集不为空。SC为参照关系,S、C均为被参照关系,若被参照关系中的S#或C#被删除,则参照关系中元组将无意义。所以S、C中的元组均不能任意删除。

在关系代数中,从两个关系的笛卡尔积中选取它们属性间满足一定条件的元组的操作称为()

A、并 ????

B、选择 ????

C、自然连接 ????

D、连接

相容性条件:两个关系具有相同的属性个数,每对相对应的属性都具有相同的域。

并:满足相容性条件,R中特有元组+S中特有元组+共有元组去重。

选择:对元组的操做,从关系R中选出满足条件表达式F的所有元组构成新的关系。

连接:从两个关系R、S的笛卡尔积中选取它们的属性间满足一定条件的元组。

等值连接:从关系R与S的笛卡尔积中选取A、B属性值相等的那些元组。

自然连接:要求两个关系中进行比较的分量必须是相同的属性组,且要在结果中去掉重复属性。

显然,本题的答案为D。

对关系模型叙述错误的是()

A、建立在严格的数学理论,集合论和谓词演算公式基础之一

B、微机DBMS绝大部分采取关系数据模型

C、用二维表表示关系模型是其一大特点

D、不具有连接操作的DBMS也可以是关系数据库管理系统

关系模型采用二维表表示实体及实体间的联系,实体间的联系是通过不同关系中的公共属性实现的,若关系DBMS没有提供连接操作,将无法完成涉及多个表之间的查询操作。所以答案为D。

15、Oracle数据库中的空值(NULL)相当于()

A、零(0) ?

B、空格 ?

C、零长度的字符串('') ?

D、代表数据库中的一种特殊字符

数据库管理系统为三级模式结构提供了两层映像机制,其中模式/内模式映像提供了_____独立性。

答案:数据的物理

分析:一个数据库系统只存在一个唯一的模式/内模式映像,它定义了数据库全局逻辑结构与存储结构之间的对应关系(该映像定义通常包含在模式描述中)。当数据库的存储结构改变了(例如选用了另一种存储结构),由DBA对模式/内模式映像作相应改变,可以使模式保持不变。这体现了数据的物理独立性。

数据库管理系统中的加锁协议规定了事务的加锁时间、持锁时间和释放锁时间,其中_____协议可以完全保证并发事务数据的一致性。

答案:三级加锁

分析:三级加锁协议也称为三级封锁协议。它是为了保证正确的调度事务的并发操作,事务在对数据库对象加锁和解锁的时候必须遵守的一种规则。在运用X锁和S锁对数据库对象加锁时需要约定一些规则,例如合适申请X锁、持锁时间、何时释放等。可以称这些规则为封锁协议(Locking Protocol)。对封锁方式规定不同的规则就形成了各种不同的封锁协议。

  开发测试 最新文章
pytest系列——allure之生成测试报告(Wind
某大厂软件测试岗一面笔试题+二面问答题面试
iperf 学习笔记
关于Python中使用selenium八大定位方法
【软件测试】为什么提升不了?8年测试总结再
软件测试复习
PHP笔记-Smarty模板引擎的使用
C++Test使用入门
【Java】单元测试
Net core 3.x 获取客户端地址
上一篇文章      下一篇文章      查看所有文章
加:2021-09-23 11:45:14  更:2021-09-23 11:46:14 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/18 0:27:55-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码