数据库操作 Skill

HE
henuwangkai
Community
👁 4·💰 ~0.02 USD·📅 发布于 2026年3月24日·📖 1 分钟阅读

数据库安全操作 Skill,含 DDL/DML 规范、防误删规则、备份流程

1. MySQL 数据库操作 Skill

MySQL 数据库安全操作 Skill,含 DDL/DML 规范、防误删规则、备份流程

Prompt

---
name: 数据库规范
description: 数据库优先原则(先改库再改代码)、goctl-model.sh 生成命令、表创建规范(NULL 值、字段命名、索引)、禁止操作(DROP/DELETE/TRUNCATE)、软删除规则、批量操作限制。
---

# 数据库规范

## 数据库信息

- **数据库名**: db_buffett
- **表前缀**: bs_
- **字符集**: utf8mb4

## ⚠️ 数据库优先修改原则(极其重要)

> **核心原则**:涉及数据库变更的需求,必须 **先修改数据库,再修改代码**

### 执行流程

1. **判断需求类型**
   - 纯前端样式修改 → 直接修改前端代码
   - 涉及数据字段变更 → 进入步骤 2

2. **检查数据库结构**
   - **必须首先**查看当前数据库中有哪些表
   - 使用 MCP 数据库工具查询表结构
   - 检查是否有关联表需要同步修改

3. **先执行数据库变更**
   - 执行 `ALTER TABLE` 语句
   - 验证变更成功
   - **切记不可执行 DROP/TRUNCATE**

4. **再修改后端代码(强制同步 Model)**
   ```bash
   cd backend
   ./goctl-model.sh <group_name> <table_name>
  • 绝对禁止手动修改 model/*_gen.go 文件
  1. 最后修改前端代码

绝对禁止的操作

-- ❌ 绝对禁止
DROP TABLE xxx;
DROP DATABASE xxx;
DELETE FROM table_name WHERE id = 1;  -- 禁止物理删除
UPDATE table_name SET column = value;  -- 禁止无 WHERE 条件
TRUNCATE TABLE xxx;

-- ✅ 必须使用软删除
UPDATE table_name SET status = -1, deleted_at = NOW() WHERE id = 1;

数据表创建规范

字段 NULL 值规范

类型 允许 NULL 默认值
VARCHAR ❌ 禁止 ''
TEXT ❌ 禁止 无默认值
INT/BIGINT ❌ 禁止 0
TINYINT ❌ 禁止 01
DECIMAL ❌ 禁止 0.00
DATETIME ✅ 允许 NULL
JSON ✅ 允许 NULL

字段命名规范

规则 示例
小写 + 下划线 user_name, created_at
主键统一 id id BIGINT UNSIGNED
外键 xxx_id user_id, category_id
布尔 is_xxx is_deleted, is_active
时间 xxx_at created_at, expired_at

表创建标准模板

CREATE TABLE bs_表名 (
    id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键ID',
    name VARCHAR(100) NOT NULL DEFAULT '' COMMENT '名称',
    status TINYINT NOT NULL DEFAULT 1 COMMENT '状态: 1=在线, -1=下线',
    sort INT NOT NULL DEFAULT 0 COMMENT '排序值',
    created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    PRIMARY KEY (id),
    KEY idx_status (status)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='表注释';

常用字段约定

字段名 类型 含义
status tinyint 1=在线, -1=下线
official tinyint 1=官方, 2=用户创建
sort int 排序值,越大越靠前
level tinyint 层级:1, 2, 3
parent_id int 父级ID,0=顶级
ref_id bigint 主版本ID,用于多语言关联
lang_type varchar 语言类型:zh/en/es/fr/ar

防止数据丢失的强制规则

UPDATE 操作步骤

-- 步骤1: 先查看要更新的数据(必须执行)
SELECT * FROM table_name WHERE [条件];

-- 步骤2: 确认影响行数
SELECT COUNT(*) FROM table_name WHERE [条件];

-- 步骤3: 批量更新超过10条时,必须先询问用户确认
-- 步骤4: 首次更新建议加 LIMIT 1 测试
UPDATE table_name SET column = value WHERE [条件] LIMIT 1;

批量操作限制

  • 批量 INSERT: 单次不超过 100 条
  • 批量 UPDATE: 单次不超过 50 条
  • 批量软删除: 单次不超过 10 条,必须用户确认

禁止的高危操作

  • ALTER TABLE DROP COLUMN
  • ALTER TABLE MODIFY 缩小字段长度
  • ❌ 删除有外键关联的父记录
  • ❌ 在生产数据上直接执行未经测试的 SQL

字段类型选择

场景 推荐类型 说明
主键 BIGINT UNSIGNED 不使用 INT,预留增长空间
短文本 (< 255) VARCHAR(n) n 为实际最大长度
长文本 TEXT 超过 255 字符使用 TEXT
状态/类型 TINYINT 范围 -128 ~ 127
排序值 INT 支持负数排序
金额 DECIMAL(10,2) 禁止使用 FLOAT/DOUBLE
时间 DATETIME 不使用 TIMESTAMP(2038 问题)
大文本/结构化数据 JSON MySQL 8.0+ 原生支持
UUID VARCHAR(36) 固定长度

索引规范

-- 1. 主键索引(必须)
PRIMARY KEY (id)

-- 2. 唯一索引(业务唯一字段)
UNIQUE KEY uk_user_uuid (user_uuid)

-- 3. 普通索引(查询条件字段)
KEY idx_status (status)
KEY idx_category_id (category_id)

-- 4. 联合索引(多字段查询,注意顺序)
KEY idx_category_status (category_id, status)

索引命名规范:

  • 主键: PRIMARY KEY
  • 唯一索引: uk_字段名
  • 普通索引: idx_字段名
  • 联合索引: idx_字段1_字段2

字段修改风险等级

操作 风险等级 说明
新增字段 🟢 低 必须指定 NOT NULL 和默认值
修改字段类型 🟡 中 只能扩大范围,禁止缩小
修改字段名 🔴 高 需要同步修改代码
删除字段 ❌ 禁止 使用废弃标记,不删除

讨论区

讨论区

登录后加入讨论。
MC
Maya Chen·2 hours ago

Tried this with a marketing ops workflow and it cut prompt iteration time by half. The Prompt section is especially reusable.

LW
Leo Wang·Yesterday

Would love a follow-up showing how you adapted this for team use.

  • We forked it internally
  • Replaced the model with Claude Sonnet
  • Saved the structure as a reusable playbook

相关推荐

相关资产

继续查看同一作者发布的其他资产。

返回首页