八、oracle 常见问题解答

八、常见问题解答

1、where 与having的区别

where不能使用聚合函数,having中可以使用聚合函数。where子句在聚合前先筛选记录,也就是说作用在group by子句和having子句前,而having子句在聚合后对组记录进行筛选。**

**where是一个约束声明**,使用where来约束来自数据库的数据;where是在结果返回之前起作用的;where中不能使用聚合函数。

**having是一个过滤声明**;在查询返回结果集以后,对查询结果进行的过滤操作;

**where和having的执行顺序:where早于group by早于having。

2、表与视图的区别

区别:
   1、视图是已经编译好的sql语句,而表不是;
   2、视图没有实际的物理记录,而表有;
   3、表是内容,视图是窗口;
   4、表是内模式,视图是外模式;
   5、表属于全局模式中的表,是实表,而视图属于局部模式的表,是虚表。
  

3、为什么要有事务?应用场景有哪些?

数据库中的数据是共享资源,因此数据库系统通常要支持多个用户的或不同应用程序的访问,并且各个访问进程都是独立执行的,这样就有可能出现并发存取数据的现象,这里有点类似Java开发中的多线程安全问题(解决共享变量安全存取问题),如果不采取一定措施会出现数据异常的情况。

DBMS系统必须对这种并发操作提供一种相应的处理机制来保证,访问彼此之间不受任何干扰,从而保证数据库的正确性不受到破坏,为了避免数据库的不一致性,这种处理机制称之为“并发控制”,其中事务就是为了保证数据的一致性而产生的一种概念和手段(事务不是唯一手段)


应用场景的例子:
 银行转账业务:需要从一个账户中剪掉转账的金额然后再再另一个账户中加上转账的金额。这两部需要同时发生,或者需要同一起执行,或者要不同时失败,不然会出现错误的。

4、视图作用是什么?

为什么要用视图?
举个例子,对于公司人员信息表上都有他们的薪资情况,财务再根据数据库里薪资来给每个人发放工资,所以工资这一栏是非常重要的,所以为了保证运转条理性,我们一般不能让数据库管理员看到这一栏的,毕竟管理员也是员工,对于这些敏感的信息,可能他看不到对大家都好。那么就衍生了该如何解决这个问题呢,有的人会说创建一个新的员工表,里面没有员工工资一栏,但是这个方法可是非常不明智的,因为当我们把原来的数据修改之后岂不是还要再新表上还要做一次修改,而且在新表上做了修改还要更新到主表,中间就会出现很多问题的,此时利用视图则是最合理的一个方法。

5、索引与主键的关系?

索引是一种数据结构,用于提高数据库查询的速度。它可以帮助数据库在查询时快速地定位到包含特定值的行或范围。索引可以建立在表的一个或多个列上,以提高查询的性能。

主键是一种特殊的索引,它用于唯一标识表中的每一行数据。主键列不能包含空值,并且每个值必须是唯一的。主键可以用于确保表中的数据唯一性,还可以帮助在表中快速定位到特定行。

因此,主键是一种特殊的索引,用于唯一标识表中的每一行数据,而索引是一种通用的数据结构,用于提高数据库查询的性能。在实践中,主键通常也是索引,但不是所有索引都是主键。

6、oracle 可以回滚已被提交的事务吗?

可以
Oracle自带数据闪回机制。
SELECT * FROM tableName AS OF TIMESTAMP TO_TIMESTAMP('20180822 11:00:00','YYYYMMDD HH24:MI:SS');
这里'20180822 11:00:00'就是你想恢复数据到哪个时间状态 tab是数据库的表名 这样查询到的数据就是执行更新操作之前的数据。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值