20. 一下情况中不能使用序列.nextval和currval,会报错的:
1. 有group by , having 或 order by 的select 语句;
2. select,delete,update语句的子查询里面;
21. 在以下情况中,序列的值会出现不连续:
1.发生回滚 ;2.系统崩溃 ; 3. 被其他对象调用过。
22. 创建序列时,如果我们使用了nocache,那么还可以通过user_sequences的last_number字段来查看序列的下一个值;可是如果缓存了序列值的话,last_number就不一定准确了。
索引:
23. 索引的创建主要有两种方式: 1.自动创建(当为表定义了主键或者某个字段加上了unique约束),会自动创建唯一索引; 2.手动创建:我们可以在多列上手动创建非唯一索引来加快检索速度。(注意:一个列不能创建多个index)
24. 什么时候需要创建索引?
1. 当表的某列包含的数据值在很大范围
2. 某列包含了大量的null值
3. 表很大,有很多行,可是返回的数据行数很少(少于2%~4%)
4. 某列经常用于where子句中作为查询条件,或者join的连接条件
什么时候不建议创建索引?
1. 上面的情况的相反;
2. 表经常被DML
3. Where子句中这个列无可避免的合成表达式后才作为查询条件
25. 常常通过连接user_indexes和user_ind_columns视图来彻底了解一个索引;
26. 基于函数的索引的创建:其实就是指基于表达式创建的索引
Creat index index_name on table_name(upper(id));
要注意 的是:只有当查询条件中出现upper(id)时,才会使用此列上的索引。否则只会全表扫描。原因是这个索引的“指针,值”中的“值”是upper(id)计算后的值。
27. 只有索引的所有者或者具有drop any index权限的用户才能删除这个索引。
同义词:
28. 创建同义词如果指定了public ,那么这个同义词(公有同义词)就默认可以供所有用户使用;否则(私有同义词)就只能OWNER或拥有权限的人使用。
注意:删除公有同义词是要带上public,否则报:不存在,因为没有public的话就认为它是私有的。
角色:
29. 值得注意的是,我们还可以将对一个表的列的操作权限赋予给用户(角色),可是仅仅限于update和reference。例如,grant references (id,name) on department to luozhixiao;可是在回收这个权限的时候,就只有revoke references on department from luozhixiao;就是:只不能回收表中部分列的权限。
30.
USER_TAB_PRIVS_MADE Object privileges granted on the user’s objects
查看指定对象可以给别人操作的权限
USER_TAB_PRIVS_RECD Object privileges granted to the user
USER_COL_PRIVS_MADE Object privileges granted on the columns of the user’s objects
查看表的指定列可以给别人操作的权限
USER_COL_PRIVS_RECD Object privileges granted to the user on specific columns
31. 一个重大的盲点:A将某对象权限赋予给B(with grant options),后来B又将此权限赋予C,那么当A从B收回此权限时,C的权限也被级联回收!!
32. 使用alter table 来修改table时,要注意:alter table t_name drop column (c_name);(而 add , modify 就没有column关键字了)。
其次,当我们modify某字段的数据类型和size时,如果之前的数据有不符合修改后的数据类型和size的,修改将会失败!
还有当我们modify某字段的数据类型,size,默认值,是否空时,我们只需要将此字段的修改的属性写在altert table语句中即可
为什么要设置字段为unused呢?又如何将字段重使用呢?
Alter table t_name set unused (c_name_1, c_name_2……);
Desc t_name;//会发现unused的字段没有了----是隐藏了还是删除了??
数据字典:
33.数据字典,无非就是一些基表和一些视图(all_,dba_ ,user_和v$)的组合体,用来记录整个数据库用户,对象,和运行状态。所以可以通过数据字典来查看绝大部分数据库的信息。
基表:基表中存储着数据库的信息,只有oracle可以读写(SYS也不行),用户很少能够直接的访问这些基表,因为这些基表中的信息是难以看懂的,并且通常情况下都被加密存储。
视图:基表主要是供oracle数据库自己用的,视图把其中的一些信息抽取解析出来供用户使用,部分视图是可以被所有数据库用户访问的,部分只供管理员使用。
一个很特别的数据字典视图:dictionary,这个视图包含了对所有数据字典表和视图的描述。普通用户也可以通过它来查询自己可以访问的数据字典视图(例如user_tables)的描述,可是对于无权访问的数据字典视图就无法查到。
一个技巧:当我们有时候只记得某个视图的一部分名字时,可以通过对dictionary模糊查询来找到它!!
user_objects : 我们可以通过此视图来查询我们创建的某个对象的“何时创建”“上一次修改时间”“目前状态”等信息。不过我感觉很奇怪的是,拿table做例子,为什么不在user_tables就可以查询到“何时创建”“上一次修改时间”“目前状态”等信息呢?为何要将这些信息另放在user_objects中?
user_tab_columns :查看表的列的详细信息
user_constraints : 可以查看到约束的详细,可是不知是哪个列的
user_cons_columns : 可以查看到约束的列。所以经常两者连接查询。
USER_INDEXES : 可以查看到INDEX的详细,可是不知是哪个列的
USER_IND_COLUMNS : 可以查看到INDEX的列。所以经常两者连接查询。
我们用户建立的所有表和视图,都会在user_tab_comments 和 user_col_comments 视图中有一个记录,可是comments字段没有内容,除非自己添加进去。
为表/视图和列添加注释:
Comment on t_name is ‘888888’;
要删除注释,可将该注释设置为之间没有空格的两个单引号:
Comment on table BIRTHDAY is '';
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29900383/viewspace-1461726/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/29900383/viewspace-1461726/