You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在MariaDB中检查列是否为其他列的计算结果?

如何识别数据库中由其他列计算生成的列

1. 查询数据库元数据(针对系统定义的计算列)

不同数据库有专门的系统视图或命令,能直接获取计算列的定义逻辑:

SQL Server

执行以下查询,替换'total'为你要检查的列名:

SELECT 
    OBJECT_NAME(c.object_id) AS TableName,
    c.name AS ComputedColumnName,
    cc.definition AS CalculationFormula
FROM sys.columns c
JOIN sys.computed_columns cc ON c.object_id = cc.object_id AND c.column_id = cc.column_id
WHERE c.name = 'total';

结果里的CalculationFormula会显示具体计算逻辑,比如([quantity]*[price]),你可以直接整理成total.TableName = quantity.TableName * price.TableName的格式。

MySQL/MariaDB

用下面的语句查询,同样替换目标列名:

SELECT 
    TABLE_NAME AS TableName,
    COLUMN_NAME AS ComputedColumnName,
    COLUMN_DEFAULT AS CalculationFormula
FROM information_schema.COLUMNS
WHERE COLUMN_NAME = 'total'
  AND EXTRA LIKE '%GENERATED%';

COLUMN_DEFAULT字段会存储计算表达式,比如(quantity * price)。

PostgreSQL

PostgreSQL的生成列可以通过以下语句查询:

SELECT 
    c.table_name AS TableName,
    c.column_name AS ComputedColumnName,
    pg_get_expr(attgenerated, attrelid) AS CalculationFormula
FROM information_schema.columns c
JOIN pg_attribute a ON c.table_name = relname(a.attrelid) 
    AND c.column_name = a.attname
WHERE c.column_name = 'total'
  AND a.attgenerated != '';

返回的CalculationFormula就是计算规则,比如(quantity * price)。

2. 手动验证数据一致性(针对应用层写入的计算值)

如果该列不是数据库层面定义的计算列,而是应用程序写入的结果,就需要验证所有行是否符合假设的计算逻辑:

-- 示例(适用于多数数据库,语法可微调)
SELECT 
    'total.' || table_name || ' = quantity.' || table_name || ' * price.' || table_name AS CalculationRule
FROM your_table_name
WHERE total != quantity * price
HAVING COUNT(*) = 0;

如果查询能返回结果,说明所有行都满足total = quantity * price,可以确认该列由这两列计算而来。

内容的提问来源于stack exchange,提问作者nghiax

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 03:52:37