变相怪杰 发表于 2015-1-16 22:38:38

MYSQL教程之Oracle数据字典的使用实例

根据Evans的调查报告,“MySQL的使用在未来将继续呈成长趋势。”oracle|数据|使用实例
Oracle数据库字典先容
Oracle数据字典是有表和视图构成的,存储有关数据库布局信息的一些数据库工具。数据库字典形貌了实践数据是怎样构造的。对它们能够象处置其他数据库表或视图一样举行查询,但不克不及举行任何修正。
Oracle数据库字典一般是在创立和安装数据库时被创立的,Oracle数据字典是Oracle数据库体系事情的基本,没无数据字典的撑持,Oracle数据库体系就不克不及举行任何事情。
在Oracle数据库字典中,很多视图都有三个分歧的实例,它们的前缀分离为"USER_"、"ALL_"及"DBA_"。"USER_"为前缀的数据库字典视图一般纪录实行查询的帐户所具有的工具的信息,"ALL_"为前缀的数据库字典视图一般纪录包含实行查询的帐户所具有的工具的信息及受权至PUBLIC的帐户用户所具有的工具的信息,"DBA_"为前缀的数据库字典视图则包括一切数据库工具的信息,而不论其一切者。其他的字典视图中次要的是V$视图,之以是如许叫是由于他们都是以V$或GV$开首的。V$视图是基于X$假造视图的。V$视图是SYS用户所具有的,在缺省情况下,只要SYS用户和具有DBA体系权限的用户能够看到一切的视图,没有DBA权限的用户能够看到USER_和ALL_视图,但不克不及看到DBA_视图。与DBA_,ALL,和USER_视图中面向数据库信息相反,这些视图可视的给出了面向实例的信息。
在Oracle的尽年夜多半数据字典视图中都有象DBA_TABLES,ALL_TABLES和USER_TABLES如许的视图家属。Oracle中有凌驾100个视图家属,下表列出了最主要和最经常使用的视图家属,必要注重的是每一个视图家属都有一个DBA_,一个ALL_一个USER_视图。


视图家属

形貌

COL_PRIVS

包括了表的列权限,包含授与者、被授与者和权限

EXTENTS

数据局限信息,好比数据文件,数据段名(segment_name)和巨细

INDEXES

索引信息,好比范例、独一性和被触及的表

IND_COLUMNS

索引列信息,好比索引上的列的排序体例

OBJECTS

工具信息,好比形态和DDLtime

ROLE_PRIVS

脚色权限,好比GRANT和ADMIN选项

SEGMENTS

表和索引的数据段信息,好比tablespace和storage

SEQUECNCES

序列信息,好比序列的cache、cycle和ast_number

SOURCE

除触发器以外的一切内置历程、函数、包的源代码

SYNONYMS

别号信息,好比援用的工具和数据库链接db_link

SYS_PRIVS

体系权限,好比grantee、privilege、admin选项

TAB_COLUMNS

表和视图的列信息,包含列的数据范例

TAB_PRIVS

表权限,好比授与者、被授与者和权限

TABLES

表信息,好比表空间(tablespace),存储参数(storageparms)和数据行的数目

TRIGGERS

触发器信息,好比范例、事务、触发体(triggerbody)

USERS

用户信息,好比一时的和缺省的表空间

VIEWS

视图信息,包含视图界说


在Oracle中另有一些不经常使用的数据字典表,但这些表不是真实的字典家属,他们都是一些主要的单一的视图。这些视图见下表:

视图称号

形貌

USER_COL_PRIVS_MADE

用户授与别人的列权限

USER_COL_PRIVS_RECD

用户取得的列权限

USER_TAB_PRIVS_MADE

用户授与别人的表权限

USER_TAB_PRIVS_RECD

用户取得的表权限

Oracle数据库字典的使用
借助Oracle数据字典,使用Oracle的DDL语句,我们能够做良多事变,几近一切的Oracle开辟帮助工具都是使用这一点举行计划的。作者将经由过程怎样获得数据库表字段信息来讲明。
起首我们界说一个数据库表,数据库表布局以下:

数据库表名

字段名

数据范例

长度

缺省值

同意空

主键

正文

NAME

VARCHAR2

40



N

Y

姓名

SEX

VARCHAR2

1

Y

N



性别

BIRTHDAY

DATE

0



Y



诞辰

HEIGHT

NUMBER

3,1



Y



身高

WEIGHT

NUMBER

3,1



Y



体重

MEMO

BLOB

0



Y



备注

创立表的SQL语句以下
--创立数据表
createtableTABLE_TEST
(
NAMEvarchar2(40)notnull,
SEXvarchar2(1)defaultYnotnull,
BIRTHDAYdatenotnull,
HEIGHTnumber(3,2),
WEIGHTnumber(3,2),
MEMOblob
);
--给列增加备注
commentoncolumnTABLE_TEST.NAMEis姓名;
commentoncolumnTABLE_TEST.SEXis性别;
commentoncolumnTABLE_TEST.BIRTHDAYis诞辰;
commentoncolumnTABLE_TEST.HEIGHTis身高;
commentoncolumnTABLE_TEST.WEIGHTis体重;
commentoncolumnTABLE_TEST.MEMOis备注;
--创立束缚干系主键外键其他
altertableTABLE_TESTaddconstraintTB_TEST_P_NAMEprimarykey(NAME);

数据表创立终了,实行以下SQL语句:
select
A.column_name字段名,A.data_type数据范例,A.data_length长度,A.data_precision整数位,
A.Data_Scale小数位,A.nullable同意空值,A.Data_default缺省值,B.comments备注
from
user_tab_columnsA,user_col_commentsB
where
A.Table_Name=B.Table_Name
andA.Column_Name=B.Column_Name
andA.Table_Name=TABLE_TEST

我们能够得出一下了局:


字段名

数据范例

长度

整数位

小数位

同意空值

缺省值

备注

NAME

VARCHAR2

40





N

<Long>

姓名

SEX

VARCHAR2

1





N

<Long>

性别

BIRTHDAY

DATE

7





N

<Long>

诞辰

HEIGHT

NUMBER

22

3

2

Y

<Long>

身高

WEIGHT

NUMBER

22

3

2

Y

<Long>

体重

MEMO

BLOB

4000





Y

<Long>

备注

如许,我们在举行程序计划时,经由过程一条复杂的SQL语句,然好经由过程Ole挪用Word,即可为终极用户导出完全的数据库表字典文档。
再实行以下SQL语句:
select
INDEX_NAME索引名,INDEX_TYPE索引范例,UNIQUENESS索引种别
from
user_indexes
where
TABLE_NAME=TABLE_TEST

失掉了局以下(注:SYS_IL0000031226C00006$$索引为体系在创立数据库表时主动创立的,用于数据库表内容的保护):

 

索引名

索引范例

索引种别

1

SYS_IL0000031226C00006$$

LOB

UNIQUE

2

TB_TEST_P_NAME

NORMAL

UNIQUE

 

实行以下SQL语句,我们将失掉更多的关于数据库表布局的信息:
select
A.column_name字段名,A.data_type数据范例,A.data_length长度,A.data_precision整数位,
A.Data_Scale小数位,A.nullable同意空值,A.Data_default缺省值,B.comments备注,
C.IndexCount索引次数
from
user_tab_columnsA,
user_col_commentsB,
(selectcount(*)IndexCount,Column_NamefromUser_Ind_ColumnswhereTable_Name=TABLE_TESTgroupbyColumn_Name)C
where
A.Table_Name=B.Table_Name
andA.Column_Name=B.Column_Name
andA.Column_Name=C.Column_Name(+)
andA.Table_Name=TABLE_TEST
失掉了局以下:

字段名

数据范例

长度

整数位

小数位

同意空值

缺省值

备注

索引次数

BIRTHDAY

DATE

7





N

<Long>

诞辰



HEIGHT

NUMBER

22

3

2

Y

<Long>

身高



MEMO

BLOB

4000





Y

<Long>

备注



NAME

VARCHAR2

40





N

<Long>

姓名

1

SEX

VARCHAR2

1





N

<Long>

性别



WEIGHT

NUMBER

22

3

2

Y

<Long>

体重



 

固然Oracle数据字典的使用远不止这些,经由过程Oracle数据库字典的撑持,我们能够失掉Oracle数据库布局的一切信息,出名的数据库开辟工具PL/SQLDeveloper完整就是基于Oracle的数据库字典完成的。作者也编写了一个本人的数据库计划工具,在Oracle数据库字典的基本长进行了一些扩大,假如感乐趣能够发邮件到LiangShengHong@163.com同作者接洽。

[注:作者上传好几回都上传不乐成,不晓得本来的是不是还在]
采用DBaaS解决方案,他们也可以使用同大企业一样的技术。在大型组织中,DBaaS可以提供部门级解决MySQL学习教程,而无需IT部门和采购部门的介入,提供更快和更容易的方法来实现小型解决方案。

小妖女 发表于 2015-1-19 20:11:12

我个人认为就是孜孜不懈的学习

金色的骷髅 发表于 2015-1-26 20:11:07

原理很简单,对要求长时间计算某一时间点的报表生成和防用户操作错误很有帮助。但是比起Oracle10g的闪回技术还是细粒度不够。可惜!

深爱那片海 发表于 2015-2-4 20:30:50

两个月啃那本sqlserver2005技术内部-存储引擎,花了几个月啃四本书

仓酷云 发表于 2015-2-10 07:22:46

代替了原来VB式的错误判断。比Oracle高级不少。

乐观 发表于 2015-3-1 03:16:52

这一点很好的加强了profiler的功能。但是提到profiler提醒大家注意一点。windows2003要安装sp1补丁才能启动profiler。否则点击没有反应。

活着的死人 发表于 2015-3-10 12:30:24

然后最好有实践机会,能够把实践到的和实践结合起来,其实理论思考是个非常困扰和痛苦的事情

飘飘悠悠 发表于 2015-3-17 07:08:35

代替了原来VB式的错误判断。比Oracle高级不少。

兰色精灵 发表于 2015-3-17 07:08:35

我们学到了什么?思考问题的时候从表的角度来思考问

海妖 发表于 2015-3-24 00:58:01

如果处理少量数据,比如几百条记录的数据,我不知道这两种情况哪个效率更高,如果处理大量数据呢?比如有表中有20万条记录.
页: [1]
查看完整版本: MYSQL教程之Oracle数据字典的使用实例