1.dictionary 数据字典是Oracle存放有关数据库信息的地方,其用途是用来描述数据的。
- 静态数据字典-->主要是在用户访问数据字典时不会发生改变的, --例如某用户创建的表
- 动态数据字典-->是依赖数据库运行的性能的,反映数据库运行的一些内在信息,所以在访问这类数据字典时往往不是一成不变的。这些视图提供了关于内存和磁盘的运行情况,所以我们只能对其进行只读访问而不能修改它们。
数据字典中的表是不能直接被访问的,但是可以访问数据字典中的视图。静态数据字典中的视图分为三类,它们分别由三个前缀够成:user_*、 all_*、 dba_*。
- user_* 该视图存储了关于当前用户所拥有的对象的信息。(即所有在该用户模式下的对象)
- all_* 该试图存储了当前用户能够访问的对象的信息。(与user_*相比,all_* 并不需要拥有该对象,只需要具有访问该对象的权限即可)
- dba_* 该视图存储了数据库中所有对象的信息。(前提是当前用户具有访问这些数据库的权限,一般来说必须具有管理员权限)
--所有的字典都保存在dictionary里面 select * from dictionary; -- 查当前用户里有哪些表 select table_name from user_tables; --查询当前用户下面有哪些视图? select view_name from user_views; --查询当前用户下面的约束在哪些表上面? select constraint_name, table_name from user_constraints; --查询该用户拥有哪些索引 select index_name from user_indexes; --查询该用户拥有哪些数据库对象,对象包括表、视图、存储过程、触发器、包、索引、序列、JAVA文件等。 select object_name from user_objects; --主要描述当前用户的信息,主要包括当前用户名、帐户id、帐户状态、表空间名、创建时间等。 select * from user_users;
2. Index 索引就相当于我们小时候查字典里那个索引
索引的作用:你为某个字段建立索引,别人访问这个字段的时候效率会更高。注意:是读的时候效率会更高。索引的建立是读起来更快,修改起来更慢了(附加修改索引表)。
你访问这个字段,访问量特别大的时候,而且觉得效率比较低的时候,这个时候可以考虑建立索引,但是记住一点:不要轻易的建立索引。
--创建索引 注意:当你给表里某个字段加约束的时候,比如主键约束,或者唯一约束,这个时候Oracle会帮你建立 --对应的这个字段的一个索引,如果你的主键是两个字段的组合,它会帮你建立两个字段组合的一个索引 create index idx_stu_email on stu (email); --删除索引 drop index idx_stu_email; --忘记索引怎么查 select index_name from user_indexes;
3.sequence 这是Oracle里面独特的东西,即特有的东西,一般用来做主键。每次取的时候它会自动增加。sequence与表没有关系。
CREATE SEQUENCE seqTest INCREMENT BY 1 -- 每次加几个 START WITH 1 -- 从1开始计数 NOMAXvalue -- 不设置最大值 NOCYCLE -- 一直累加,不循环 CACHE 10; --设置缓存cache个序列,如果系统down掉了或者其它情况将会导致序列不连续,也可以设置为---------NOCACHE --得到当前值 CURRVAL 总是返回当前SEQUENCE的值,但是在第一次NEXTVAL初始化之后才能使用CURRVAL,否则会出错。 SELECT seqTest.currVal FROM DUAL; --得到下个值 第一次NEXTVAL返回的是初始值;随后的NEXTVAL会自动增加你定义的INCREMENT BY值,然后返回增加后的值。 select seqtest.NextVal from dual; --修改 拥有ALTER ANY SEQUENCE 权限才能改动sequence. 可以alter除start至以外的所有sequence参数. --如果想要改变start值,必须 drop sequence 再 re-create。 alter sequence SEQTEST maxvalue 9999999; --删除 DROP SEQUENCE SEQTEST;
4.数据库三范式
三范式所追寻的原则是:不存在冗余数据
第一范式:确保每列保持原子性 ----> 1.要有主键(设计任何表都要有主键) 2.列不可分
第二范式:确保表中的每列都和主键相关 ---> 当一张表里面有多个字段作为主键的时候,非主键的这些字段,不能依赖于部分主键(只能依赖整个组合的主键,不能依赖部分)
第三范式:确保数据表中的每一列数据都和主键直接相关,而不能间接相关。----->(不能存在传递依赖,除了主键之外的任何其他字段必须直接依赖于主键)