有关数据库的一些面试题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1、在一个查询中,使用哪个关键字能够去重复值?
使用distinct关键字
2、解释存储过程和触发器?
存储过程:是一个已编译的SQL语句,不必重新编译,可以重复执行,提高了代码的重用性和数据库的性能;
触发器:是一种特殊的存储过程,不由用户直接调用,创建触发器时会对其进行定义,以便在对特定的表或列做特定的操作时执行。
*3、SQL Server中的锁机制有哪些,有什么好处?
有行级锁、表级锁
优化数据的并行访问。
4、数据库日志是干什么用的?
数据库日志用以记录所有事务和每个事务对数据库所做的操作。
5、存在过程和函数的区别?
存储过程是用户定义的一系列的SQL语句的集合,涉及特定表或其它对象的任务,用户可以调用存储过程;
函数通常是数据库已定义的方法,它接收参数并返回某程类型号的值并且不涉及特定用户表。
6、事务是什么,有哪些特性?
事务是作为一个逻辑单元执行的一系列操作。
事务的特性是:原子性、一致性、隔离性、持久性。
7、提高数据库运行效率的办法有哪些?
(1)在数据库物理设计时,降低范式,增加冗余,少用触发器,多用存储过程;
(2)复杂的计算先在数据库外进行,最后才入库追加到表中;
(3)如果表的记录太多,可以使用水平分割法将表进行分割;如果表中字段太多可以使用垂直分割法把表进行分割;
(4)优化各种系统参,如缓冲区个数。
总之,要提高数据库的运行效率,必须从数据库系统级优化、数据库设计级优化、程序实现级优化,这三个层次进行考虑。
8、主键和唯一索引有什么区别?
相同点:它们都属于实体完整性约束;
不同点:i、唯一性约束所在的列允许为空值,但是主键不允许为空;
ii、可以把唯一性约束放在一个或多个列上,但在一个表中只可以有一个主键;
iii、唯一性约束强制在指定的列上创建一个唯一性索引;而建立主键的目的是为了让外建 来引用。
9、数据库的六大约束都是什么?
(1)主键约束:primary key;
(2)外键约束:foreign key;
(3)非空约束:not null;
(4)唯一约束:unique;
(5)检查约束:check;
(6)默认约束:default;
10、数据库设计的五个阶段?
(1)需求分析:主要是准确收集用户信息需求和处理需求,并对其进行整理分析;
(2)概念结构设计:对用户的需求进行综合、归纳、抽象,形成一个具体的DBMS概念模式;
(3)逻辑结构设计:将概念模式转化为某个特定的DBMS所支持的数据模型,并对其进行优化;
(4)物理结构
设计:为设计好的逻辑模型选择物理结构,包括存储结构和存取方法;
(5)实施和维护:使用DLL语言建立数据库模式,将实际数据载入数据库,并对运行中的数据库进行 调整和修改。
11、建立索引的作用和原则?
作用:加快查询数据的速度;
原则:如果某属性或属性组经常出现在查询的条件中,考虑为该属性建立索引;
如果某属性常作为最大值和最小值等聚集函数的参数,考虑为该属性建立索引;
如果某属性经常出现在连接操作的连接条件中,考虑为该属性建立索引。
12、什么上基本表?什么是视图?
基本表是本身独立存在的表,在SQL中一个关系就对应一个表;
视图是从一个或几个基本表导出的表,视图本身不独立存储在数据库中,是一个虚表。
13、视图的优点?
(1)视图能够简化用户的操作;
(2)视图使用户能以多种角度看待同一数据;
(3)视图为数据库提供了一定程度的逻辑独立性;
(4)视图能够对机密数据提供安全保护。
14、数据库的整体结构可分为?
网状、层次型、关系型三种。
15、关系数据库有几种实体之间的关系?
三种,一对一、一对多、多对多关系。
16、关系型数据库中,对数据库最简单的描述是什么?
数据库是结构化的数据集合。
17、数据库语言分为哪几种?
DDL:数据定义语句,用于定义数据的结构;(create , drop , alert)
DML:数据操作语言,用于检索或者修改数据;(select , insert , update , delete )
DCL:数据控制语言,用于定义数据库用户的权限;(alert , grant , revoke)
TCL:事务控制语言,用于管理事务;(savepoint , rollback , commit)
18、死锁的产生及处理方法?
事务循环等待数据锁,则会死锁;
处理方法:i、SQL Server自动检测和消除死锁;
ii、设置死锁的优先级;
iii、使用更新锁避免死锁;
iiii、设置锁定超时。
19、简述一下简单视图与复杂视图的区别?
简单视图:简单视图是对单表的创建视图操作,可以对视图进行更新、插入、删除等操作;
复杂视图:复杂视图是多表之间的创建视图操作,可以使用聚合函数,不可以对视图进行更新、插入、删除等操作。
20、索引主要分为哪几种?
B树索引:是一种最常用和系统默认的索引类型;
位图索引:适用于那些基数比较小的字段;
唯一索引:保证索引列中的唯一性能。
各数据库建表示例:
Oracle数据库:
create table table_name
(
id int primary key, --Oracle数据库中无字段自增,只能通过序列创建,或创建触发器来实现。
name varchar2(20) not null,
bir
thday date,
sex char(2) check(sex='男'or sex='女') default('男'),
tel varchar2(12) unique,
salary number(8,2)
)
create table table_name_1
(
f_id int primary key,
f_name varchar2(20) not null,
p_id int,
foreign key(p_id) references table_name
)
SQL Server数据库:
create table table_test
(
p_id int primary key identity(1,1),
p_name varchar(20) not null,
birthday smalldatetime,
sex char(2) check(sex='男'or sex='女') default('男'),
tel varchar(12) unique
salary money,
)
create table table_test1
(
f_id int primary key,
f_name varchar(20) not null,
p_id int,
foreign key(p_id) references table_test
)
MySql数据库:
create table table_name
(
id int auto_increment primary key,
name varchar(20) not null,
tel varchar(10) unique,
salary decimal(8,2),
sex char(2) check(sex='男' or sex='女') default('男'),
birthday date
)
create table table_name1
(
id int primary key,
name varchar(20) not null,
f_id int,
foreign key(f_id) references table_name(p_id)
)
Orical数据库的存储过程:
create [or replace] procedure p_name
(
p_name p_type
)
as
begin
PL/SQL语句;
end;
示例:输入empno,输出工种job,实发工资(sal+comm)?
create or replace procedure p1
(
p_empno in emp.empno%type,
p_job out emp.job%type,
p_salcomm out number
)
as
begin
select job,sal+nvl(comm,0)into p_job,p_salcomm from emp where empno=p_empno;
end;
调用存储过程的方法:
declare p_job varchar2(20);p_salcomm number(9,2);
begin
p1(123,p_job,p_salcomm);
end;
SQL Server数据库存储过程:
create procedure p_name
@param_name data_type,
@param_name2 data_type output
as
select @p2=column_name from table_name where column_name=@p1
示例:输入业务员编号,姓名,显示性别,电话?
create procedure p1
@p_ywid int,
@p_name varchar(8)
as
select sex,tel from shop_yw where ywid=@ywid and name=@p_name;
execute p1 1,'李小明';
Oracle数据库触发器:
create [or replace] trigger trigger_name [before/after] insert/update/delete on table_name
for each row
[when(condition)]
[declare]
begin
PL/SQL
end;
示例:当向销售表中添加一条记录后,触发实现基本表库存量做相应减少?
create or replace trigger t1
after insert
on show_xs
for each row
begin
update shop_jb set stock=stock-:new.quantity where id=:new.id;
end;
SQL Server数据库触发器:
create trigger trigger_name
on table_name
after/instead of insert/delete/update
as
PL/SQL
示例:向销售表中添加一条记录,触发器基本表中库存量做相应的减少?
create trigger t1
on shop_xs
after insert
as
update shop_jb set stock=stock-(select quantity from inserted) where id=(select id from inserted);