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

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

背景

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

答案就是利用数据库中的统计视图,这一类视图不管是在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%';

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

相关推荐
White_Mountain1 分钟前
在Ubuntu中配置mysql,并允许外部访问数据库
数据库·mysql·ubuntu
Code apprenticeship2 分钟前
怎么利用Redis实现延时队列?
数据库·redis·缓存
百度智能云技术站6 分钟前
广告投放系统成本降低 70%+,基于 Redis 容量型数据库 PegaDB 的方案设计和业务实践
数据库·redis·oracle
装不满的克莱因瓶8 分钟前
【Redis经典面试题六】Redis的持久化机制是怎样的?
java·数据库·redis·持久化·aof·rdb
梦想平凡2 小时前
PHP 微信棋牌开发全解析:高级教程
android·数据库·oracle
TianyaOAO2 小时前
mysql的事务控制和数据库的备份和恢复
数据库·mysql
Ewen Seong2 小时前
mysql系列5—Innodb的缓存
数据库·mysql·缓存
码农老起3 小时前
企业如何通过TDSQL实现高效数据库迁移与性能优化
数据库·性能优化
夏木~4 小时前
Oracle 中什么情况下 可以使用 EXISTS 替代 IN 提高查询效率
数据库·oracle
W21554 小时前
Liunx下MySQL:表的约束
数据库·mysql