奇葩系统的数据库处理步骤记录一下

一、合同状态修改

1. 涉及的表与字段

表名 字段 说明
cg_contract_info_01 STATUS 合同状态:DRAFT(草稿)、APPROVED(审核通过)、REJECTED(驳回)
PAPER_BPO_ID 纸质合同号
BPO_ID 合同编号
表名 字段 说明
cg_contract_other_info STATUS 合同状态:DRAFT(草稿)、APPROVED(审核通过)、REJECTED(驳回)
PAPER_BPO_ID 纸质合同号
BPO_ID 合同编号
表名 字段 说明
cg_contract_price STATUS 合同状态:DRAFT(草稿)、APPROVED(审核通过)、REJECTED(驳回)
PAPER_BPO_ID 纸质合同号
BPO_ID 合同编号
表名 字段 说明
ir_bu_stock_busi UPLOAD_FLAG 状态:0(未上传)、1(已上传)
STOCK_BUSI_NR 组批单号

2. 修改语法

UPDATE 表名称
SET 字段 = ‘状态’
WHERE 字段 = ‘字段数据’;

3. 常用合同审批流程查询

表名 用途
cg_contract_info_01 采购合同审批
cg_contract_other_info 服务合同审批
ir_md_state_machine_history 服务合同审批流程
cg_contract_price 价格维护
ir_bu_stock_busi 组批组样

4. 常用业务表说明

表名 用途
am_cm_print_measure 计量单查询
am_cm_measure_tare_config 皮重计量数据
am_cm_measure_tare_mess 皮重差异确认
am_cm_measure_gross_mess 毛重异常超订单异常
ir_bu_stock_item 质检组批数据查询
ir_bu_stock_busi 组批组样查询
ir_sl_sales_load_item 销售发运装车表
am_cm_measure_yjzt 转储数据
cg_js_other_item 采购结算数据

5. 常用视图

视图名 用途
v_md_jlsj 物资原料采购
view_eg_hberqi 车辆查询
view_eg_hbhuoyun 火运
view_eg_hbhzd 转储
view_eg_hbqd 行车路线

二.MySQL 生产环境批量删除全流程记录

外部账套导入合同数据无法批量删除,只能从数据库删除了。

1.反向查找数据所在位置

SQLyog 右键数据库 → 新数据查询 或 Navicat 右键数据库 → 在数据库中查找,输入 “数据信息”,直接返回表名和字段名。例如查询 QC260410J0319。

1.1找到结果

表名 字段
cg_js_deliver_goods SALE_ID

2.准备待删除的 ID 列表

例如本次共有394个 “SALE_ID” 需要删除,从 “QC260410J0001” 到 “QC260410J0394”,最终需批量删除 394 条。数据存放于 Excel 文件 “删除数据.xlsx”,格式为一列纯数据(表头为”SALE_ID”)。

2.1创建临时表存放 ID

为防止导入时的字符集冲突,先手动建表:

USE hfny;
CREATE TABLE tmp_delete_ids (
SALE_ID VARCHAR(255) NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

2.2 导入 Excel 数据到临时表

  1. 确保 Excel 第一行有列标题(如 “SALE_ID”),否则首行数据会被当成标题而丢失。
  2. SQLyog 中右键库 hfny → 导入 → 导入外部数据。
  3. 选择文件,在“选择表”页面将 “Destination” 改为已存在的表 “tmp_shanchushuju”。
  4. 确认字段映射正确。
  5. 执行导入,成功日志显示 394 rows transferred`**。

3.删除前验证(关键)

3.1 核对临时表数量

SELECT COUNT(*) FROM hfny.tmp_delete_ids;

正常返回数据应该显示394。

3.2 核对临时表数量

SELECT COUNT(*)
FROM hfny.cg_js_deliver_goods cg
INNER JOIN hfny.tmp_delete_ids t ON cg.SALE_ID = t.SALE_ID;

正常返回数据同样应该显示394。若两者不等,则停止排查:临时表中是否包含正式表不存在的 ID,或者正式表数据已变动。建议清空数据重新导入。

3.3 备份待删除数据

CREATE TABLE hfny.cg_js_deliver_goods_bak_20260428 AS
SELECT cg.*
FROM hfny.cg_js_deliver_goods cg
INNER JOIN hfny.tmp_delete_ids t ON cg.SALE_ID = t.SALE_ID;

验证备份表行数:

SELECT COUNT(*) FROM hfny.cg_js_deliver_goods_bak_20260428;

4. 事务删除

4.1 正式删除步骤

4.1.1 开启事务

START TRANSACTION;

4.1.2 执行删除(通过 JOIN 精确匹配)

DELETE cg
FROM hfny.cg_js_deliver_goods cg
INNER JOIN hfny.tmp_delete_ids t ON cg.SALE_ID = t.SALE_ID;

4.1.3 查看受影响行数

SELECT ROW_COUNT();

正常返回数据应该显示394。但是实际显示为-1。

4.1.4 二次确认这些数据已不在正式表

SELECT COUNT(*)
FROM hfny.cg_js_deliver_goods cg
INNER JOIN hfny.tmp_delete_ids t ON cg.SALE_ID = t.SALE_ID;

返回 0 即表示删除干净。

4.1.5 确认无误则提交

COMMIT;

4.1.6 异常回滚

若中间发现任何异常(如删除行数不符、二次确认仍有数据),立即执行:

ROLLBACK;

5.主从环境特别说明

生产环境为 主从复制架构,通过浮动 VIP 连接主库。

  • 只需在主库执行一次删除,从库自动通过 binlog 同步。
  • 执行 SHOW SLAVE HOSTS; 能看到从库信息,确认当前连接为主库。

6.清理与收尾

6.1 删除临时表

DROP TABLE IF EXISTS hfny.shanchushuju;

6.2 备份表保留

cg_js_deliver_goods_bak_20260428 建议保留 7~14 天,确认业务无异常后手动删除:

DROP TABLE IF EXISTS hfny.cg_js_deliver_goods_bak_20260428;

7.异常处理备忘

异常现象 应对措施
临时表导入数量不对 清空临时表,修正 Excel(加表头、去空行),重新导入;或使用 LOAD DATA 命令
正式表匹配数量 ≠ 393 停止操作,核对临时表 ID 是否多余或缺失,修正后再验证
外键约束导致删除失败 先删除关联子表记录,或紧急时临时禁用外键检查(需评估风险)
删除行数与预期不符 立即回滚,检查是否因触发器或其它会话干扰,重新确认条件后重试
从库复制延迟过大或中断 等待同步完成,或按从库维护流程处理

8.经验总结

  1. 反向搜索:图形化工具比手写 SQL 更快,但对非字符串列需放宽类型限制。
  2. 临时表导入:手动建表可避开字符集冲突;Excel 必须有表头。
  3. 安全三原则:先验证数量 → 备份 → 事务中操作,确认无误再提交。
  4. 浮动地址:主从架构只操作主库,从库自动同步,不要画蛇添足两边删。
  5. 生产敬畏:每一步结果都截图留档,全程在低峰窗口执行。