Sql基础
# 介绍表模式对象
# 介绍用户模拟下可以访问的模式对象
select * from all_objects
select object_type,count(*) from user_objects group by object_type;
select object_type,count(*) from all_objects group by object_type;
select distinct owner from all_objects
# 研究模式中的数据类型
desc 表名 --sqlplus查看表结构
PL/SQL中查看表结构
# 表的创建与管理
# 创建表
create table tab02 ( id NUMBER(10) not null, name VARCHAR2(10) not null, age NUMBER(3) not null )
# 重命名表
rename tab02 to tab03;
alter table tab03 modify age NUMBER(10);
alter table tab03 rename column gj to country;
select * from tab select table_name from tabs;
select * from user_tabl
# 表的复制
create table tab04 as select * from tab03;
select * from tab04;
create table tab05 as select * from tab03 where id<=2;
select * from tab05;
# 表的截断
truncate table tab05;
delete from tab05;
# 表的删除
drop table tab05;
# 删除表定义
drop table table_name cascade constraints;--相关的视图,约束,等相关所有的关系 对象。
drop table table_name purge;--释放资源,不经过回收站。
...
# delete与truncate的区别
delete是DML,执行delete操作时,每次从表中删除一行,并且同时将该行的的删除操作记录 在redo和undo表空间中以便进行回滚(rollback)和重做操作,但要注意表空间要足够大,需要 手动提交(commit)操作才能生效,可以通过rollback撤消操作。
delete可根据条件删除表中满足条件的数据,如果不指定where子句,那么删除表中所有记 录。
delete语句不影响表所占用的extent,高水线(high watermark)保持原位置不变。
truncate是DDL,会隐式提交,所以,不能回滚,不会触发触发器。
truncate会删除表中所有记录,并且将重新设置高水线和所有的索引,缺省情况下将空间释放 到minextents个extent,除非使用reuse storage,不会记录日志,所以执行速度很快,但不能 通过rollback撤消操作
对于外键(foreignkey )约束引用的表,不能使用 truncate table,而应使用不 带 where 子句的 delete 语句。
truncatetable不能用于参与了索引视图的表。
# 临时表
# 1.会话级临时表
--会话结束 自动清空数据
create global temporary table table_name (col1 type1, col2 type2 ... ) on commit preserve rows;
# 2.事务级临时表
--事务结束(commit,rollback) ,清除数据。
create global temporary table table_name (col1 type1, col2 type2 ... )
on commit delete rows;
# 索引
逻辑分类: 单列或多列 唯一索引和非唯一索引
函数索引 Doman 物理分类: B-TREE(B树索引) Bitmap(位图索引)
B*Tree索引适合大量的增删改(OLPT) DML语句: Create index indexname on tablename(columnname[columnname...])
Bitmap 索引 位图索引主要用于决策支持系统或静态数据,不支持行级锁定 Bitmap 索引适合做决策支持系统(数据仓库OLAP),做update的代价非常高 DML语句: Create BITMAP index indexname on tablename(columnname[columnname...])
单列索引:创建在单列上的索引 复合/组合索引 : 建立在多个列上的索引 where a=1 and b=2 如果索引建立在多个列上,只有它的第一个列被where子句引用时,优化器才会使用该索 引
# 函数索引 例
lower:大百写字符转化成小写的函数
upper:小写字符转化成大写的函数容
create table tab001(id number,name varchar2(20));
insert into tab001 values(1,'LIUYANG');
insert into tab001 values(2,'liuyang');
commit;
set autotrace on select * from tab001 where upper(name)= 'LIUYANG';
create index idx_tab001_name on tab001(upper(name));
select * from tab001 where upper(name)= 'LIUYANG';
# 五种约束
... 更多内容请看文档
# 视图
# 视图的创建语法
CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW view_name
[(alias[, alias]...)]
AS subquery
[WITH CHECK OPTION [CONSTRAINT constraint]]
[WITH READ ONLY]
OR REPLACE :若所创建的试图已经存在,ORACLE自动重建该视图;
FORCE :不管基表是否存在 ORACLE 都会自动创建该视图;
NOFORCE :只有基表都存在 ORACLE才会创建该视图: alias :为视图产生的列定义的别名;
subquery :一条完整的 SELECT语句,可以在该语句中定义别名;
WITH CHECK OPTION :插入或修改的数据行必须满足视图定义的约束;
WITH READ ONLY :该视图上不能进行任何 DML操作。
-- O read only on a view : object
-- V Check OPTION on a view : object
例子
create view yg_v as select hire_date,job_id,salary,department_id from yg; --只看部 门里的人员工资,看不到具体哪个人多少工资,避免敏感性数据的出现
# 删除视图
drop view yg_v; --删除视图不影响基表的数据,但是基于此视图的其他视图也会无效
# 存储过程
# 创建存储过程
CREATE [OR REPLACE] PROCEDURE procedure_name
[(parameter1[model] datatype1, parameter2 [model] datatype2..)]
IS[AS]
BEGIN
PL/SQL;
END [procedure_name];
更多内容请下载。