突然接触庞大的数据库,在没有数据字典的情况下如何快速找到自己想要的字段?

突然接触庞大的数据库,在没有数据字典的情况下如何快速找到自己想要的字段?

背景

在很多公司,尤其是中小型的公司,他们可能并未维护数据字典,当初次接触这个庞大的数据库时,一定会面临找不到自己想要的字段的情况,为工作带来诸多不便。那么我们如何才能在没有数据字典的情况下,快速找到自己想要的字段呢?

答案就是利用数据库中的统计视图,这一类视图不管是在Oracle、MySQL或者SQLServer中都存在,基本大部分结构化数据库,都有这样的视图,它们记录着数据库的很多基础信息,我们利用这些视图,基本可以快速找到自己想要的字段。

问题描述

  • 我知道某个字段的业务含义或者业务命名或者可能的字段名,我该如何找快速找到数据库中对应的表和字段呢?

MySQL解决方法

在MySQL中,您可以使用以下方法来查询某个字段是否存在于数据库中的某个表中,或者查询数据库中是否有备注(注释)与您要查询的字段名字类似。

1. 查询字段是否存在于数据库中的某个表中

您可以查询information_schema数据库中的COLUMNS表来检查字段是否存在于某个表中。

查询特定字段是否存在于某个数据库中的任意表:
sql 复制代码
SELECT TABLE_NAME, COLUMN_NAME
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = 'your_database_name' AND COLUMN_NAME = 'your_column_name';
查询特定字段是否存在于某个特定表中:
sql 复制代码
SELECT TABLE_NAME, COLUMN_NAME
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = 'your_database_name' AND TABLE_NAME = 'your_table_name' AND COLUMN_NAME = 'your_column_name';

2. 查询数据库中是否有备注与字段名字类似

您可以查询information_schema数据库中的COLUMNS表,检查备注(注释)中是否包含特定的字段名字。

查询备注中包含特定字段名字的列:
sql 复制代码
SELECT TABLE_NAME, COLUMN_NAME, COLUMN_COMMENT
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = 'your_database_name' AND COLUMN_COMMENT LIKE '%your_column_name%';

3. 综合查询字段存在性及备注

您可以结合上述查询,检查字段是否存在以及备注是否包含特定字段名字。

综合查询示例:
sql 复制代码
SELECT TABLE_NAME, COLUMN_NAME, COLUMN_COMMENT
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = 'your_database_name' 
  AND (COLUMN_NAME = 'your_column_name' OR COLUMN_COMMENT LIKE '%your_column_name%');

示例

假设您要查询数据库my_database中是否存在字段my_field,或者备注中包含my_field的字段,可以使用以下SQL语句:

sql 复制代码
SELECT TABLE_NAME, COLUMN_NAME, COLUMN_COMMENT
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = 'my_database' 
  AND (COLUMN_NAME = 'my_field' OR COLUMN_COMMENT LIKE '%my_field%');

通过这些查询,您可以有效地检查数据库中某个字段是否存在,以及备注中是否包含与字段名字类似的信息。根据实际需求进行调整和优化查询语句。

SQLServer解决方法

在SQL Server中,您可以使用系统视图和元数据表来查询某个字段是否存在于数据库中的某个表中,或者查询数据库中是否有备注(注释)与您要查询的字段名字类似。以下是具体的方法:

1. 查询字段是否存在于数据库中的某个表中

您可以查询INFORMATION_SCHEMA.COLUMNS视图来检查字段是否存在于某个表中。

查询特定字段是否存在于某个数据库中的任意表:
sql 复制代码
SELECT TABLE_NAME, COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_CATALOG = 'your_database_name' AND COLUMN_NAME = 'your_column_name';
查询特定字段是否存在于某个特定表中:
sql 复制代码
SELECT TABLE_NAME, COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_CATALOG = 'your_database_name' AND TABLE_NAME = 'your_table_name' AND COLUMN_NAME = 'your_column_name';

2. 查询数据库中是否有备注与字段名字类似

您可以查询sys.columns视图和sys.extended_properties视图,检查备注(注释)中是否包含特定的字段名字。

查询备注中包含特定字段名字的列:
sql 复制代码
SELECT 
    t.name AS table_name,
    c.name AS column_name,
    ep.value AS column_comment
FROM 
    sys.tables AS t
INNER JOIN 
    sys.columns AS c ON t.object_id = c.object_id
LEFT JOIN 
    sys.extended_properties AS ep ON t.object_id = ep.major_id AND c.column_id = ep.minor_id
WHERE 
    ep.name = 'MS_Description' AND ep.value LIKE '%your_column_name%'
ORDER BY 
    t.name, c.name;

3. 综合查询字段存在性及备注

您可以结合上述查询,检查字段是否存在以及备注是否包含特定字段名字。

综合查询示例:
sql 复制代码
SELECT 
    t.name AS table_name,
    c.name AS column_name,
    ep.value AS column_comment
FROM 
    sys.tables AS t
INNER JOIN 
    sys.columns AS c ON t.object_id = c.object_id
LEFT JOIN 
    sys.extended_properties AS ep ON t.object_id = ep.major_id AND c.column_id = ep.minor_id
WHERE 
    (c.name = 'your_column_name' OR (ep.name = 'MS_Description' AND ep.value LIKE '%your_column_name%'))
ORDER BY 
    t.name, c.name;

示例

假设您要查询数据库my_database中是否存在字段my_field,或者备注中包含my_field的字段,可以使用以下SQL语句:

sql 复制代码
USE my_database;

SELECT 
    t.name AS table_name,
    c.name AS column_name,
    ep.value AS column_comment
FROM 
    sys.tables AS t
INNER JOIN 
    sys.columns AS c ON t.object_id = c.object_id
LEFT JOIN 
    sys.extended_properties AS ep ON t.object_id = ep.major_id AND c.column_id = ep.minor_id
WHERE 
    (c.name = 'my_field' OR (ep.name = 'MS_Description' AND ep.value LIKE '%my_field%'))
ORDER BY 
    t.name, c.name;

通过这些查询,您可以有效地检查数据库中某个字段是否存在,以及备注中是否包含与字段名字类似的信息。根据实际需求进行调整和优化查询语句。

Oracle解决方法

在Oracle数据库中,您可以使用数据字典视图来查询某个字段是否存在于数据库中的某个表中,或者查询数据库中是否有备注(注释)与您要查询的字段名字类似。以下是具体的方法:

1. 查询字段是否存在于数据库中的某个表中

您可以查询ALL_TAB_COLUMNS视图来检查字段是否存在于某个表中。

查询特定字段是否存在于某个数据库中的任意表:
sql 复制代码
SELECT TABLE_NAME, COLUMN_NAME
FROM ALL_TAB_COLUMNS
WHERE COLUMN_NAME = 'YOUR_COLUMN_NAME';
查询特定字段是否存在于某个特定表中:
sql 复制代码
SELECT TABLE_NAME, COLUMN_NAME
FROM ALL_TAB_COLUMNS
WHERE TABLE_NAME = 'YOUR_TABLE_NAME' AND COLUMN_NAME = 'YOUR_COLUMN_NAME';

2. 查询数据库中是否有备注与字段名字类似

您可以查询ALL_COL_COMMENTS视图,检查备注(注释)中是否包含特定的字段名字。

查询备注中包含特定字段名字的列:
sql 复制代码
SELECT TABLE_NAME, COLUMN_NAME, COMMENTS
FROM ALL_COL_COMMENTS
WHERE COMMENTS LIKE '%YOUR_COLUMN_NAME%';

3. 综合查询字段存在性及备注

您可以结合上述查询,检查字段是否存在以及备注是否包含特定字段名字。

综合查询示例:
sql 复制代码
SELECT 
    c.TABLE_NAME, 
    c.COLUMN_NAME, 
    com.COMMENTS
FROM 
    ALL_TAB_COLUMNS c
LEFT JOIN 
    ALL_COL_COMMENTS com
ON 
    c.TABLE_NAME = com.TABLE_NAME AND c.COLUMN_NAME = com.COLUMN_NAME
WHERE 
    c.COLUMN_NAME = 'YOUR_COLUMN_NAME' 
    OR com.COMMENTS LIKE '%YOUR_COLUMN_NAME%';

示例

假设您要查询数据库中是否存在字段MY_FIELD,或者备注中包含MY_FIELD的字段,可以使用以下SQL语句:

sql 复制代码
SELECT 
    c.TABLE_NAME, 
    c.COLUMN_NAME, 
    com.COMMENTS
FROM 
    ALL_TAB_COLUMNS c
LEFT JOIN 
    ALL_COL_COMMENTS com
ON 
    c.TABLE_NAME = com.TABLE_NAME AND c.COLUMN_NAME = com.COLUMN_NAME
WHERE 
    c.COLUMN_NAME = 'MY_FIELD' 
    OR com.COMMENTS LIKE '%MY_FIELD%';

通过这些查询,您可以有效地检查数据库中某个字段是否存在,以及备注中是否包含与字段名字类似的信息。根据实际需求进行调整和优化查询语句。

相关推荐
CoderIsArt36 分钟前
Redis的三种模式:主从模式,哨兵与集群模式
数据库·redis·缓存
师太,答应老衲吧3 小时前
SQL实战训练之,力扣:2020. 无流量的帐户数(递归)
数据库·sql·leetcode
Channing Lewis4 小时前
salesforce case可以新建一个roll up 字段,统计出这个case下的email数量吗
数据库·salesforce
毕业设计制作和分享5 小时前
ssm《数据库系统原理》课程平台的设计与实现+vue
前端·数据库·vue.js·oracle·mybatis
ketil275 小时前
Redis - String 字符串
数据库·redis·缓存
Hsu_kk6 小时前
MySQL 批量删除海量数据的几种方法
数据库·mysql
编程学无止境6 小时前
第02章 MySQL环境搭建
数据库·mysql
knight-n6 小时前
MYSQL库的操作
数据库·mysql
包饭厅咸鱼7 小时前
QML----复制指定下标的ListModel数据
开发语言·数据库
生命几十年3万天7 小时前
redis时间优化
数据库·redis·缓存