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

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

背景

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

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

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

相关推荐
YGGP33 分钟前
【每日八股】Redis篇(二):数据结构
数据结构·数据库·redis
愉悦的麻婆豆腐44 分钟前
Neo4j使用neo4j-admin导入csv数据方法
数据库·neo4j
夜泉_ly4 小时前
MySQL -安装与初识
数据库·mysql
qq_529835355 小时前
对计算机中缓存的理解和使用Redis作为缓存
数据库·redis·缓存
月光水岸New7 小时前
Ubuntu 中建的mysql数据库使用Navicat for MySQL连接不上
数据库·mysql·ubuntu
狄加山6757 小时前
数据库基础1
数据库
我爱松子鱼7 小时前
mysql之规则优化器RBO
数据库·mysql
chengooooooo7 小时前
苍穹外卖day8 地址上传 用户下单 订单支付
java·服务器·数据库
Rverdoser8 小时前
【SQL】多表查询案例
数据库·sql
Galeoto9 小时前
how to export a table in sqlite, and import into another
数据库·sqlite