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

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

背景

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

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

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

相关推荐
找不到、了13 分钟前
MySQL 索引下推(ICP)的实战,彻底提升查询性能
数据库·mysql
b***676414 分钟前
Springboot3 Mybatis-plus 3.5.9
数据库·oracle·mybatis
kitty_hi15 分钟前
mysql主从配置升级,从mysql5.7升级到mysql8.4
linux·数据库·mysql·adb
王宪笙3 小时前
Qt之数据库使用示例
数据库·qt
q***42823 小时前
Redis 设置密码(配置文件、docker容器、命令行3种场景)
数据库·redis·docker
运维行者_3 小时前
网站出现 525 错误(SSL 握手失败)修复指南
服务器·网络·数据库·redis·网络协议·bootstrap·ssl
fruge4 小时前
openGauss数据库实操过程:从环境搭建到连接配置,第三方软件进行数据库管理
数据库·oracle
5***79004 小时前
后端服务监控面板,关键业务指标
数据库
倔强的石头_6 小时前
面向电力生产调度系统的数据库实践:从时序处理到多中心容灾
数据库
q***47186 小时前
MySQL 篇 - Java 连接 MySQL 数据库并实现数据交互
java·数据库·mysql