目录
1. DDL语句
DDL语句 符合SQL语法;
1.1. 基本DDL语句
--更改表结构
alter table person modify(address varchar2(20));
2. 进阶
2.1. 表的删除
--截断 person表
truncate table person;
- truncate
- 在person表中使用delete语句删除数据,则可以使用rollback来回滚;
- 如果想要清空一张表的数据,同时不想回滚可以立即释放资源需要使用截断表的语法
参考:
2.2. 临时表
-
概述
临时表:像普通表一样,有结构,但是对数据的管理上不一样,临时表存储事务或会话的中间结果集,临时表中保存的数据只对当前 会话可见,所有会话都看不到其他会话的数据,即使其他会话提交了,也看不到。临时表不存在并发行为,因为他们对于当前会话都是独立的。(它默认是事务级别的)在oracle中临时表可分为会话级临时表和事务级别临时表。
2.2.1. 临时表分类
2.2.1.1. 会话级临时表
2.2.1.2. 事务级别临时表
参考:
2.2.2. WITH AS 与 临时表
-
with as
with as 只是把子查询的语句当作了一个表,但是真实的数据并没有插入到数据库,它的好处是增加了代码的可读性和进行维护。 -
临时表
临时表的数据是需要插入到数据库的,所以一般用于做报表的话,在插入数据之后需要删除临时表。 -
运行效率
用with as ,其实跟直接用子查询效率上没有什么区别;而用临时表与永久表相似,数据是真是跑入到数据库里面去的,相当于第二次直接关联的是一个小表,查询效率大大提高。 -
应用场景
临时表适用于:有很多复杂的关联子表查询。
with as 适用于:为了增加代码可读性,且没有很多复杂的关联子查询。
参考:
2.3. 虚拟列
- 为什么要使用虚拟列
(1)可以为虚拟列创建索引(Oracle为其创建function index)
(2)可以搜集虚拟列的统计信息statistics,为CBO提供一定的采样分析。
(3)可以在where 后面使用虚拟列作为选择条件
(4)只在一处定义,不存储多余数据,查询是动态生成。 - 语法
HR@bear> create table inv( inv_id number, inv_count number, inv_status generated always as case when inv_count <= 100 then 'GETTING LOW' when inv_count > 100 then 'OKAY' end) );
参考: