日期:2014-05-16 浏览次数:20535 次
需求:将表中内容的重复的记录删除,剩下的都是不重复的记录。
方法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);
对象权限粒度可粗可细。可以把权限设置到某一个表,也可以到某一个表的某一个字段。
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