SQL Foundation(24--30)
2013-05-25 18:18
239 查看
1:Database Objects 数据库对象:
1:table2:view
3:sequence
4:index
5:synonym 别名
view 只是声明逻辑,真正的数据存储在表上。
索引相当于目录 用于改善某些查询的性能.
表名和列名的命名规则中: 字符数要小于30个
oracle 维护的存储的信息的表:
user_objects 当前用户所拥有的所有的objects
select dbms_metadata.get_ddl('TABLE','EMP1') from dual;
以上语句有点问题,需要再查看一下;
添加外键的时候
后面加入: ON DELETE CASCADE 表示 如果 一个表中的主键删除,
相应的表引用这个表的主键为外键的表也会删除。
如果创建外键的时候加上 ON DELETE SET NULL
表示删除主表中的数据的时候,引用该表主键的外键的值 设置为null
2: 拷贝一张表
create table table [column,column...] as subquery 注意 只有not null 能够传递到新表中,其他的 外键 主键 什么的 都不传递到新创建的表。
create table dept80 as select employee_id, last_name, salary*12,hire_date from employee where department_id = 80; 以上语句有错误是因为 子查询中含有 salary*12 如果搞定 列用别名;
如果只是想拷贝表结构:
技巧: create table myobj as select * from table_name where 1=0;
以上是复制一张表的表结构。
note:
子查询创建表的时候,只有not null 约束 在创建的表和原表一致,其他
主键,外键等 不拷贝。
把一张表变成只读:
只读: alter table dept80 read only; 能够读和写 alter table dept80 read write;
永久性删除掉一张表:
drop table dept80 purge;
以上语句代表永久性的删除了一张表;
如果把一张表删除了,这样依赖的表会无效,
3:view
View存储的是查询语句,真正的数据依然在原表中。View用途: 限制用户的数据访问
让复杂的查询更加简单
保持数据的独立性(底层的表不发生变化)
同样的数据可以以不同的view展示出来
View就好像一个接口,访问底层基表的接口。
特性 | 简单视图 | 复杂视图 |
表的数量 | one | 多个 |
包含函数 | no | yes |
包含分组数据 | no | yes |
是否可以在视图上DML操作 | yes | not always |
Create [OR REPLACE] [FORCE|NOFORCE] VIEW view [(alias[,alias]....)] as subquery [with check option [Constraint constraint]] [with read only [Constraint constraint]]
ex:
create view empvu80 as select employee_id,last_name,salary from employees where department_id = 80;
describe view 可以查看视图;
SQL> select TEXT from user_views 2 where view_name = 'EMPVU80';
创建的视图约束,只把原表的not null约束带过来了,primary
key , foreign key 没有带到创建的视图约束中。
关于view的修改 看联机文档 alter view 内容。
修改视图,是修改 视图的基表的数据,对于 simple view可以修改,
对于complex view 要看具体情况。
如下视图:
create view dept_sum_vu select d.department_name ,min(e.salary),max(e.salary), avg(e.salary) from employees e join departments d on (e.department_id = d.department_id) group by d.department_name;
带有下列条件关键字的view 不能修改视图内容:
1; group view(sum,avg,min,max 等)
2: group by
3:distinct
4: rownum(是一个伪列编号)
with check option clause:
create or replace view empvu20
as select * from employees
where department_id =20
with check option constraint empvu20vk
如果修改的数据 和约束有冲突,修改会报错。
加上 with read only 视图不能修改了
删除view ;
drop view view_name;
只是删除视图的查询语句,对于基表内容没有影响。
4:sequence
创建sequence语法:CREATE SEQUENCE SEQUENCE [INCREMENT BY n] [start with n] [{maxvalue n | nomaxvalue}] [{minvalue n | nominvalue}] [{cycle | nocycle}] [{cache n | nocache}] 放入内存中的sequence的数量,默认是20个
创建一个sequence: CREATE SEQUENCE myseq increment by 10 start with 120 maxvalue 9999 nocycle nocache;
select myseq.nextval from dual; select myseq.currval from dual; 如果想获取当前值,首先调用nexval; insert into departments(department_id,department_name,location_id) values (myseq.nexval,'support',2500); select myseq.curval from dual; 删除sequence drop sequence sequence_name;
5:索引( index )
index : 是为了改进一些查询的性能;1:是一个schema 对象
2:可以帮助oracle server查询的时候提高速度
3:index像一棵树,通过rowid进行查找定位到数据块,就可以很快把数据取出来
4:index 独立于表出现,
5:通过 oracle server 自动维护。
自动创建索引:
primary key 或者 unique 约束 如果有 会自动加上索引
手工创建索引:
nonunique 索引
首先复制表:
create table copy_index as select * from employees; create index emp_last_name_index on copy_index(last_name);
索引的使用规则:
索引有oracle维护,在增删改的时候oracle 的工作量会相应的 增加:
在以下情况下创建索引:
每一列包含的值分散的比较广,适合索引。
男女这样的列适合 bitmap索引。
2:一列包含许多的null 值
3:一列经常在where 或者其他子句中使用
4: 表很大,但是查询的数据只占 表数据的 2% --3%适合用索引
如果查询 30% 50% 的数据不适合用索引,可以采用全表扫描。
以下条件不适合索引:
1:这一列不经常用于查询
2:表中的数据很少,全表扫描就可以了。
3:如果一个表经常更新
4:索引的列经常作为表达式的一部分,需要再进行探讨
删除索引: drop index index_name;
关于索引是一个重要的对象,以后会专门进行分析。索引就是一把双刃剑,用好了提高效率和性能,用不好,反而让oracle server 维护增加。
6: synonym : 为一个对象起一个别名
创建别名:create [public] synonym synonym_name for object_name;
如果加上public表示所以schema都可以看到,如果不加表示只有当前
schema可以看到。
用法:
create synonym tt for copy_index ;
select * from tt;
删除别名: drop synonym synoym_name;
SQL> select TEXT from user_views 2 where view_name = 'EMPVU80';
相关文章推荐
- java—数组乘积输入: 一个长度为n的整数数组input 输出: 一个长度为n的数组result,满足result[i] = input数组中,除了input[i] 之外的所有数的乘积,不用考虑溢出例如 input {2, 3, 4, 5} output: {60, 40, 30, 24}
- (30 hackdays day 24) Atatus - what happened before crash
- 计算时间毫秒数(30*24*60*60*1000)得到负数
- 课时24—课时30 | Java 数组对象的创建和应用
- (30 hackdays day 24) Atatus - what happened before crash
- 读《50 Android Hacks》笔记整理Hack 24~Hack 30
- C/C++ | 30-24 两个字符串,s,t;把t字符串插入到s字符串中,s字符串有足够的空间存放t字符串
- /23 /24 /26/28 /29 /30或10.0.0.1/29这样怎么算服务器IP数是多少?
- 30*24*60*60*1000等于多少
- PAT甲级真题及训练集(24)--1004. Counting Leaves (30)
- 成功人士默默在做的30件事情 (11-30)
- java24为什么用抽象类
- C#图片灰度处理(位深度24→位深度8),用灰度数组byte[]新建一个8位灰度图像Bitmap 。
- 每天一个linux命令(24):Linux文件类型与扩展名
- PAT (Advanced Level) 1018. Public Bike Management (30)
- 利用Random类产生5 个1-30之间(包括1和20)的随机整数。
- org.apache.jasper.JasperException: /jsp/user/list_myaccept.jsp(24,38) Attribute value request.getAtt
- IOS学习笔记30—两个ViewController间传值(一)
- Educational Codeforces Round 30-归并排序计数&构造- Merge Sort
- 安徽农信:30人,13轮测试,完成日均270万笔交易的综合业务系统架构调整