MYSQL教程之Oracle 数据字典
表里面的记录数量越多,这个操作的代价就越高。如果作为搜索条件的列上已经创建了索引,MySQL无需扫描任何记录即可迅速得到目标记录所在的位置。oracle|数据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同作者接洽。
[注:作者上传好几回都上传不乐成,不晓得本来的是不是还在]
你不用花费很多时间和金钱来培训现有的职工,或者去花大价钱雇用那些拥有各种证书的开发者。因为MySQL的维护和管理在很大程度上是“傻瓜型”的。 如安全管理、备份恢复、性能监控和调优等,SQL只要熟悉基本操作就可以,只要程序设计部分只要稍加了解即可(如存储过程、触发器等)。 where子句的作用是在对查询结果进行分组前,将不符合where条件的行去掉,即在分组之前过滤数据,条件中不能包含聚组函数,使用where条件显示特定的行。 这一点很好的加强了profiler的功能。但是提到profiler提醒大家注意一点。windows2003要安装sp1补丁才能启动profiler。否则点击没有反应。 另一个是把SQL语句写到服务器端,就是所谓的SP(存储过程); 只能告诉你,学好数据库语言和原理,多见识几种数据库软件,比一棵树上吊死要好。 但是随着数据量的增大,这种成本差距会逐渐减小,趋于相等。(500万数量级只相差10%左右) 这就引发了对varchar和char效率讨论的老问题。到底如何分配varchar的数据,是否会出现大规模的碎片? 作了些试验,发现使用CLR的存储过程或函数在达到一定的阀值的时候,系统性能会呈指数级下滑!这是非常危险的!只使用几个可能没有问题,当一旦大规模使用会造成严重的系统性能问题!
页:
[1]