论坛首页 入门技术论坛

oracle辅导(3--3)

浏览 2245 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2008-12-03  

增加约束:

alter table 表名 add constraint [约束名] 约束(字段);

只能够增加表级约束。

 

解除约束:(删除约束)

 

alter table 表名 drop 约束;

(对于主键约束可以直接用此方法,因为一张表中只有一个主键约束名, 注意如果主键此时还有其它表引用时删除主键时会出错)

 

alter table father drop primary key cascade; 

(如果有子表引用主键时,要用此语法来删除主键,这时子表还存在只是子表中的外键约束被及联删除了)

 

alter table 表名 drop constraint 约束名;

(怎样取一个约束名:

a、人为的违反约束规定根据错误信息获取!

b、查询示图获取约束名!)

 

使约束失效或者生效

 

alter table  表名  disable from primary key;  (相当于把一个表的主键禁用)

 

alter table  表名  enable primary key;

enable 时会自动去检查表的记录是不是符合要求,如果有脏数据时必须要先删除脏数据才可以 enable

 

更改表名

rename 旧表名 to 新表名;

 

删除表:

trucate table 表名;

(表结构还在,数据全部删除,释放表所占的空间,不支持回退,常用删除大表)

 

关于oralce中产生序列(sequence)

create sequence  序列名;

 

(不带参数时默认为从1 开始每次递增 1oracle中为了提高产生序列的效率一般一次性产生20个序列放入当前会话的序列池中备用以加快效率,序列会出现不连续的动作回退操作不会影响序列取值)

 

sequence 的参数:

 

increment by n   起始值

start with n     递增量

maxvalue n       最大值 

minvalue n       最小值

cycle|no cycle   轮回 

cache n          缓存(第一次取时会一次取多少个id存起来)

 

查看sequence 示图:

desc    user_sequences ;

select   sequence_name , cache_size , last_number  from  user_sequences   where   sequence_name  like 's_';

select  序列名.currval  from   dual   查看当前的序列数

select  序列名.nextval  from   dual   查看下一个序列数,它会自动给当前的序列加1

为列:nextval          currval

(开另一个session时取当前值不成功时,应该先取下一个值,再取当前值)

 

清空当前会话的内存:

alter system  flush   shared_pool;(执行此命令要有DBA权限,一般用户执行出错)

 

修改序列:(此命令不常用,只需了解就行不必深究)

alter  sequence  序列名  修改项;

删除序列sequence

drop sequence 序列名;

 

 

示图

 

创建示图:

creating  views 示图名;

 

示图就相当于一条select 语句,定义了一个示图就是定义了一个sql语句,示图不占空间,使用view 不会提高性能,但是能简单化sql语句

(扩展知识: oracle  8i 以后的新示图)

MV  物化视图(占存储空间,把select 结果存在一个空间,会提高查询视图,增强实时性,但是存在刷新问题,物化示图中的数据存在延迟问题,主要应用在数据仓库中用要用于聚合表)

 

使用示图的好处:控制数据访问权限。

 

如何创建一个示图的例子:

create or replace views test_vi as select * from test1 where c1=1;

 

or replace的意义,如果view存在就覆盖,不存在才创建。

force|no force ,基表存在是使用,不存在是则创建该表。

 

此时往表test1base table 基表)中插入数据时:表中没能变化,示图中的数据发生改变

从示图中插数据时相对应的表会发生改变:

往示图中插数据时,会直接插进基表中,查看示图中的数据时,相当于就是执行创建时的select语句。

 

限制对数据库的访问,简化查询。

简单示图:来自于单表,且select语句中不能包括函数,能进行DML操作。

复杂示图:来源于多张表,不能执行DML操作。

 

试图的约束

with read only 示图只读约束(O)

with check option 不允许插入与where条件不符的记录,类似于check约束的功能(V)

 

select from 后也可以使用子查寻,这个写法也叫做内嵌示图

例:

select first_name,salary,avgsal from s_emp e,(select dept_id,avg(salary) avgsal from s_emp group by dept_id) s where e.dept_id=s.dept_id and e.salary>s.avgsal;

 

删除示图 drop views 示图名;

   发表时间:2009-01-02  
我没有学过Oracle数据库,我们一直用的是SQLServer2003/2005的,有机会群里的高手们谈谈自己的心得啊。
0 请登录后投票
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics