SQL基础操作_3_数据字典(涵盖SQL Server、Oracle、Mysql常见系统数据字典)
目錄
數(shù)據(jù)庫元數(shù)據(jù)查詢
7.5.1 列出模式中所有的表
7.5.2 列出所有的數(shù)據(jù)庫
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ù)庫里的所有對(duì)象
? ? ? ? ? ? ? ? ? ? ? ? ? ?數(shù)據(jù)庫元數(shù)據(jù)查詢
注:數(shù)據(jù)集和表結(jié)構(gòu)見?SQL基礎(chǔ)操作_1_檢索數(shù)據(jù)7.5.1 列出模式中所有的表
需求:查詢給定模式下創(chuàng)建的所有表和創(chuàng)建時(shí)間。
解決方法:通過各個(gè)數(shù)據(jù)庫里提供的系統(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ù)庫
需求:查詢給當(dāng)前數(shù)據(jù)庫實(shí)例下所有的數(shù)據(jù)庫名和創(chuàng)建時(shí)間。
解決方法:通過各個(gè)數(shù)據(jù)庫里提供的與數(shù)據(jù)庫相關(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ù)庫概念跟Sql Server略有不同,oracle里一個(gè)數(shù)據(jù)庫對(duì)應(yīng)多個(gè)實(shí)例,當(dāng)然在Sql Server里也可以安裝多個(gè)實(shí)例。不過一般不這么做。Oralce里的用戶類似于Sql Server里的數(shù)據(jù)庫,即一個(gè)用戶下可能會(huì)有很多表。所以當(dāng)前命題可以查詢當(dāng)前實(shí)例里的用戶名。
注: 這里關(guān)于oracle的數(shù)據(jù)庫、數(shù)據(jù)庫實(shí)例、表空間、表、用戶沒有做過多的展開。簡(jiǎn)單的說一個(gè)數(shù)據(jù)庫可以對(duì)應(yīng)多個(gè)數(shù)據(jù)庫實(shí)例,而一個(gè)數(shù)據(jù)庫實(shí)例對(duì)應(yīng)多個(gè)表空間,每個(gè)表空間對(duì)應(yīng)多個(gè)用戶和數(shù)據(jù)庫文件。一個(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ù)庫、實(shí)例、表空間、用戶、表分析參考來源 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ù)庫里提供的與數(shù)據(jù)庫相關(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ù)庫的注釋方式,如下做個(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來對(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ù)庫里提供的與索引相關(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ù)庫里提供的與外鍵約束相關(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 這里說的主外鍵約束對(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ù)庫里提供的與外鍵約束相關(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 NULLOracle:
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ù)庫里提供的與檢查約束(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í)無法查閱。
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ù)庫里提供的與默認(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 NULLOracle:
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 NULL7.5.9 列出給定表的所有約束
需求:查詢出給定的表emp的相關(guān)的約束信息。
解決方法:通過各個(gè)數(shù)據(jù)庫里提供的與約束相關(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ù)庫對(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ù)庫對(duì)象類型這列為自己添加的備注。
Mysql:注意mysql內(nèi)并無同一視圖可以滿足上述需求。
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ù)庫里的所有對(duì)象
需求:查詢出給定的數(shù)據(jù)庫里的所有對(duì)象的信息。
解決方法:通過各個(gè)數(shù)據(jù)庫里提供的數(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:暫無相關(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)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 检测人员有什么样的重要性呢
- 下一篇: 现代坦克的防护系统应该有什么