0

0

SQL数据校验规则怎么写_一致性检查SQL设计【技巧】

冰川箭仙

冰川箭仙

发布时间:2025-12-24 22:52:02

|

567人浏览过

|

来源于php中文网

原创

sql数据校验规则怎么写_一致性检查sql设计【技巧】

SQL数据校验规则的核心是“用查询说话”,不是靠人工肉眼比对,而是通过可执行、可复用的SQL语句主动暴露不一致。重点在于:明确校验目标(字段级?关联级?业务逻辑级?)、选择合适检查方式(COUNT对比、LEFT JOIN找缺失、NOT EXISTS找异常、聚合+CASE做条件统计),并让结果直接返回问题记录或汇总指标。

字段值一致性校验(同一表内)

检查某字段是否符合预设取值范围、非空约束或格式规范。例如:用户表中status只能是'active'、'inactive'、'pending',且不能为空:

  • 查非法值:SELECT user_id, status FROM users WHERE status NOT IN ('active', 'inactive', 'pending') OR status IS NULL;
  • 查空值占比(用于评估严重性):SELECT COUNT(*) FILTER (WHERE status IS NULL) * 100.0 / COUNT(*) AS null_pct FROM users;
  • 查常见格式问题(如手机号含字母):SELECT phone FROM users WHERE phone !~ '^[0-9]{11}$';(PostgreSQL正则写法,MySQL可用REGEXP)

主外键关联一致性校验(跨表)

验证子表记录是否都在父表中有对应主键,避免“孤儿数据”。例如:订单表orderscustomer_id必须存在于客户表customers中:

viable
viable

基于GPT-4的AI非结构化数据分析平台

下载
  • 找所有无效外键:SELECT o.order_id, o.customer_id FROM orders o LEFT JOIN customers c ON o.customer_id = c.customer_id WHERE c.customer_id IS NULL;
  • 快速统计不一致数量:SELECT COUNT(*) FROM orders o WHERE NOT EXISTS (SELECT 1 FROM customers c WHERE c.customer_id = o.customer_id);
  • 反向检查(哪些客户无订单):SELECT c.customer_id FROM customers c WHERE NOT EXISTS (SELECT 1 FROM orders o WHERE o.customer_id = c.customer_id);(属于完整性补全类校验)

业务逻辑一致性校验(多条件组合)

反映真实业务规则,往往需JOIN+聚合+条件判断。例如:“已发货订单的发货日期不能早于下单日期”:

  • 直接定位违规记录:SELECT order_id, order_date, ship_date FROM orders WHERE status = 'shipped' AND ship_date
  • 按天统计异常量(便于监控趋势):SELECT DATE(ship_date) AS day, COUNT(*) AS bad_ships FROM orders WHERE status = 'shipped' AND ship_date
  • 检查金额平衡(如订单总金额 = 各明细行金额之和):SELECT o.order_id FROM orders o JOIN (SELECT order_id, SUM(amount) AS line_total FROM order_items GROUP BY order_id) i ON o.order_id = i.order_id WHERE o.total_amount != i.line_total;

校验结果可读 & 可运维

生产环境的校验SQL不是跑一次就丢,要能被定时任务调用、被监控系统识别、被业务方看懂:

  • 每条校验SQL开头加注释说明目的,例如:-- 校验:订单状态为'shipped'时,shipping_address_id 必须非空
  • 返回结构统一:至少包含check_nameerror_countsample_ids(用STRING_AGG或GROUP_CONCAT取前5个ID)
  • 避免SELECT *,只查关键定位字段;大表加WHERE限制时间范围(如AND create_time >= '2024-01-01')提升响应速度
  • 敏感字段(如身份证、手机号)在校验结果中脱敏显示,例如CONCAT(LEFT(id_card, 3), '****', RIGHT(id_card, 4))

相关专题

更多
数据分析工具有哪些
数据分析工具有哪些

数据分析工具有Excel、SQL、Python、R、Tableau、Power BI、SAS、SPSS和MATLAB等。详细介绍:1、Excel,具有强大的计算和数据处理功能;2、SQL,可以进行数据查询、过滤、排序、聚合等操作;3、Python,拥有丰富的数据分析库;4、R,拥有丰富的统计分析库和图形库;5、Tableau,提供了直观易用的用户界面等等。

673

2023.10.12

SQL中distinct的用法
SQL中distinct的用法

SQL中distinct的语法是“SELECT DISTINCT column1, column2,...,FROM table_name;”。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

319

2023.10.27

SQL中months_between使用方法
SQL中months_between使用方法

在SQL中,MONTHS_BETWEEN 是一个常见的函数,用于计算两个日期之间的月份差。想了解更多SQL的相关内容,可以阅读本专题下面的文章。

344

2024.02.23

SQL出现5120错误解决方法
SQL出现5120错误解决方法

SQL Server错误5120是由于没有足够的权限来访问或操作指定的数据库或文件引起的。想了解更多sql错误的相关内容,可以阅读本专题下面的文章。

1081

2024.03.06

sql procedure语法错误解决方法
sql procedure语法错误解决方法

sql procedure语法错误解决办法:1、仔细检查错误消息;2、检查语法规则;3、检查括号和引号;4、检查变量和参数;5、检查关键字和函数;6、逐步调试;7、参考文档和示例。想了解更多语法错误的相关内容,可以阅读本专题下面的文章。

355

2024.03.06

oracle数据库运行sql方法
oracle数据库运行sql方法

运行sql步骤包括:打开sql plus工具并连接到数据库。在提示符下输入sql语句。按enter键运行该语句。查看结果,错误消息或退出sql plus。想了解更多oracle数据库的相关内容,可以阅读本专题下面的文章。

671

2024.04.07

sql中where的含义
sql中where的含义

sql中where子句用于从表中过滤数据,它基于指定条件选择特定的行。想了解更多where的相关内容,可以阅读本专题下面的文章。

561

2024.04.29

sql中删除表的语句是什么
sql中删除表的语句是什么

sql中用于删除表的语句是drop table。语法为drop table table_name;该语句将永久删除指定表的表和数据。想了解更多sql的相关内容,可以阅读本专题下面的文章。

404

2024.04.29

苹果官网入口直接访问
苹果官网入口直接访问

苹果官网直接访问入口是https://www.apple.com/cn/,该页面具备0.8秒首屏渲染、HTTP/3与Brotli加速、WebP+AVIF双格式图片、免登录浏览全参数等特性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

10

2025.12.24

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
MySQL 教程
MySQL 教程

共48课时 | 1.4万人学习

MySQL 初学入门(mosh老师)
MySQL 初学入门(mosh老师)

共3课时 | 0.3万人学习

简单聊聊mysql8与网络通信
简单聊聊mysql8与网络通信

共1课时 | 769人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号