1、 SQL语句分类:
DQL(数据查询语言)select
DML(数据操作语言)insert、delete、update
DDL(数据定义语言)create、drop、alter
DCL(数据控制语言)grant:把权限授予用户、revoke:把权限从用户收回
TPL(TCL,事务控制语言):commit、rollback
2、 Oracle是怎样分页的:
Oracle用rownum进行分页
分页语句的步骤:
a.最内层sql,查询要分页的所有数据
b.第二层sql,通过rownum伪列确定显示数据的上限,并且给查询的数据添加rownum伪列的值
c.最外层sql,设置显示数据的下限
select*from
(select a.*,rownum r from
(select*from表名 where条件 orderby列) a
whererownum<=页数*条数) b where r>(页数-1)*条数
3、 truncate和delete区别:
1)Truncate和delete都可以将数据实体删掉,truncate操作不记录到rollback日志,同时数据不能恢复
2)Truncate是数据定义语言(DDL),delete是数据操作语言(DML)
3)Truncate不能对视图进行操作,delete操作不会腾出表空间的内存
4、说说Oracle中经常使用到的函数
length长度、lower小写、upper大写、to_date转化日期、to_char转化字符、to_number转化数字Ltrim去左边空格、rtrim去右边空格、substr截取字符串、add_month增加或减掉月份、
5、主键有几种?
复合型、整数型、字符型
6、怎样创建一个索引,索引使用的原则,有什么优缺点
create index 索引名 on 表名(列名)
原则:
建议索引列建立not null约束
经常与其他表进行连接的表,在连接列上建立索引
优缺点:
创建索引能大大加快检索速度,加强表与表的连接,但是创建索引很占用空间
7、使用oracle伪列删除表中的重复数据中的一条
delete fromtable t wheret.rowid!=(select max(t1.rowid) from table t1 wheret.name=t1.name)
8、如何只显示重复数据
select * fromtable groupby id having count(*)>1
9、什么是数据库的映射
就是将数据库中表与字段对应到模型层类名与属性的过程
10、如何设计数据库
首先分析项目,看看项目中有多少实体(矩形),为每个实体添加属性(椭圆),明确实体之间的关系(菱形),绘制E-R图,将E-R图转换成表格
11、如何实现数据库的优化
1)调整数据库结构的设计:需要考虑是否使用分区功能、是否建立索引等
2)调整数据库的SQL语句
3)调整服务器的内存分配
4)调整硬盘I/O
5)调整操作系统参数
12、关系型数据库的关系操作有哪些?
选择(查询某些行)、投影(查询某些列)、链接(把多张表连接获取数据)、增加、删除、修改
13、SQL语句与SQL*PLUS命令的区别
1)SQL是关系型数据库的标准操作语言,而SQL*PLUS是一个客户端工具,除了执行标准的SQL外,还可以执行工具本身的一些命令。
2)SQL语句不可以缩写,而SQL*PLUS命令可以缩写
14、oracle数据库中如何显示表的结构
新建命令窗口,输入desc 表名
15、oracle中数据库对象的命名规则
1)必须由字母开始,长度在1-30个字符之间
2)包含字母、数字、_、$、#
3)同一个Oracle服务器所拥有的对象名不能重复
4)名字不能为Oracle 的保留字
5)大小写不敏感
16、数据库的三大范式是什么?
1)第一范式:原子件,要求每一列的值不能再拆分了
2)第二范式:一张表只描述一个实体(若列中有冗余数据,则不满足)
3)第三范式:所有列与主键直接相关
17、事务的特性(ACID)是指什么?
1)原子性(Atomic):事务中的各项操作,要么全做要么全不做,任何一项操作的失败都会导致整个事务的失败
2)一致性(Consistent):事务结束后系统状态是一样的
3)隔离性(Isolated):并发执行的事务彼此无法看到对方的中间状态
4)持久性(Durable):事务完成后,即使发生灾难性的故障,通过日志和同步备份可以在故障发生后重建数据
18、MySQL数据库与Oracle数据库有什么区别
1)应用方面:MySQL是中小型应用的数据库,一般用于个人项目或中小型网站及论坛。Oracle属于大型数据库,一般在具有相当规模的企业应用。
2)自动增长的数据类型方面:MySQL有自动增长的数据类型。Oracle没有自动增长的数据类型,需要建立一个自增序列
3)group by用法:MySQL中group by在select语句中可以随意使用,但是在Oracle中如果查询语句中有组函数,那其他列名必须是组函数处理过的或者是groupby子句中的列,否则报错
4)引号方面:MySQL中用双引号包起字符串,Oracle中只可以用单引号包起字符串
19、内连接,左连接,右连接的区别:
内连接:指主表,从表中符合连接条件的记录全部显示
左连接:外连接方式,主要是显示主表,从表中符合连接条件的记录,并且主表中所有不符合连接条件的记录也要显示。
右连接:外连接方式,主要是显示主表,从表中所有符合连接条件的记录,并且从表中不符合的记录也要显示。
20、存储过程 、函数 、游标 在项目中怎么用的:
存储过程:能够批量执行的一组SQL语句,且容易控制事务。但没有返回值,可以通过设置in out|out类型的参数返回结果
函数: 与过程相似,返回值类型,并且语句中有返回语句return 变量;
游标: 是查询结果返回的结果集首地址指针。可以定义ref引用游标,依次取得记录并批量操作。
21、索引是用来干什么的,有那些约束建立索引。说下你怎么使用索引的?使用索引的好处和坏处?
索引用于对指定字段查询时,提升查询速度。
主要有B树索引,位图索引,函数索引。
对查询频率比较高的字段做索引,但一张表不要做太多索引。
索引能提升查询效率,但它占用存储空间,且在更新数据时也会影响更新效率。
22、如果我要在控制台看到执行的SQL语句,我要怎么办?
explain plan for select * from emp;--解释执行SQL语句
select * from plan_table;--查询执行结果反馈信息
23、查出两张表中相同的数据:
select * from table1
intersect
select * from table2;
23、表空间描述,及作用?
tablespace --表空间对应用户数据的存储,在创建用户时一般会指定表空间,如果没,默认为users.存储用户的所有对象。
表空间包括:数据段segemnet --数据区extents --数据块data block,一个数据文件只能存储在一个表空间中。
24、锁是什么?
锁 主要行级和表锁。
行级锁主要是在执行操作过程中,锁定指定的行。主要的锁行语句有:
insert ,update,delete ,及select....for update。
表锁:指在运行操作指令过程中,由用户指定锁定某张表。
lock table XXX in mode share;--共享锁,
共享锁,排他锁,共享排它,行共享,行排他。
25、存储过程的操作 当它抛出异常的时候 你是如何解决的用了什么技术
中止当前语句执行,转到exception语句块执行。
在异常处理时,捕获相应异常,并执行对应解决方案语句。
26、Oracle的游标在存储过程里是放在begin与end的里面还是外面?Oracle的存储过程跟函数你写没有?项目中用到没有?怎么用的?
放在begin与end之间。
用作多表连接查询数据返回结果查询。
复杂的业务操作,涉及多表的数据操作的事务控制。
预防SQL注入。
27、怎么来查看数据库时区,查询当前用户的会话时区?
CURRENT_DATE:为数据库会话设置的本地时区中的当前日期时间
DBTIMEZONE:获取数据库的时区
SESSIONTIMEZONE:获取与当前数据库会话的时区
28、解释数据块(data block),区(extent) 和数据段(segment)的区别?
数据块是数据库中最小的逻辑存储单元。
多个连续的数据块组成区。
一个数据库对象拥有的所有区(extents)被称为对象的数据段
29、使用存储过程访问数据库比直接用SQL语句访问有何优点?
存储过程是预编译过的,执行时不须编译,执行速度更快。
存储过程封装了多条SQL,便于维护数据的完整性与一致性。
实现代码复用。
30、oracle中的回滚的概念?回滚段作用。
回滚:指在事务提交之前将数据库数据恢复到事务修改之前的数据库数据状态。
可以回滚到savepoint 指定的回滚点。
回滚段:
为回滚提供依据,记录事务操作数据库之前的数据或对应于以前操作的操作。