查询所有表、索引、视图信息的SQL语句-Mysql/oracle/sql server的不同实现方式

注:所有查询默认在管理员用户下进行

----------------------------------Mysql中--------------------------------------------

一、查询数据库内所有表的基本信息

       在Mysql中information_schema.TABLES表存储了数据表的元数据信息,下面对常用的字段进行介绍:

  • TABLE_SCHEMA         记录数据库名
  • TABLE_NAME             记录数据表名
  • ENGINE                      存储引擎
  • TABLE_ROWS             关于表的粗略行估计;
  • DATA)LENGTH           记录表的大小(单位字节);
  • INDEX_LENGTH         记录表的索引的大小
  • ROW_FORMAT          可以查看数据表是否压缩过;

     对应sql语句:

       全部属性查询

SELECT FROM information_schema.`TABLES` WHERE TABLE_SCHEMA = '数据库名';

 

       1.14日下午,我想抓取数据库所有表的建表语句失败

       对应版:

 

SELECT

     TABLE_CATALOG as '表目录',

     TABLE_SCHEMA as '数据库名',

     TABLE_NAME as '表名',

     TABLE_TYPE as '表类型',

     ENGINE as '存储引擎',

     VERSION as '版本',

     ROW_FORMAT as '表存储格式',

     TABLE_ROWS as '表现有行数',

     AVG_ROW_LENGTH as '平均每行长度',

     MAX_DATA_LENGTH as '最大数据长度',

     INDEX_LENGTH as '索引大小',

     DATA_FREE as '碎片大小',

     auto_increment as '自增',

     CREATE_TIME as '创建时间',

     UPDATE_TIME as '更新时间',        

     TABLE_COLLATION as '表字符集',

     CHECKSUM as '校验和',

     CREATE_OPTIONS as '创建选项',

     TABLE_COMMENT as '备注'

FROM

    information_schema.TABLES t

WHERE

    TABLE_SCHEMA = '数据库名';

 

注:information_schema.TABLES t  或者  information_schema.`TABLES`  这两种写法都可以。

 

二、查询数据库内所有表的字段(列)信息

          在Mysql中information_schema.COLUMNS表存储了数据表所有列的信息,下面对常用的字段进行介绍:

 

    • TABLE_CATALOG             这一列的值总是DEF;
    • TABLE_SCHEMA              记录数据库名
    • TABLE_NAME                  记录表名
    • COLUMN_NAME             记录列名
    • COLUMN_DEFAULT         记录列默认值
    • IS_NULLABLE                  是否可以取空
    • COLUMN_TYPE               记录列数据类型(详细)
    • COLUMN_KEY                 记录列索引类型
    • CHARACTER_MAXIMUM_LENGTH          CHAR/VARCHAR 最大长度;

 

     对应SQL语句:

       全部属性查询:

 

SELECT FROM information_schema.`COLUMNS` c WHERE TABLE_SCHEMA = '数据库名';

 

 

       对应版: 

 

SELECT

     TABLE_SCHEMA AS '库名',

     TABLE_NAME AS '表名',

     COLUMN_NAME AS '列名',

     ORDINAL_POSITION AS '列的排列顺序',

     COLUMN_DEFAULT AS '默认值',

     IS_NULLABLE AS '是否为空',

     DATA_TYPE AS '数据类型',

     CHARACTER_MAXIMUM_LENGTH AS '字符最大长度',

     NUMERIC_PRECISION AS '数值精度(最大位数)',

     NUMERIC_SCALE AS '小数精度',

     COLUMN_TYPE AS 列类型,

     COLUMN_KEY 'KEY',

     EXTRA AS '额外说明',

     COLUMN_COMMENT AS '注释'

FROM

     information_schema.`COLUMNS`

WHERE

     TABLE_SCHEMA = '数据库名'

ORDER BY

TABLE_NAME,

ORDINAL_POSITION;

 

三、查询数据库内所有表的索引信息

           在Mysql中information_schema.STATISTICS表存储了数据表所有索引的信息,下面对常用的字段进行介绍:

    • TABLE_CATALOG         包含索引的表所属的目录的名称。 该值始终为def;
    • TABLE_SCHEMA          包含索引的表所属的结构(数据库)的名称;
    • TABLE_NAME              包含索引的表的名称
    • NON_UNIQUE            如果索引不能重复,则为0;如果可以,则为1;
    • INDEX_SCHEMA         索引所属的结构(数据库)的名称;
    • INDEX_NAME             索引的名称。 如果是主键,则始终为PRIMARY;
    • SEQ_IN_INDEX            索引中的列序列号,以1开头;
    • COLUMN_NAME         列名称
    • COLLATION                 列在索引中排序方式:A(升序),D(降序),NULL(未排序);
    • CARDINALITY              估计索引中唯一值的数量,该值不一定精确;
    • SUB_PART                    索引前缀。 如果列仅被部分索引,则索引字符的数量,如果整列被索引,则为NULL;
    • PACKED                       指示密钥的打包方式。 如果不是,则为NULL;
    • NULLABLE                   如果列可能包含NULL值,则包含YES,否则包含’’;
    • INDEX_TYPE                索引类型(BTREE,FULLTEXT,HASH,RTREE);
    • COMMENT                  有关未在其自己的列中描述的索引的信息,例如在禁用索引时禁用;
    • INDEX_COMMENT      索引注释;

     对应SQL语句:

       全部属性查询:

SELECT FROM INFORMATION_SCHEMA.STATISTICS WHERE  table_schema = '数据库名'

       对应:    

SELECT

     TABLE_CATALOG as '目录',

     TABLE_SCHEMA as '库名',

     TABLE_NAME as '表名',

     NON_UNIQUE as '是否重复',

     INDEX_NAME as '索引名',

     SEQ_IN_INDEX as '索引的列号',

     COLUMN_NAME as '列名',

     collation as '列排序方式',

     cardinality as '索引唯一值数量',

     SUB_PART as '索引前缀',

     NULLABLE as '列包含空',

     INDEX_TYPE as '索引类型',

     COMMENT as '描述',

     INDEX_COMMENT as '注释'

FROM

     information_schema.STATISTICS s

WHERE

     TABLE_SCHEMA = 'mysql'

 

四、查询库名得建立的所有视图信息

 在Mysql中information_schema.STATISTICS表存储了数据表所有索引的信息,下面对常用的字段进行介绍:

    • TABLE_SCHEMA             视图所属的SCHEMA(数据库)的名称
    • TABLE_NAME                 表名称
    • VIEW_DEFINITION         视图定义语句
    • DEFINER                        创建触发器的用户的帐户
    • IS_UPDATABLE               MYSQL在CREATE VIEW时设置一个标志,称为视图可更新性标志。
    • CHECK_OPTION             CHECK_OPTION属性的值。该值是NONE,CASCADE或LOCAL之一
    • SECURITY_TYPE             视图SQL SECURITY特性。该值是DEFINER或INVOKER之一
    • COLLATION_CONNECTION           排序规则
    • CHARACTER_SET_CLIENT              编码格式

 对应SQL语句:

       全部属性查询:

SELECT from information_schema.VIEWS where TABLE_SCHEMA = '数据库名';

      查询所有视图创建语句:    

SELECT CONCAT('view ',TABLE_SCHEMA,'.', TABLE_NAME,' as ',VIEW_DEFINITION,';')

  FROM information_schema.views where TABLE_SCHEMA = '数据库名' ;

 

              中文对应版: 

SELECT

    TABLE_SCHEMA as '库名',

    TABLE_NAME as '表名',

    VIEW_DEFINITION as '视图定义语句',

    DEFINER as '创建触发器的用户的帐户',

    IS_UPDATABLE as '可更新标志',

    CHECK_OPTION as '设置视图约束',

    SECURITY_TYPE as '安全类型',

    COLLATION_CONNECTION as '排序规则',

    CHARACTER_SET_CLIENT as '编码格式'

from

    information_schema.VIEWS

where

    TABLE_SCHEMA = '数据库名';

 

----------------------------------SQL SERVER 中-----------------------------------------

            有一张系统视图

            sys.object

           在数据库内创建的每个用户定义的架构范围内的对象(包括本机编译的标量用户定义函数)都包含一行。

 

    • 在开发文档里有具体描述:https://docs.microsoft.com/zh-cn/sql/relational-databases/system-catalog-views/sys-objects-transact-sql?view=sql-server-ver15
       
    几乎所有对象信息都存在于sys.objects系统视图中,同时又在不同的系统视图中保留了相应的副本,对于函数、视图、 存储过程、触发器等相应的文本对象,把相应的对象的详细资料存于新的sys.sql_modules视图中。
  •  
  • 表视图:https://docs.microsoft.com/zh-cn/sql/relational-databases/system-catalog-views/sys-tables-transact-sql?view=sql-server-ver15

一、查询数据库所有表和字段的基本信息

               

 

SELECT

           表名 = case when a.colorder = 1 then d.name else '' end,

           表说明 = case when a.colorder = 1 then isnull(f.value, ''else '' end,

           字段序号 = a.colorder,

           字段名 = a.name,

           标识 = case when COLUMNPROPERTY(a.id, a.name'IsIdentity')= 1 then '√'else '' end,

           主键 = case when exists(SELECT FROM sysobjects where xtype = 'PK' and parent_obj = a.id and name in (

SELECT name FROM sysindexes WHERE indid in(SELECT indid FROM sysindexkeys WHERE id = a.id AND colid = a.colid))) then '√' else '' end,

           类型 = b.name,

           占用字节数 = a.length,

           长度 = COLUMNPROPERTY(a.id, a.name'PRECISION'),

           小数位数 = isnull(COLUMNPROPERTY(a.id, a.name'Scale'), 0),

           允许空 = case when a.isnullable = 1 then '√'else '' end,

           默认值 = isnull(e.text, ''),

           字段说明 = isnull(g.[value], '')

FROM

           syscolumns a

left join

           systypes b

on

           a.xusertype = b.xusertype

inner join

           sysobjects d

on

           a.id = d.id and d.xtype = 'U' and d.name <> 'dtproperties'

left join

           syscomments e

on

           a.cdefault = e.id

left join

           sys.extended_properties g

on

           a.id = G.major_id and a.colid = g.minor_id

left join

           sys.extended_properties f

on

           d.id = f.major_id and f.minor_id = 0

--where

-- d.name = 'Test'--如果只查询指定表,加上此where条件,tablename是要查询的表名;去除where条件查询所有的表信息

order by

           a.id,a.colorder

 

 

 

 

查询数据库所有建表语句:

 

select 'create table [' + so.name '] (' + o.list + ')' CASE WHEN tc.Constraint_Name IS NULL THEN '' ELSE 'ALTER TABLE ' + so.Name ' ADD CONSTRAINT ' + tc.Constraint_Name + ' PRIMARY KEY ' ' (' LEFT(j.List, Len(j.List)-1) + ')' END

from sysobjects so

cross apply

(select

           ' ['+column_name+'] ' +

           data_type + case data_type

           when 'sql_variant' then ''

           when 'text' then ''

           when 'decimal' then '(' cast(numeric_precision_radix as varchar) + ', ' cast(numeric_scale as varchar) + ')'

           else coalesce('('+case when character_maximum_length = -1 then 'MAX' else cast(character_maximum_length as varcharend +')',''end ' ' +

           case when exists (

select id from syscolumns

where  object_name(id)=so.name

           and name=column_name

           and columnproperty(id,name,'IsIdentity') = 1

then

           'IDENTITY(' +

           cast(ident_seed(so.nameas varchar) + ',' +

           cast(ident_incr(so.nameas varchar) + ')'

           else ''

           end ' ' +

           (case when IS_NULLABLE = 'No' then 'NOT ' else '' end ) + 'NULL ' +

           case when information_schema.columns.COLUMN_DEFAULT IS NOT NULL THEN 'DEFAULT '+ information_schema.columns.COLUMN_DEFAULT ELSE '' END ', '

from information_schema.columns where table_name = so.name

ORDER BY ordinal_position

FOR XML PATH('')) o (list)

LEFT JOIN

information_schema.table_constraints tc

on tc.Table_name = so.Name

AND tc.Constraint_Type = 'PRIMARY KEY'

cross apply

(select '[' + Column_Name + '], '

FROM information_schema.key_column_usage kcu

WHERE kcu.Constraint_Name = tc.Constraint_Name

ORDER BY

ORDINAL_POSITION

FOR XML PATH('')) j (list)

where xtype = 'U'

AND name NOT IN ('dtproperties');

 

 

查询整个数据库包括系统表所有的字段信息

 

SELECT FROM SYS.COLUMNS

 

 

二、查询数据库所有表的索引信息

注:还可以生成创建和删除语句

 

WITH TB

           AS SELECT    TB.object_id ,

                                  Schema_name = Sch.name ,

                                  table_name = TB.name

                   FROM      sys.tables TB

                                   INNER JOIN sys.schemas Sch ON TB.schema_id = Sch.schema_id

                   WHERE    TB.is_ms_shipped = 0

                    ),

             IXC

                AS SELECT IXC.object_id ,

                                    IXC.index_id ,

                                    IXC.index_column_id ,

                                    IXC.is_descending_key ,

                                    IXC.is_included_column ,

                                    column_name = C.name

                        FROM  SYS.index_columns IXC

                                    INNER JOIN SYS.columns C ON IXC.object_id = C.object_id

                                                                                        AND IXC.column_id = C.column_id

                 ),

IX

    AS SELECT       IX.object_id ,

                              index_name = IX.name ,

                              index_type_desc = IX.type_desc ,

                              IX.is_unique ,

                              IX.is_primary_key ,

                              IX.is_unique_constraint ,

                              IX.is_disabled ,

                              index_columns_TEMP = STUFF(IXC_COL.index_columns, 1, 1,

                                                                                 N'') ,

                              index_columns = CASE WHEN IXC_COL_INCLUDE.index_columns_includes IS NOT NULL

                                                                   THEN STUFF(LEFT(IXC_COL.index_columns,

                                                                                                DATALENGTH(IXC_COL.index_columns)

                                                                                                 -

DATALENGTH(IXC_COL_INCLUDE.index_columns_includes)),

                                                     1, 1, N'')

                                          ELSE STUFF(IXC_COL.index_columns,

                                                     1, 1, N'')

                                       END ,

                          index_columns_includes = STUFF(IXC_COL_INCLUDE.index_columns_includes,

                                                     1, 1, N'')

            FROM   sys.indexes IX

                    CROSS APPLY ( SELECT index_columns = ( SELECT

                                                          N','

                                                          + QUOTENAME(column_name)

                                                          FROM

                                                          IXC

                                                          WHERE

                                                         object_id = IX.object_id

                                                         AND index_id = IX.index_id

                                                         ORDER BY index_column_id

                             FOR   XML PATH('') ,

                                       ROOT('r') ,

                                       TYPE

).value('/r[1]''nvarchar(max)')

                               ) IXC_COL

                      OUTER APPLY ( SELECT index_columns_includes = ( SELECT

                                                         N','

                                                         + QUOTENAME(column_name)

                                                         FROM

                                                         IXC

                                                         WHERE

                                                         object_id = IX.object_id

                                                         AND index_id = IX.index_id

                                                         AND is_included_column = 1

                                                         ORDER BY index_column_id

                                   FOR     XML PATH('') ,

                                              ROOT('r') ,

                                              TYPE

).value('/r[1]''nvarchar(max)')

                     ) IXC_COL_INCLUDE

           WHERE index_id > 0

          )

SELECT DB_NAME() AS N'数据库名' ,

       TB.Schema_name AS N'架构' ,

       TB.table_name AS N'表名' ,

       IX.index_name AS N'索引名' ,

       IX.index_type_desc AS N'索引类型' ,

       IX.is_unique AS N'是否唯一索引' ,

       IX.is_primary_key AS N'是否主键' ,

       IX.is_unique_constraint AS N'是否唯一约束' ,

       IX.is_disabled AS N'是否禁用索引' ,

       IX.index_columns AS N'索引列' ,

       IX.index_columns_includes AS N'索引包含列' ,

       N'CREATE INDEX ' + N'[' + IX.index_name + N']' + N' ON ' + N'['

       + QUOTENAME(DB_NAME()) + N'.' + QUOTENAME(TB.SCHEMA_NAME) + N'.'

       + QUOTENAME(TB.table_name) + N'(' + IX.index_columns + N')'

       CASE WHEN IX.index_columns_includes IS NOT NULL

              THEN CHAR(13) + N'INCLUDE (' + IX.index_columns_includes

              + N')'

       ELSE N''

   END AS N'创建索引' ,

       N'DROP INDEX ' + QUOTENAME(IX.index_name) + N' ON '

       + QUOTENAME(DB_NAME()) + N'.' + QUOTENAME(TB.SCHEMA_NAME) + N'.'

       + QUOTENAME(TB.table_name) AS N'删除索引'

FROM TB

       INNER JOIN IX ON TB.object_id = IX.object_id

ORDER BY Schema_name ,

       table_name ,

       IX.index_name;

 


结果图:

 

三、查询建立的所有视图信息

 

select from sys.objects where xtype='V'

在SQL server的可视化工具Microsoft SQL Server Management Studio 中右键点击视图,设计中可查看创建语句

 

 

----------------------------------ORACLE 中-----------------------------------------

一、查询所有表,视图的基本信息,字段信息,索引信息

在数据字典与识图中可以找到相应的视图,来查询数据库基本信息;详细字段信息需要到视图中的查看里都有描述

在DBA_TAB_COLS视图中中有详细的表的描述下面是字段信息

  • TABLE_NAME是表名,视图名或者集群名;
  • COLUMN_NAME是'列名';
  • DATA_TYPE是“列的数据类型”;
  • DATA_TYPE_MOD是'列的数据类型修饰符';
  • DATA_TYPE_OWNER是“列的数据类型的所有者”;
  • DATA_LENGTH是'列的长度,以字节为单位';
  • DATA_PRECISION是'长度:十进制数字(数字)或二进制数字(浮点数)';
  • DATA_SCALE是“数字小数点右侧的数字”;
  • NULLABLE是'列允许空值吗?';
  • COLUMN_ID是'创建的列的序列号';
  • DEFAULT_LENGTH是'列的默认值的长度';
  • DATA_DEFAULT是'列的默认值';
  • NUM_DISTINCT是'列中不同值的个数';
  • LOW_VALUE是'列中的低值';
  • HIGH_VALUE是'列中的高值';
  • 密度为“柱的密度”;
  • NUM_NULLS是' null的数量在列';
  • NUM_BUCKETS是'该列柱状图中的桶数';
  • LAST_ANALYZED是'The date of The last time this column was analyzed';
  • SAMPLE_SIZE是“用于分析本列的样本大小”;
  • CHARACTER_SET_NAME是'字符集名称';
  • CHAR_COL_DECL_LENGTH是'声明长度字符类型列';
  • GLOBAL_STATS是“统计数据在没有合并基础分区的情况下计算吗?”;
  • USER_STATS是'是用户直接输入的数据吗?';
  • AVG_COL_LEN是“列的平均长度(以字节为单位)”;
  • CHAR_LENGTH是'列的最大字符长度';
  • CHAR_USED为'C if width was specified in characters, B if in bytes';
  • V80_FMT_IMAGE is ' is column data in 8.0 image format?';
  • data_updated is '列数据是否已升级到最新的类型版本格式?';
  • HIDDEN_COLUMN是'这是一个隐藏的列吗?';
  • VIRTUAL_COLUMN是“这是一个虚拟列吗?”;
  • SEGMENT_COLUMN_ID是‘在段中的列的序列号’;
  • INTERNAL_COLUMN_ID是'列的内部序列号';
  • QUALIFIED_COL_NAME是'限定列名';

 

 

!!!在这里遇到了问题:查询所有出来的结果只有固定的一小部分,都是数据字典表,进入视图去看原数据也是,但是用条件查询还是可以查出来

 

 

条件查询可以查出来,但是上面的查询结果中不包含TESTS_1表

 

数据字典表(Data dictionary table)用以存储表、索引、约束以及其它数据库结构的信息,这些对象通常以“$”结尾(例如:TAB$、OBJ$、TS$等),在创建数据库的时候通过运行$ORACLE_HOME/rdbms/admin/sql.bsq脚本来创建。sql.bsq是一个非常重要的文件,其中包含了数据字典表的定义及注释说明,应仔细阅读研究。

方法一

 

select table_name from user_tables;                     //当前用户的表 table_name,tablespace_name,last_analyzed等

select table_name from all_tables;                       //所有用户的表 ower,table_name,tablespace_name,last_analyzed等

select table_name from dba_tables;                    //包括系统表 ower,table_name,tablespace_name,last_analyzed等

 


--实例:

 

select table_name from dba_tables where owner='用户名'

 


列名:
ower,object_name,subobject_name,object_id,created,last_ddl_time,timestamp,status等

如遇到一个庞大的数据核心系统,而并不知道主键关联的情况,可以用以下脚本查询该主键所有对应的表,随后进行筛选关联:

 

select table_name,column_name from user_tab_columns where column_name like '%主键名%';

 

 

方法二

oracle 查询全部表和对应表结构:

 

SELECT

        T .database_name AS database_name,    --

        T .table_name AS table_name,

        T .column_name AS column_name,

        T .column_type AS column_type,

        T .data_length AS data_length,

        T .column_comment AS column_comment,

        b.constraint_type AS constraint_type

FROM

(

SELECT

        UB.tablespace_name AS database_name,

        UTC.table_name AS table_name,

        UTC.column_name AS column_name,

        UTC.data_type AS column_type,

        utc.data_length AS data_length,

        ucc.comments AS column_comment

FROM

user_tables ub

LEFT JOIN user_tab_columns utc ON ub.table_name = UTC.table_name

LEFT JOIN user_col_comments ucc ON utc.column_name = ucc.column_name

AND utc.table_name = ucc.table_name

) T

LEFT JOIN (

        SELECT

                UCC.table_name AS table_name,

                ucc.column_name AS column_name,

                wm_concat (UC.constraint_type) AS constraint_type

        FROM

        user_cons_columns ucc

LEFT JOIN user_constraints uc ON UCC.constraint_name = UC.constraint_name

GROUP BY

        UCC.table_name,

        ucc.column_name

) b ON T .table_name = b.TABLE_NAME

AND T .column_name = b.column_name

 

 

 

数据字典与视图:

https://blog.csdn.net/huangleijay/article/details/11568265

Oracle提供了很方便的视图,直接查询便可

实例:

select from ALL_USERS;--查询所有用户

 

select from DBA_INDEXES;--查询所有索引信息

数据字典与视图

        视  图  名

说   明

ALL_CATALOG

为用户可存取的全部表、视图和序列

ALL_COL_COMMENTS

为用户可存取的表和视图列上的注释

ALL_COL_PRIVS

在列上授权,该用户或PUBLIC是被授与者

ALL_COL_PRIVS_MADE

在列上授权,该用户为持有者或授与者

ALL_COL_PRIVS_RECD

在列上授权,该用户或PUBLIC是被授与者

ALL_CONSTRAINTS

在可存取表上的约束定义

ALL_CONS_COLUMN

关于在约束定义中可存取列的信息

ALL_DB_LINKS

用户可存取的数据库链

ALL_DBF_AUDIT_OPTS

在对象建立时,所应用的缺省对象审计选择

ALL_DEPENDENCIES

用户可存取的对象之间的从属关系

ALL_ERROES

在用户可存取对象上的当前错误

ALL_INDEXES

在用户可存取的表上的索引说明

ALL_IND_COLUMNS

在可存取的表上的索引列

ALL_OBJECTS

用户可存取的对象

ALL_SEQUENCES

用户可存取的序列说明

ALL_SNAPSHOTS

用户可存取的全部快照

ALL_SOURCE

用户可存取的全部存储对象文本源程序

ALL_SYNONYM

用户可存取的全部同义词

ALL_TABLES

用户可存取的表的说明

ALL_TAB_COLUMNS

用户可存取的表、视图、聚集的列

ALL_TAB_COMMENTS

用户可存取的表或视图上的注释。

ALL_TAB_PRIVS

在对象上授权,该用户或PUBLIC被授与者

ALL_TAB_PRIVS_MADE

在对象上的授权或用户授权

ALL_TAB_PRIVS_RECD

在对象上授权,该用户或PUBLIC是被授与者

ALL_TRIGGERS

用户可存取的触发器

ALL_TRIGGER_COLS

显示用户持有的表中的列和用户所持有的触发器中列的使用,或者用户具有CREATE ANY TRIGGER特权时在所有触发器上列的使用

ALL_USERS

关于数据库是所有用户的信息

ALL_VIEW

用户可存取的视图文本

AUDIT_ACTIONS

审计跟踪动作类型代码描述表

CAT

为USER_CATALOG的同义词

CHAINED_ROWS

ANALYZE CHAINED ROWS命令的缺省值

CLU

为USER_CLUSTERS的同义词

COLS

为USER_TAB_COLUMNS的同义词

COLUMN_PRIVILEGES

在列上授权,用户是其授权者,被授与权者、持有者或授与PUBLIC

DBA_2PC_NEIGHBORS

关于悬挂事务入和出连接的信息

DBA_2PC_PENDING

关于在PREPARED状态时失败的分式事务信息

DBA_AUDIT_EXISTS

由AUDIT EXISTS命令建立的审计跟踪记录

DBA_AUDIT_OBJECT

系统中全部对象的审计跟踪记录

DBA_AUDIT_SESSION

系统中涉及CONNECT和DISCONNECT的全部审计跟踪记录

DBA_AUDIT_STATEMENT

系统中涉及GRANT、REVOKE、AUDIT、NOAUDIT和ALTER SYSTEM语句的全部审计记录

DBA_AUDIT_TRAIL

为系统中全部审计记录的集合

DBA_BLOCKERS

为会话集,它们具有别的会话正等待的一封锁,而它们本身不等待封锁

DBA_CATALAOG

为全部数据库表、视图、同义词和序列

DBA_CLUSTERS

数据库中全部聚集的说明

DBA_CLU_CLOUMNS

表列对聚集列的映射

DBA_COL_COMMENTS

在所有表和视图的列上的注释

DBA_COL_PRIVS

在数据库列上的全部授权

DBA_CONSTRAINTS

在数据库全部表上的约束定义

DBA_CONS_CLOUMNS

关于约束定义中全部列的信息

DBA_DATA_FILES

关于数据文件的信息

DBA_ DB_LINKS

在数据库中的全部数据链

DBA_ DDL_LOCKS

数据库中当前所有全部DDL封锁和所有未完成的DML封锁请求

DBA_ DEPENDENCIES

全部对象之间的从属关系

DBA_DML_LOCKS

数据库中当前所持有DDL封锁和所有未完成的DML封锁请求

DBA_ERRORS

数据库中全部存储对象上的当前错误

DBA_EXP_FILES

输出文件说明

DBA_EXP_OBJECTS

已有增量输出的对象

DBA_EXP_VERSION

最后的输出会话的版本

DBA_EXTENTS

数据库中全部段的范围

DBA_FREE_SPACE

在所有表空间中未用的范围

DBA_INDEXES

数据库中全部索引的说明

DBA_IND_COLUMN

全部表和聚集上的索引列

DBA_LOCKS

在数据库中持有的全部封锁和未完成请求的封锁(包括DML和DDL封锁)

DBA_OBJECT

在数据库中定义的全部聚集、数据库链、索引、包、包体、序列、同义词、表和视图

DBA_OBJECT_SIZE

数据库中的全部PL/SQL对象

DBA_OBJ_AUDIT_OPTS

为全部表和视图的审计选择

DBA_PRIV_AUDIT_OPTS

特权审计选择

DBA_PROFILES

赋给每个环境文件的资源限制

DBA_ROLES

在数据库中已有的全部角色

DBA_ROLE_PRIVS

授权给用户或角色的角色的说明

DBA_ROLLBACK_SEGS

回滚段的说明

DBA_SEGMENTS

分配给全部数据库段的存储

DBA_SEQUENCES

在数据库中全部序列的说明

DBA_SNAPSHOTS

在数据库中的全部快照

DBA_SNAPSHOTS_LOGS

在数据库中的全部快照日志

DBA_SOURCE

在数据库中全部存储对象的源文本

DBA_SYNONYMS

在数据库中的全部同义词

DBA_STMT_AUDIT_OPTS

为当前系统审计选择

DBA_SYS_PRIVS

授权给用户或角色的系统特权

DBA_TABLES

在数据库中的全部表的说明

DBA_TABLESSPACES

数据库中的全部表空间的说明

DBA_TAB_CLOUMNS

全部表、视图和聚集中的列

DBA_TAB_COMMENTS

在数据库中全部表和视图上的注释

DBA_TAB_PRIVS

在数据库中对象上的全部授权

DBA_TRIGGERS

在数据库中全部触发器的说明

DBA_TRIGGERS_COLS

显示由用户定义或在任何用户表上的触发器中列的用法

DBA_TS_QUOTAS

为全部用户的表空间份额

DBA_USERS

关于数据库全部用户的信息

DBA_VIEWS

数据库中全部视图的文本

DBA_WAITERS

等待封锁的全部会话和持有该锁的会话

DICT

为DICTIONARY的同义词

DICTIONARY

数据库字典表和视图的说明

DICT_COLUMNS

数据库字典表和视图中的列的说明

EXCEPTIONS

违反完整性约束的信息

GLOBAL_NMAE

当前数据库的全局名

IND

为USER__INDEXES的同义词

INDEX_STATE

存储VAILDATE INDEX命令的信息

OBJ

为USER_ OBJECT的同义词

RESOURCE_COST

每种资源的费用

ROLE_ROLE_PRIVS

授权给其它角色的角色的信息

ROLE_SYS_PRIVS

授权给角色的系统特权的信息

ROLE_TAB_PRVS

授权给角色的表特权的信息

SEQ

为USER_SEQUENCES的同义词

SEESSIONS_PORIVS

用户当前可用的特权

SESSION_ROLES

用户当前已使其使能打角色

SYN

为USER_SYNONYMS的同义词

SYSTEM_PRILEGE_MAP

为系统特权代码的说明表

TABLE_PRIVILEGES

在对象上授权

TABLE_PRIVILEGE_MAP

为存取特权代码的说明表

TABS

为USER_TABLES的同义词

USER_AUDIT_OBJECT

涉及对象审计跟踪记录

USER_AUDIT_SESSION

涉及连接或删除连接的全部审计跟踪记录

USER_AUDIT_STATEMENT

为用户发出的GRANT、REVOKE、AUDIT、NOAUDIT、ALL SYSTEM语句的审计跟踪项

USER_AUDIT_TRAIL

与用户有关的审计跟踪项

USER_CATALOG

为用户所持有的表、视图、同义词和序列

USER_CLUSTERS

为用户持有的聚集的说明

USER_CLU_CLOUMNS

用户的表列到聚集的映射

USER_COL_COMMENTS

在用户的表或视图的列上的注释

USER_COL_PRIVS

在列上的授权,该用户是持有者、授权者或被授与者

USER_COL_PRIVS_MADE

为用户持有的对象的列上的全部授权

USER_COL_PRIVS_RECD

该用户是被授权者的列上的授权

USER_CONSTRAINT

在用户表上的约束定义

USER_CONS_COLUMNS

由用户持有约束定义中的列的信息

USER_DB_LINKS

为用户持有的数据库链

USER_DEPENDENCIES

用户的对象之间的从属关系

USER_ERRORS

用户的存储对象上的当前错误

USER_EXTRNTS

属于用户对象的段的范围

USER_FREE_SPACE

用户可存取的表空间中未用的范围

USRE_INDEXES

用户自己的索引说明

USER_IND_CLOUMNS

用户索引的列或用户表上的列

USER_OBJECTS

用户所持有的对象

USER_OBJECT_SIZE

用户的PL/SQL对象

USER_OBJ_AUDIT_OPTS

为用户的表和审计选择

USER_RESOURCE_LIMITS

为当前用户的资源限制

USER_ROLE_PRIVS

特权给用户的角色

USER_SEGMENT

属于用户对象的数据库段的存储分配

USER_SEQUENCE

用户自己的序列的说明

USER_SNAPSHOTS

用户可查看的快照

USER_SNAPSHOT_LOGS

用户可持有的快照日志

USER_SOURCE

属于用户的全部存储对象的源文本

USER_SYNONYM

用户专用同义词

USER_SYS_PRIVS

特权给用户的系统特权

USER_TABLES

用户持有表的说明

USER_TABLESPACES

可存表空间的说明

USER_TAB_COLUMNSS

用户的表、视图和聚集的列

USER_TAB_COMMENTS

用户所持的表和视图上的注释

USER_TAB_PRIVS

用户为授权者、持有者或被授权者的对象上的授权

USRE_TAB_PRIVS_MADE

用户所持有的对象的全部特权

USER_TAB_PRIVS_RECD

用户为被授权者的对象上授权

USER_TRIGGRS

用户触发器的说明

USER_TRIGGRS_COLS

用户所持有的或在用户表上的触发器中的列的用法

USER_TS_QUOTAS

用户在表空间上的份额

USER_USERS

关于当前用户的信息

USER_VIEWS

用户持有的视图的文本


附录A  动态性能表

表名

说明

V$ACCESS

显示数据库中的对象信息

V$ARCHIVE

数据库系统中每个索引的归档日志方面的信息

V$BACKUP

所有在线数据文件的状态

V$BGPROCESS

描述后台进程

V$CIRCUIT

有关虚拟电路信息

V$DATABASE

控制文件中的数据库信息

V$DATAFILE

控制文件中的数据文件信息

V$DBFILE

构成数据库所有数据文件

V$DB_OBJECT_CACHE

表示库高速缓存中被缓存的数据库对象

V$DISPATCHER

调度进程信息

V$ENABLEDPRIVS

那些特权接通

V$FILESTAT

文件读/写统计信息

V$FIXED_TABLE

显示数据库中所有固定表、视图和派生表

V$INSTANCE

当前实例状态

V$LATCH

每类闩锁的信息

V$LATCHHOLDER

当前闩锁占有者的信息

V$LATCHNAME

在V$LATCH表中表示的闩锁的译码闩锁名

V$LIBRARYCACHE

库高速缓冲存储管理统计

V$LICENSE

许可限制信息

V$LOADCSTAT

SQL*Loader在直接装入执行过程中的编译统计

V$LOCK

有关封锁和资源信息,不包含DDL封锁

V$LOG

控制文件中的日志文件信息

V$LOGFILE

有关日志文件信息

V$LOGHIST

控制文件中的日志历史信息

V$LOGHISTORY

日志历史中所有日志的归档日志名

V$NLS_PARAMETERS

NLS参数的当前值

V$OPEN_CURSOR

每一个用户会话期当前已打开和分析的光标

V$PARAMETER

当前参数值的信息

V$PROCESS

当前活动进程的信息

V$QUEUE

多线索信息队列的信息

V$REVOVERY_LOG

需要完成介质恢复的归档日志

V$RECOVERY_FILE

需要介质恢复的文件状态

V$REQDIST

请求时间直方图,分为12个范围

V$RESOURCE

有关资源信息

V$ROLLNAME

所有在线回滚段的名字

V$ROLLSTAT

所有在线回滚段的统计信息

V$ROWCACHE

数据字典活动的统计信息(每一个包含一个数据字典高速缓存的统计信息)

V$SESSION

每一个当前会话期的会话信息

V$SESSION_WAIT

列出活动会话等待的资源或事件

V$SESSTAT

对于每一个当前会话的当前统计值

V$SESS_IO

每一个用户会话的I/O统计

V$SGA

系统全局区统计信息

V$SGASTAT

系统全局区的详细信息

V$SHARED_SERVER

共享服务器进程信息

V$SQLAREA

共享光标高速缓存区的统计信息,每一个有一个共享光标的统计信息

V$SQLTEXT

属于SGA中的共享SQL光标的SQL语句文本

V$STATNAME

在V$SESSTAT表中表示的统计信息的译码统计名

V$SYSSTAT

表V$SESSETA中当前每个统计的全面的系统值

V$THREAD

从控制文件中得到线索信息

V$TIMER

以百分之一秒为单位的当前时间

V$TRANSACTION

有关事务的信息

V$TYPE_SIZE

各种数据库成分的大小

V$VERSION

ORACLE Server中核心库成员的版本号,每个成员一行

V$WAITSTAT

块竞争统计,当时间统计可能时,才能更新该表

 

附录B   SQL语言运算符与函数

表1  各种运算符

运算符

含  义

相等

!=或<>

不等于

大于

>=

大于等于

小于

<=

小于等于

IN(列表)

等于列表中的任意值

BETWEEN值1 AND值2

大于等于值1并且小于等于值2

LIKE%或-

模式匹配。“%”匹配0个或任意个字符,“-”匹配一个字符

IS NULL

空值

IS NOT NULL

非空值

NOT

逻辑非

AND

逻辑与

OR

逻辑或

 

表2  字符函数列表

函数

功能

注释

ASCII(char)

计算char的第一个字符的ASCII值或EBCDIC码值

函数返回值取决于计算机系统采用的字符

CHAR(n)

计算ASCⅡ码值或EBCDIC码值是n的字符

函数n依赖于计算机系统采用的字符集,n的取值为0~127或0~254之间

INITCAP(char)

将char串口的每个单词的首字母变成大写,其余字母变为小写

单词之间用数字、空格、逗号、顿号、冒号、分号、句号、1、@、#、$等字符分隔

INSTR(char1,char[,m[,n]])

求char1中从m位置起char2第n次出现的位置

m,n缺省值为1,当>0时,表示从char1的首部起始(从左向右)正向搜索;n<0时,表示从char1的尾部起始(从右向左)反向搜索

LENGTH(char)

计算字符串char的长度

 

LOWER(char)

将char中所有的字母改成小写

 

LPAD(char1,n[,char2])

从左侧用char2补齐char1至长度n

char2省略时,用空格填充,n<char1的长度时,表示截取char1从左至右侧n个字符

RPAD(char1,n[,char2])

从右侧用char2补齐char1至长度n

char2省略时,用空格填充,n<char1的长度时,表示截取char1右侧n个符

LTRIM(char[,SET])

把char1中最左侧的若干个字符去掉,以使其首字符不在SET中

SET表示单个字符组在的字符集合。SET若被省略时,表示截取char左边的前置空格

RTRIM(char[,SET])

把char中最右侧的若干个字符去掉,以使其尾字符不在SET中

SET表示单个字符组成的字符集合。SET若被省略时,表示截取char右边的后置空格

REPLACE(char1,char2[,char3]

将char1中出现的所有char2用char3来代替

char2和char3同时被省略时,函数返回NULL,仅char3省略时,则表示删除char1中出现的所有char2

SOUNDEX(char)

求与char中一个或多个单词发音相同的字符串

 

SUBSTR(char,m[,n])

返回char中第m个字符起始n个字符长的子串

n省略时,表示截取char中第m个字符后的子串

TRANSLATE(char1,from,to)

将from字符集转换为to字符集,char中以from表达的字符用to中相对应的字符所代替

 

UPPER(char)

将char中所有的字母改变大写

 

 

表3  数值函数列表

函数

功能

注释

ABS(n)

计算n的绝对值

允许是数值型常数、数值型列名、包含一个有效数值的文字串或包含一个有效数值的字符型列名

CELL(n)

计算大于或等于n的最小整数

数学中的向上取整运算

FLOOR(n)

计算大于或等于n的最大整数

数学中的向下取整运算

MOD(m,n)

计算m除以n的余数n=0时,返回m

MOD(m,1)=0说明m是一个整数

POWER(m,n)

ROUND(m,[,n])

计算m的n次方,n>0时,将m四舍五入到小数点右边n位n<0时,将m四舍五入到小数点左边n位

n要求为整数,否则出错n=0或n被省略表示对m进行取整

SIGN(n)

判断n的正负

如果n>0,函数返回1;n=0,函数反加0,n<0,函数反回

SQRT(n)

TRUNC(m,[,n])

计算n的平方根,n>0时,将m小数点右边n位截断;n<0时,将m小数点左边的n位后各位截断,并添加n个0

n<0时,函数返回NULLn=0或n被省略表示对m进行取整

 

 

表4  日期函数列表

函数

功能

注释

ADD_MONTHS(d,n)

计算d加上n个月的日期

n要求为整数,n>0时,返回d之后n个月的日期;n<0时,返回d之前n个月的日期

LAST_DAY(d)

计算d所在月份最后一天的日期

用来确定给定月份中的天数

MONTHS_BETWEEN

(d1,d2)

计算d1和d2之间相隔的月数

返加结果>0时,表示d1晚于d2;返回结果<0时,表示d1早于d2

NEXT_DAY(d,s)

计算晚于d的第一个s的日期

s要求是’Sunday’,’Monday’,

’Tuesday’,’Wednesday’,’Thursday’,

’Friday’或’Saturday’

SYSDATE

求系统当前日期和时间

 

 

表5  聚组函数列表

函 数

功 能

AVG(e)

计算一组行中e值的平均值

COUNT(e)

计算一组行中e值为非空值的行数

COUNT(*)

计算表中的行数(包括重复值和空值)

MAX(e)

计算一组行中e值的最大值

MIN(e)

计算一组行中e值的最小值

STDDEV(e)

计算一组行中e值的标准差

SUM(e)

计算一组行中e值的总和

VARIANCE(e)

计算一组行中e值的方差

 

二,获取数据字典定义

获取对象定义的包为:dbms_metadata,其中的get_ddl函数是获取对象的函数 
GET_DDL函数返回创建对象的原数据的DDL语句,参数说明 
1、object_type ---需要返回原数据的DDL语句的对象类型 
2、name --- 对象名称 
3、schema ---对象所在的Schema,默认为当前用户所在所Schema 
4、version ---对象原数据的版本 
5、model ---原数据的类型默认为ORACLE 
6、transform. - XSL-T transform. to be applied. 
7、RETURNS: 对象的原数据默认以CLOB类型返回 
其中,我们经常用到的是前三项。 


dbms_metadata包中的get_ddl函数定义: 
FUNCTION get_ddl ( object_type IN VARCHAR2, 
name IN VARCHAR2, 
schema IN VARCHAR2 DEFAULT NULL, 
version IN VARCHAR2 DEFAULT 'COMPATIBLE', 
model IN VARCHAR2 DEFAULT 'ORACLE', 
transform. IN VARCHAR2 DEFAULT 'DDL') RETURN CLOB; 

注意: 
1、如果使用sqlplus需要进行下列格式化,特别需要对long进行设置,否则无法显示完整的SQL 
2、参数要使用大写,否则会查不到 
set linesize 400     
set pages 0 
set long 10000
1、查看数据库表的定义写法: 

 

select dbms_metadata.get_ddl('TABLE','TABLENAME','USERNAME'from dual;  


2、查看索引的SQL 

select dbms_metadata.get_ddl('INDEX','INDEXNAME','USERNAME'from dual; 


3、查看创建主键的SQL 

SELECT DBMS_METADATA.GET_DDL('CONSTRAINT','CONSTRAINTNAME','USERNAME'FROM DUAL;  


4、查看创建外键的SQL 

SELECT DBMS_METADATA.GET_DDL('REF_CONSTRAINT','REF_CONSTRAINTNAME','USERNAME'FROM DUAL;  


5、查看创建视图的SQL 

SELECT DBMS_METADATA.GET_DDL('VIEW','VIEWNAME','USERNAME'FROM DUAL; 


6、查看用户的SQL 

SELECT DBMS_METADATA.GET_DDL('USER','USERNAME'FROM DUAL; 


7、查看角色的SQL 

SELECT DBMS_METADATA.GET_DDL('ROLE','ROLENAME'FROM DUAL; 


8、查看表空间的SQL 

 

SELECT DBMS_METADATA.GET_DDL('TABLESPACE','TABLESPACENAME'FROM DUAL; 


9、获取物化视图SQL 

select dbms_metadata.get_ddl('MATERIALIZED VIEW','MVNAME'FROM DUAL; 


10、获取远程连接定义SQL 

SELECT dbms_metadata.get_ddl('DB_LINK','DBLINKNAME','USERNAME') stmt FROM dual 


11、获取用户下的触发器SQL 

SELECT DBMS_METADATA.GET_DDL('TRIGGER','TRIGGERNAME','USERNAME) FROM DUAL; 


12、获取用户下的序列 

select DBMS_METADATA.GET_DDL('SEQUENCE','SEQUENCENAME'from  DUAL; 


13、获取用户下的函数 

select DBMS_METADATA.GET_DDL('FUNCTION','FUNCTIONNAME','USERNAME'from DUAL 


14、获取包的定义 

select DBMS_METADATA.GET_DDL('PACKAGE','PACKAGENAME','USERNAME'from  dual 


15、获取存储过程 

select DBMS_METADATA.GET_DDL('PROCEDURE','PROCEDURENAME','USERNAME'from  dual 


16、获取包体定义 

select DBMS_METADATA.GET_DDL('PACKAGE BODY','PACKAGEBODYNAME','USERNAME'from  dual 


17、获取远程数据库对象的定义 

SELECT DBMS_LOB.SUBSTR@dblinkname(DBMS_METADATA.GET_DDL@dblinkname('TABLE''TABLENAME''USERNAME')) FROM DUAL@dblinkname 


18、获取多个对象的定义 

SELECT DBMS_METADATA.GET_DDL(O.OBJECT_TYPE, O.object_name,O.OWNER) 

FROM DBA_OBJECTS O 

where O.OBJECT_TYPE IN ('TABLE','INDEX','PROCEDURE','FUNCTION'and ONWER = 'ONWERNAME';  

实例:

SELECT DBMS_METADATA.GET_DDL('VIEW','DBA_TAB_COLS','SYS'FROM DUAL;

备注:

Q:什么是-元数据-

A:元数据(MetaData),即定义数据的数据。

      打个比方,就好像我们要想搜索一首歌(歌本身是数据),而我们可以通过歌名,作者,专辑等信息来搜索,那么这些歌名,作者,专辑等等就是这首歌的元数据。

      数据库的元数据就是一些注明数据库信息的数据。

你可能感兴趣的:(mysql,sql,oracle,sqlserver)