日期:2014-05-16  浏览次数:20493 次

Oralce学习笔记(3)

1.   删除内容重复的记录

需求:将表中内容的重复的记录删除,剩下的都是不重复的记录。

方法1

创建一个临时表,并把加了distinct的查询放到临时表中,删除原表,将临时表的更名为原表名。

create table t1 as select distinct * fromt_student;

drop table t_student purge;

alter table t1 rename to t_student;

这种方法从表面上看是达到目的了,但新创建出来的表的结构(约束)被改变了,是不可取的做法。

方法2:

创建一个临时表,并把加了distinct的查询放到临时表中,清空原表(即保留原表的结构),将临时表的记录放到原表中。

create table t1 as select distinct *  from t_student;

truncate table t_student;

insert into t_student select * from t1;

方法3:

使用子查询,结合rowid。

rowid概念:每一条记录的id,伪列。唯一的,固定的,属于某一个表,其值是一个指针,它指向本行数据存储的地址。是一物理上存在列,可以像其它实际列一样进行运算。

 

结合rowid,先按表中的所有列进行分组,取每一组中最大或者最小的rowid。然后删除余下的。

delete from t_student where rowid not in( select min(rowid) from t_student group byname,age);

方法4:

使用相关子查询,结合rowid。

delete from t_student t1 wheret1.rowid<>(select min(t2.rowid) from t_student t2 where t2.name=

t1.name and t2.age=t1.age);

2.   管理用户安全

2.1用户权限系统概述

对象权限粒度可粗可细。可以把权限设置到某一个表,也可以到某一个表的某一个字段。

A、权限

  系统权限(登录/能否创建表/删除表...)

  对象权限 (对某一张表[对象]能否访问select,insert,delete,update),视图,序列等其它对象)

  表1,系统权限表

 ID   权限名称    权限描述

 1     登录(CREATE SESSION)

 2     建表(CREATE TABLE)  

B、用户

  表2,用户表

 ID   用户名    密码   状态

  1   scott      test 0

  2   system     test 0

  3   ht         test 1

 

为了表示某一个用户有哪些权限

  表3,用户权限表(用户与权限是多对多的关系)

  用户ID   权限ID

   1        1

   1        2

   2        1

   3      &nbs