日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > 数据库 >内容正文

数据库

SQL基础操作_3_数据字典(涵盖SQL Server、Oracle、Mysql常见系统数据字典)

發(fā)布時(shí)間:2024/9/27 数据库 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SQL基础操作_3_数据字典(涵盖SQL Server、Oracle、Mysql常见系统数据字典) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

目錄

數(shù)據(jù)庫(kù)元數(shù)據(jù)查詢

7.5.1 列出模式中所有的表

7.5.2 列出所有的數(shù)據(jù)庫(kù)

7.5.3 列出給定表的基本信息

7.5.4 列出給定表的索引信息

7.5.5 列出給定表的主鍵、外鍵約束

7.5.6 列出給定表的外鍵引用

7.5.7 列出給定表的檢查約束

7.5.8 列出給定表的默認(rèn)約束

7.5.9 列出給定表的所有約束

7.5.10 列出數(shù)據(jù)庫(kù)里的所有對(duì)象


? ? ? ? ? ? ? ? ? ? ? ? ? ?數(shù)據(jù)庫(kù)元數(shù)據(jù)查詢

注:數(shù)據(jù)集和表結(jié)構(gòu)見?SQL基礎(chǔ)操作_1_檢索數(shù)據(jù)

7.5.1 列出模式中所有的表

需求:查詢給定模式下創(chuàng)建的所有表和創(chuàng)建時(shí)間。

解決方法:通過各個(gè)數(shù)據(jù)庫(kù)里提供的系統(tǒng)視圖查詢。

Sql Server:

USE Shenl; GO SELECT TABLE_NAME FROM INFORMATION_SCHEMA.tables WHERE TABLE_TYPE='BASE TABLE'

或:

SELECT NAME as table_name FROM SYSOBJECTS WHERE XTYPE='U' ORDER BY NAME

或:

SELECT name as table_name,create_date as create_time FROM [sys].[all_objects] WHERE type='U' AND is_ms_shipped=0 ORDER BY NAME

執(zhí)行結(jié)果:

Database_Name

Create_time

master

2003-04-08 09:13:36.390

tempdb

2017-04-16 09:36:02.723

model

2003-04-08 09:13:36.390

msdb

2014-02-20 20:49:38.857

ReportServer

2017-03-19 09:58:21.533

ReportServerTempDB

2017-03-19 09:58:22.640

AdventureWorks2014

2017-03-19 15:34:10.683

AdventureWorksDW2014

2017-03-19 15:39:02.770

Shenl

2017-04-11 12:57:23.723

Mysql:

use shenl; SELECT TABLE_NAME,CREATE_TIME,TABLE_COMMENT FROM INFORMATION_SCHEMA.tables WHERE TABLE_TYPE='BASE TABLE' AND TABLE_SCHEMA='shenl' ORDER BY TABLE_COMMENT DESC

執(zhí)行結(jié)果:

TABLE_NAME

CREATE_TIME

TABLE_COMMENT

emp

2017/4/16 9:14:40

雇員表

dept

2017/4/16 9:14:39

部門表

salgrade

2017/4/16 9:14:41

工資等級(jí)表

bonus

2017/4/16 9:14:41

獎(jiǎng)金表

Oracle:

SELECT TABLE_NAME FROM USER_TABLES; SELECT TABLE_NAME FROM ALL_TABLES WHERE OWNER='SHENL;SELECT OBJECT_NAME ,CREATED FROM ALL_OBJECTS WHERE OBJECT_TYPE='TABLE' AND OWNER='SHENL' ORDER BY CREATED DESC

執(zhí)行結(jié)果:

table_name

create_time

TMP_V

2017/3/31 18:49:06

SALGRADE

2017/3/27 15:25:47

BONUS

2017/3/27 15:25:47

DEPT

2017/3/27 15:25:46

EMP

2017/3/27 15:25:44

7.5.2 列出所有的數(shù)據(jù)庫(kù)

需求:查詢給當(dāng)前數(shù)據(jù)庫(kù)實(shí)例下所有的數(shù)據(jù)庫(kù)名和創(chuàng)建時(shí)間。

解決方法:通過各個(gè)數(shù)據(jù)庫(kù)里提供的與數(shù)據(jù)庫(kù)相關(guān)的數(shù)據(jù)字典進(jìn)行查詢。

SqlServer:

SELECT NAME AS Database_Name,create_date AS Create_time FROM sys.databases

執(zhí)行結(jié)果:

Database_Name

Create_time

master

2003-04-08 09:13:36.390

tempdb

2017-04-16 09:36:02.723

model

2003-04-08 09:13:36.390

msdb

2014-02-20 20:49:38.857

ReportServer

2017-03-19 09:58:21.533

ReportServerTempDB

2017-03-19 09:58:22.640

AdventureWorks2014

2017-03-19 15:34:10.683

AdventureWorksDW2014

2017-03-19 15:39:02.770

Shenl

2017-04-11 12:57:23.723

Oracle:

Oracle里的數(shù)據(jù)庫(kù)概念跟Sql Server略有不同,oracle里一個(gè)數(shù)據(jù)庫(kù)對(duì)應(yīng)多個(gè)實(shí)例,當(dāng)然在Sql Server里也可以安裝多個(gè)實(shí)例。不過一般不這么做。Oralce里的用戶類似于Sql Server里的數(shù)據(jù)庫(kù),即一個(gè)用戶下可能會(huì)有很多表。所以當(dāng)前命題可以查詢當(dāng)前實(shí)例里的用戶名。

注: 這里關(guān)于oracle的數(shù)據(jù)庫(kù)、數(shù)據(jù)庫(kù)實(shí)例、表空間、表、用戶沒有做過多的展開。簡(jiǎn)單的說(shuō)一個(gè)數(shù)據(jù)庫(kù)可以對(duì)應(yīng)多個(gè)數(shù)據(jù)庫(kù)實(shí)例,而一個(gè)數(shù)據(jù)庫(kù)實(shí)例對(duì)應(yīng)多個(gè)表空間,每個(gè)表空間對(duì)應(yīng)多個(gè)用戶和數(shù)據(jù)庫(kù)文件。一個(gè)用戶可以創(chuàng)建多個(gè)表。見下圖示意:

select name from v$database; select USERNAME,Created AS Create_time from dba_users;

執(zhí)行結(jié)果:

USERNAME

Create_time

Sys

2003-04-08 09:13:36.390

Scott

2003-04-16 09:36:02.723

Shenl

2003-04-08 09:13:36.390

注:

1 oralce數(shù)據(jù)庫(kù)、實(shí)例、表空間、用戶、表分析參考來(lái)源 http://blog.csdn.net/haiross/article/details/20357675

2 用戶數(shù)據(jù)較多,這里用…省略。

Mysql:

show databases -- 或 SELECT SCHEMA_NAME FROM information_schema.SCHEMATA

執(zhí)行結(jié)果:? ? ? ??

SCHEMA_NAME

information_schema

mysql

performance_schema

shenl

7.5.3 列出給定表的基本信息

需求:查詢出給定的表dept,emp,bonus,salgrade里的表名,字段名、字段類型、字段注釋、表注釋信息。

解決方法:通過各個(gè)數(shù)據(jù)庫(kù)里提供的與數(shù)據(jù)庫(kù)相關(guān)的數(shù)據(jù)字典進(jìn)行查詢。

Oracle:

SELECT B.TABLE_NAME,B.COLUMN_NAME,B.DATA_TYPE,A.COMMENTSAS Table_Comm ,C.COMMENTSASColumn_Comm from user_tab_comments A JOIN user_tab_columns B ON A.TABLE_NAME = B.TABLE_NAME JOIN user_col_comments C ON B.TABLE_NAME = C.TABLE_NAME AND B.COLUMN_NAME = C.COLUMN_NAME WHERE A.TABLE_NAME IN ('DEPT','EMP','BONUS','SALGRADE')

Mysql:

SELECT A.TABLE_NAME,A.COLUMN_NAME,A.DATA_TYPE,B.TABLE_COMMENTAS Table_Comm,A.COLUMN_COMMENT AS Column_Comm FROM INFORMATION_SCHEMA.COLUMNS A JOIN INFORMATION_SCHEMA.TABLES B ON A.TABLE_NAME = B.TABLE_NAME WHERE A.TABLE_SCHEMA='SHENL' AND A.TABLE_NAME IN('DEPT','EMP','BONUS','SALGRADE')

SqlServer:

USE Shenl; GO SELECTA.name AS table_name,B.name AS column_name,C.name AS data_type,D.value AS column_comm FROM sys.tables A INNER JOIN ( SELECT B.object_id,NULL AS name,NULL AS user_type_id,0 as column_id FROMsys.tables A INNER JOIN sys.columns BON B.object_id= A.object_idWHERE A.name IN ('dept','emp','bonus','salgrade') AND column_id = 1 UNION SELECT object_id,name,user_type_id,column_id FROM sys.columns )BON B.object_id= A.object_id LEFT JOIN sys.systypes C ON B.user_type_id= C.xtype INNER JOIN sys.extended_properties DON D.major_id= B.object_id ANDD.minor_id = B.column_id WHERE A.name IN ('dept','emp','bonus','salgrade') ORDER BY A.name-- 或:USE Shenl; GO SELECT table_name,column_name,data_type,column_comm,F.value as table_comm FROM ( SELECT A.object_id AS Object_id,A.name AS table_name,B.name AS column_name,C.name AS data_type,D.value AS column_comm FROM sys.tables A INNER JOIN sys.columns BON B.object_id= A.object_id LEFT JOIN sys.systypes C ON B.user_type_id= C.xtype INNER JOIN sys.extended_properties DON D.major_id= B.object_id ANDD.minor_id = B.column_id WHERE A.name IN ('dept','emp','bonus','salgrade') )E JOIN ( SELECT major_id,value FROM sys.extended_propertiesA JOIN sys.tables B ON A.major_id= B.object_id AND B.name IN ('dept','emp','bonus','salgrade') AND A.minor_id = 0 )F ON E.object_id= F.major_id

執(zhí)行結(jié)果:

table_name

column_name

data_type

column_comm

table_comm

dept

deptno

int

部門編號(hào)

部門表

dept

dname

varchar

部門名稱

部門表

dept

loc

varchar

部門所在位置

部門表

emp

empno

int

雇員編號(hào)

雇員表

emp

ename

varchar

雇員名稱

雇員表

emp

job

varchar

雇員職位

雇員表

emp

mgr

int

雇員對(duì)應(yīng)的領(lǐng)導(dǎo)的編號(hào)

雇員表

emp

hiredate

date

雇員的雇傭日期

雇員表

emp

sal

decimal

雇員的基本工資

雇員表

emp

comm

decimal

獎(jiǎng)金

雇員表

emp

deptno

int

所在部門

雇員表

salgrade

grade

int

工資等級(jí)

工資等級(jí)表

salgrade

losal

int

此等級(jí)的最低工資

工資等級(jí)表

salgrade

hisal

int

此等級(jí)的最高工資

工資等級(jí)表

bonus

ename

varchar

雇員姓名

獎(jiǎng)金表

bonus

job

varchar

雇員職位

獎(jiǎng)金表

bonus

sal

decimal

雇員工資

獎(jiǎng)金表

bonus

comm

decimal

雇員資金

獎(jiǎng)金表

注:

1 sql server里的第一種實(shí)現(xiàn)方式是將表的注釋作為一行,其它字段如(column_name、data_type)均以NULL值顯示。

2 如果不了解各個(gè)數(shù)據(jù)庫(kù)的注釋方式,如下做個(gè)簡(jiǎn)單示例:

Oracle:

comment on table EMP is '雇員表'; comment on column EMP.EMPNO is '雇員的編號(hào),由四位數(shù)字所組成';

Sql Server:

sql server里的注釋存儲(chǔ)在系統(tǒng)表sys.extended_properties中,一般我們通過調(diào)用存儲(chǔ)過程sp_addextendedproperty來(lái)對(duì)表和字段加注釋。

EXECUTE sp_addextendedproperty N'MS_Description',N'獎(jiǎng)金表',N'user',N'dbo',N'table',N'bonus',NULL,NULL EXECUTE sp_addextendedproperty N'MS_Description',N'雇員姓名',N'user',N'dbo',N'table',N'bonus',N'column',N'ename'

Mysql:

ALTER TABLE `EMP` COMMENT '雇員表'; ALTER TABLE `EMP` MODIFY COLUMN `empno` COMMENT '雇員編號(hào)';

7.5.4 列出給定表的索引信息

需求:查詢出給定的表emp的索引信息。

解決方法:通過各個(gè)數(shù)據(jù)庫(kù)里提供的與索引相關(guān)的數(shù)據(jù)字典進(jìn)行查詢。

Oracle:

CREATE INDEX Idx_EMP_EMPNO ON EMP(EMPNO);SELECT table_name,index_name,column_name,column_position FROM sys.all_ind_columns WHERE table_name ='EMP'ANDtable_owner='SHENL';

執(zhí)行結(jié)果:

TABLE_NAME

INDEX_NAME

COLUMN_NAME

COLUMN_POSITION

EMP

IDX_EMP_EMPNO

EMPNO

1

Sql Server:

SELECT a.name AS table_name, b.name AS index_name, d.name AS column_name, c.index_column_id FROM sys.tables a,sys.indexes b,sys.index_columns c,sys.columns d WHERE a.object_id= b.object_idAND b.object_id= c.object_idAND b.index_id= c.index_idAND c.object_id= d.object_idAND c.column_id= d.column_idAND a.name='EMP'

執(zhí)行結(jié)果:

table_name

index_name

column_name

index_column_id

emp

PK__emp__AF4C318A634F478A

empno

1

Mysql:

show indexfrom emp;

7.5.5 列出給定表的主鍵、外鍵約束

需求:查詢出給定的表emp的外鍵約束信息。

解決方法:通過各個(gè)數(shù)據(jù)庫(kù)里提供的與外鍵約束相關(guān)的數(shù)據(jù)字典進(jìn)行查詢。

SqlServer:

SELECT a.table_name, a.CONSTRAINT_NAME, b.COLUMN_NAME, a.CONSTRAINT_TYPE FROM information_schema.table_constraints a, information_schema.key_column_usage b WHERE a.table_name='EMP' -- AND a.table_schema='SHENL' AND a.table_name= b.table_name AND a.table_schema= b.table_schema AND a.constraint_name= b.constraint_name

執(zhí)行結(jié)果:

table_name

CONSTRAINT_NAME

COLUMN_NAME

CONSTRAINT_TYPE

emp

FK__emp__deptno__38996AB5

deptno

FOREIGN KEY

emp

PK__emp__AF4C318A634F478A

empno

PRIMARY KEY

如果只是查主鍵信息可以:

SELECTtab.name AS table_name,idx.name AS pk_name,col.name AS column_name FROMsys.indexes idxJOIN sys.index_columns idxColON idx.object_id= idxCol.object_idAND idx.index_id=idxCol.index_idAND idx.is_primary_key= 1JOIN sys.tables tabON idx.object_id= tab.object_idJOIN sys.columns colON idx.object_id= col.object_idAND idxCol.column_id=col.column_idAND tab.name='EMP'? ??

執(zhí)行結(jié)果:

table_name

pk_name

column_name

emp

PK__emp__AF4C318A634F478A

empno

注:

1 如果想查唯一約束可以將上述高亮處修改為:

ANDidx.is_unique_constraint = 1。

2 默認(rèn)情況下會(huì)在基于主鍵建立個(gè)索引。

3 這里說(shuō)的主外鍵約束對(duì)應(yīng)constraint,一般包括PK、FK、UK即主鍵、外鍵、唯一鍵。而約束一般指的是default、check即默認(rèn)值約束、檢查約束。

Mysql:

SELECT CONSTRAINT_NAME,TABLE_NAME,COLUMN_NAME,REFERENCED_TABLE_NAME,REFERENCED_COLUMN_NAMEFROM INFORMATION_SCHEMA.KEY_COLUMN_USAGEWHERE TABLE_SCHEMA='SHENL' AND TABLE_NAME IN('emp')

Oracle:

SELECT A.CONSTRAINT_NAME,A.TABLE_NAME,A.COLUMN_NAME,B.CONSTRAINT_TYPE FROM USER_CONS_COLUMNS A,USER_CONSTRAINTS B WHERE A.CONSTRAINT_NAME =B.CONSTRAINT_NAMEAND B.CONSTRAINT_TYPEIN('P','R')AND A.TABLE_NAME ='EMP'

7.5.6 列出給定表的外鍵引用

需求:查詢出給定的表emp的外鍵約束信息。

解決方法:通過各個(gè)數(shù)據(jù)庫(kù)里提供的與外鍵約束相關(guān)的數(shù)據(jù)字典進(jìn)行查詢。

SqlServer:

SELECTRefObj.name AS RefTab_Name,fk.name AS Fk_Name,RefCol.name AS RefTab_Column_Name,RefedObj.name AS RefedTab_Name,RefedCol.name AS RefedTab_Column_Name FROM sys.foreign_keys fk JOIN sys.all_objects RefObj ON fk.parent_object_id= RefObj.object_id JOIN sys.all_objects RefedObjON fk.referenced_object_id=RefedObj.object_id JOIN sys.foreign_key_columns fkColsON fk.object_id= fkCols.constraint_object_id JOIN sys.columns RefColON RefObj.object_id= RefCol.object_id AND fkCols.parent_column_id=RefCol.column_id JOIN sys.columns RefedColON RefedObj.object_id= RefedCol.object_id AND fkCols.referenced_column_id=RefedCol.column_id;

執(zhí)行結(jié)果:

RefTab_Name

Fk_Name

RefTab_Column_Name

RefedTab_Name

RefedTab_Column_Name

emp

FK__emp__deptno__38996AB5

deptno

dept

deptno

Mysql:

SELECT CONSTRAINT_NAME,TABLE_NAME,COLUMN_NAME,REFERENCED_TABLE_NAME,REFERENCED_COLUMN_NAMEFROM INFORMATION_SCHEMA.KEY_COLUMN_USAGEWHERE TABLE_SCHEMA='SHENL' AND TABLE_NAME IN('emp') AND REFERENCED_TABLE_NAME IS NOT NULL

Oracle:

SELECT A.CONSTRAINT_NAME,A.TABLE_NAME,A.COLUMN_NAME,B.CONSTRAINT_TYPE FROM USER_CONS_COLUMNS A,USER_CONSTRAINTS B WHERE A.CONSTRAINT_NAME =B.CONSTRAINT_NAMEAND B.CONSTRAINT_TYPEIN('R')AND A.TABLE_NAME ='EMP'

7.5.7 列出給定表的檢查約束

需求:查詢出給定的表emp的檢查約束(check)信息。

解決方法:通過各個(gè)數(shù)據(jù)庫(kù)里提供的與檢查約束(check)相關(guān)的數(shù)據(jù)字典進(jìn)行查詢。

SqlServer:

-- 新增check約束以檢查emp表的enmae字段長(zhǎng)度不超過16 ALTER TABLE EMP DROP CONSTRAINT CK_Emp_Ename; ALTER TABLE EMP ADD CONSTRAINT CK_Emp_Ename CHECK(LEN(ename)<16); SELECT A.name AS CKConstraint_Name,B.name AS Table_Name,C.name AS CKConstraint_ColumnName,A.definition AS DF_Def,A.create_date AS Create_time,A.modify_date AS Modify_time FROM sys.check_constraints A JOIN sys.tables BON A.parent_object_id= B.object_id JOIN sys.columns CON B.object_id= C.object_idAND A.parent_column_id= C.column_id

執(zhí)行結(jié)果:

CKConstraint_Name

Table_Name

CKConstraint_ColumnName

DF_Def

Create_time

Modify_time

CK_Emp_Ename

emp

ename

(len([ename])<(16))

2017-04-19 10:17:41.640

2017-04-19 10:17:41.640

Mysql:

ALTER TABLE EMP ADD CONSTRAINT CK_Emp_Ename CHECK (LEN(ename)<16);

;Mysql數(shù)據(jù)字典里沒有存check約束,所以暫時(shí)無(wú)法查閱。

Oracle:

ALTER TABLE EMP ADD CONSTRAINT CK_Emp_Ename CHECK (LENGTH(ename)<15);SELECT A.CONSTRAINT_NAME,A.TABLE_NAME,A.COLUMN_NAME,B.CONSTRAINT_TYPE FROM USER_CONS_COLUMNS A,USER_CONSTRAINTS B WHERE A.CONSTRAINT_NAME =B.CONSTRAINT_NAMEAND B.CONSTRAINT_TYPEIN('C')AND A.TABLE_NAME ='EMP'

7.5.8 列出給定表的默認(rèn)約束

需求:查詢出給定的表emp的默認(rèn)約束(default)信息。

解決方法:通過各個(gè)數(shù)據(jù)庫(kù)里提供的與默認(rèn)約束(default)相關(guān)的數(shù)據(jù)字典進(jìn)行查詢。

SqlServer:

-- 新增default約束以設(shè)置emp表的comm默認(rèn)值是0 alter table EMP drop constraint DF_EMP_Comm; alter table EMP add constraint DF_EMP_Comm DEFAULT((0)) for comm; alter table EMP with check add constraint DF_EMP_Comm DEFAULT((0)) for comm; alter table EMP with nocheck add constraint DF_EMP_Comm DEFAULT((0)) for comm;SELECT A.name AS DFConstraint_Name,B.name AS Table_Name,C.name AS DFConstraint_ColumnName,A.definition AS DF_Def,A.create_date AS Create_time,A.modify_date AS Modify_time FROM sys.default_constraints A JOIN sys.tables BON A.parent_object_id= B.object_id JOIN sys.columns CON B.object_id= C.object_id AND A.parent_column_id= C.column_id;

執(zhí)行結(jié)果:

DFConstraint_Name

Table_Name

DFConstraint_ColumnName

DF_Def

Create_time

Modify_time

DF_EMP_Comm

emp

comm

((0))

2017-04-19 09:24:14.050

2017-04-19 09:24:14.050

Mysql:

SELECT TABLE_NAME,COLUMN_NAME,COLUMN_DEFAULT FROM information_schema.columns WHERE TABLE_NAME = 'EMP' AND column_default IS NOT NULL

Oracle:

alter table EMP modify comm default 0; SELECT t.COLUMN_NAME,t.nullable,t.data_default FROM USER_TAB_COLS t WHERE TABLE_NAME ='EMP'AND data_default IS NOT NULL

7.5.9 列出給定表的所有約束

需求:查詢出給定的表emp的相關(guān)的約束信息。

解決方法:通過各個(gè)數(shù)據(jù)庫(kù)里提供的與約束相關(guān)的數(shù)據(jù)字典進(jìn)行查詢。

SqlServer:

SELECT B.name AS Constraint_Name,B.type,CASE B.type WHEN 'PK' THEN '主鍵'WHEN 'F'THEN '外鍵'WHEN 'D'THEN '默認(rèn)值約束'WHEN 'C'THEN '檢查約束' END AS ConstaintType_Desc,CASE B.type WHEN 'PK' THEN G.COLUMN_NAMEWHEN 'F' THEN G.COLUMN_NAMEWHEN 'D' THEN E.nameWHEN 'C' THEN F.name END AS Column_name,CASE B.type WHEN 'PK' THEN NULLWHEN 'F' THEN NULLWHEN 'D' THEN C.definitionWHEN 'C' THEN D.definition END AS Define,B.create_date AS Create_Time,B.modify_date AS Modify_TimeFROM sys.all_objects AJOIN sys.all_objects BON A.object_id= B.parent_object_idJOIN sys.default_constraints CON B.parent_object_id= B.parent_object_idJOIN sys.check_constraints DON B.parent_object_id= D.parent_object_idJOIN sys.all_columns EON E.object_id= C.parent_object_idAND C.parent_column_id= E.column_idJOIN sys.all_columns FON F.object_id= D.parent_object_idAND D.parent_column_id= F.column_id LEFT JOIN information_schema.key_column_usage GON B.name= G.CONSTRAINT_NAME WHERE A.NAME='EMP'

執(zhí)行結(jié)果:

Constraint_Name

type

ConstaintType_Desc

Column_name

Define

Create_Time

Modify_Time

PK__emp__AF4C318A634F478A

PK

主鍵

empno

NULL

2017-03-27 16:27:00.583

2017-03-27 16:27:00.583

FK__emp__deptno__38996AB5

F

外鍵

deptno

NULL

2017-03-27 16:27:00.583

2017-03-27 16:27:00.583

DF_EMP_Comm

D

默認(rèn)值約束

comm

((0))

2017-04-19 09:24:14.050

2017-04-19 09:24:14.050

CK_Emp_Ename

C

檢查約束

ename

(len([ename])<(16))

2017-04-19 10:17:41.640

2017-04-19 10:17:41.640

注:

sys.all_objects里的type的枚舉類型有如下:

執(zhí)行結(jié)果:

type

數(shù)據(jù)庫(kù)對(duì)象類型

AF

聚合函數(shù)(CLR)

C

CHECK約束

D

DEFAULT(約束或獨(dú)立)

F

FOREIGNKEY約束

PK

PRIMARYKEY約束

P

SQL存儲(chǔ)過程

PC

程序集(CLR)存儲(chǔ)過程

FN

SQL標(biāo)量函數(shù)

FS

程序集(CLR)標(biāo)量函數(shù)

FT

程序集(CLR)表值函數(shù)

R

規(guī)則(舊式,獨(dú)立)

RF

復(fù)制篩選過程

SN

同義詞

SQ

服務(wù)隊(duì)列

TA

程序集(CLR)DML觸發(fā)器

TR

SQLDML觸發(fā)器

IF

SQL內(nèi)聯(lián)表值函數(shù)

TF

SQL表值函數(shù)

U

表(用戶定義類型)

UQ

UNIQUE約束

V

視圖

X

擴(kuò)展存儲(chǔ)過程

IT

內(nèi)部表

注:數(shù)據(jù)庫(kù)對(duì)象類型這列為自己添加的備注。

Mysql:注意mysql內(nèi)并無(wú)同一視圖可以滿足上述需求。

Oracle:

SELECT A.CONSTRAINT_NAME,A.TABLE_NAME,A.COLUMN_NAME,B.CONSTRAINT_TYPE FROM USER_CONS_COLUMNS A,USER_CONSTRAINTS B WHERE A.CONSTRAINT_NAME =B.CONSTRAINT_NAMEAND A.TABLE_NAME ='EMP'

7.5.10 列出數(shù)據(jù)庫(kù)里的所有對(duì)象

需求:查詢出給定的數(shù)據(jù)庫(kù)里的所有對(duì)象的信息。

解決方法:通過各個(gè)數(shù)據(jù)庫(kù)里提供的數(shù)據(jù)對(duì)象相關(guān)的數(shù)據(jù)字典進(jìn)行查詢。

SqlServer:

SELECT name,object_id,parent_object_id,type,type_desc,create_date,modify_date FROM sys.all_objects WHERE is_ms_shipped = 0

執(zhí)行結(jié)果:

name

object_id

parent_object_id

type

type_desc

create_date

modify_date

tb_marketrecommlog

245575913

0

U

USER_TABLE

2017-03-25 15:05:20.850

2017-03-25 15:05:20.850

dept

885578193

0

U

USER_TABLE

2017-03-27 16:27:00.580

2017-03-27 16:27:00.583

PK__dept__BE2C337D15A7E7E3

901578250

885578193

PK

PRIMARY_KEY_CONSTRAINT

2017-03-27 16:27:00.580

2017-03-27 16:27:00.580

emp

917578307

0

U

USER_TABLE

2017-03-27 16:27:00.580

2017-04-19 10:17:41.640

PK__emp__AF4C318A634F478A

933578364

917578307

PK

PRIMARY_KEY_CONSTRAINT

2017-03-27 16:27:00.583

2017-03-27 16:27:00.583

FK__emp__deptno__38996AB5

949578421

917578307

F

FOREIGN_KEY_CONSTRAINT

2017-03-27 16:27:00.583

2017-03-27 16:27:00.583

salgrade

965578478

0

U

USER_TABLE

2017-03-27 16:27:00.590

2017-03-27 16:27:00.590

bonus

981578535

0

U

USER_TABLE

2017-03-27 16:27:00.593

2017-03-27 16:27:00.593

tmp_v

1557580587

0

V

VIEW

2017-04-12 10:44:00.703

2017-04-12 10:44:00.703

translate

1573580644

0

FN

SQL_SCALAR_FUNCTION

2017-04-12 10:51:52.840

2017-04-12 10:51:52.840

DF_EMP_Comm

1877581727

917578307

D

DEFAULT_CONSTRAINT

2017-04-19 09:24:14.050

2017-04-19 09:24:14.050

CK_Emp_Ename

1893581784

917578307

C

CHECK_CONSTRAINT

2017-04-19 10:17:41.640

2017-04-19 10:17:41.640

f_splitSTR

1909581841

0

TF

SQL_TABLE_VALUED_FUNCTION

2017-04-19 11:25:32.807

2017-04-19 11:25:32.807

Mysql:暫無(wú)相關(guān)視圖可以滿足此需求。

Oracle:

SELECT OBJECT_NAME,OBJECT_TYPE FROM DBA_OBJECTS WHERE OWNER=UPPER('SHENL') ?

總結(jié)

以上是生活随笔為你收集整理的SQL基础操作_3_数据字典(涵盖SQL Server、Oracle、Mysql常见系统数据字典)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。