什么是 CRUD?增、查、改、删详解
CRUD 代表创建(create)、读取(read)、更新(update)和删除(delete)——应用处理已存储数据的四种基本操作。添加一位新客户是创建,查看客户列表是读取,修改其电话号码是更新,而删除该客户则是删除。大多数商业应用——客户关系管理系统、预约系统、库存跟踪工具、管理面板——基本都是 CRUD,只是在其上加入了规则和良好的布局。
用 AI 构建应用时为什么它很重要
CRUD 是一套术语,能把模糊的应用想法转化为精确的需求。“一个用来管理供应商的应用”会让 AI 只能猜测;而“创建、列出、编辑和删除供应商,字段如下”则明确告诉它应该构建哪些页面、数据库操作和服务端路由。
它还为测试提供了一份检查清单。对于应用中的每一类记录,你都可以问四个问题:能否新增、能否查看、能否修改、能否删除——并且只有正确的人才能执行每项操作。令人意外的是,许多 AI 构建的应用只能创建记录却无法编辑,或者任何人都可以删除任何内容。
一个日常类比:食谱卡片盒
想象厨房架子上放着一盒食谱卡片。
- **创建:**写一张新卡片并归档。
- **读取:**翻阅整个卡片盒,或抽出千层面那一张。
- **更新:**划掉“200 克奶酪”,改写为“250 克”。
- **删除:**把一张卡片抽出来扔掉。
现在再加上规则:只有主厨可以扔卡片,每张卡片都必须有标题,并且不能有两张同名卡片。这就是一个带有验证和权限的 CRUD 应用——而这正是大多数真实应用的样子。
CRUD 如何体现在每一层中
每种操作都会出现在页面、服务器和数据库中。把它们并排看,能很好地解释应用是如何构建的。
| 操作 | 页面上的表现 | API 请求(REST) | 数据库中的 SQL |
|---|---|---|---|
| 创建 | 一个“新建”按钮和一个表单 | POST /api/suppliers | INSERT |
| 读取 | 带搜索和筛选的列表;详情页 | GET /api/suppliers 和 GET /api/suppliers/42 | SELECT |
| 更新 | “编辑”表单或行内编辑 | PUT 或 PATCH /api/suppliers/42 | UPDATE |
| 删除 | 带确认步骤的“删除”按钮 | DELETE /api/suppliers/42 | DELETE(或将该行标记为已删除) |
页面是前端,API 请求是前端与后端通信的方式,SQL 则是后端与数据库通信的方式。如果这些术语对你来说还不熟悉,请参阅什么是 API和什么是数据库。
实例演示:设备借用跟踪器
某学校的媒体部门把相机和麦克风借给学生,却经常找不到它们。他们想要一个简单的应用。
记录。有两类对象:设备(名称、类型、序列号、状况)和借用记录(借出的设备、借用的学生、借出日期、应还日期、实际归还日期)。
设备的 CRUD:
- **创建:**工作人员添加一台带序列号的新相机。规则:序列号必须唯一。
- **读取:**所有设备的列表,可按类型和“当前可借”筛选;以及一个详情页,显示某件设备的借用历史。
- **更新:**将状况改为“需要维修”。
- 删除:通常不是真正删除。如果删除一台有 30 次借用记录的相机,这些借用记录会失去关联。因此应将其标记为“已退役”,使其从可借列表中消失,同时保留历史记录。这称为软删除。
借用记录的 CRUD:
- **创建:**将设备借给某位学生。规则:已被借出的设备不能再次借出。
- 读取:“逾期借用”列表——应还日期已过且没有归还日期的记录。
- **更新:**设备归还时记录归还日期。
- **删除:**仅限工作人员使用,用于删除误录的借用记录。
**权限。**学生只能读取可借的设备;只有工作人员可以创建、更新或删除。这些检查在服务器上执行,而不仅仅是隐藏按钮。
整个应用就是这些内容。真正有意思的部分——不允许重复借出、逾期列表、每件设备的历史记录——是建立在基础 CRUD 之上的规则和查询。
关键术语
- **记录(行):**一条数据,例如一位供应商或一笔借用。
- **实体 / 资源:**一类记录,例如“供应商”。每一类通常都有自己的表和一套 CRUD 页面。
- **验证:**对输入进行检查——必填字段、有效的邮箱、正数的数量。为了方便,在表单中进行验证;为了安全,也要在服务器上验证。
- **软删除:**将记录标记为已删除或已归档,而不是真正移除,以保留历史记录和关联关系。
- **分页:**每次只显示长列表的一页,使应用保持快速。
- **审计日志:**记录谁在何时创建、修改或删除了什么。
- **管理面板:**供工作人员管理应用数据的一组 CRUD 页面。
常见错误与误解
- **遗漏四种操作中的某一种。**应用常常只有创建和读取,却没有编辑功能,于是每次打错字都得删除后重新输入。请对每个实体检查全部四种操作。
- **删除导致的问题。**删除一个仍有发票的客户,可能会留下孤立的发票,或抹去历史记录。应针对每个实体决定:禁止删除、软删除,还是同时删除相关记录。
- **权限只存在于界面中。**隐藏“删除”按钮并不能阻止有人发送
DELETE请求。服务器必须检查请求者是谁。 - **按 ID 更新而不检查归属。**如果用户 A 可以通过修改 URL 中的数字来编辑
/api/notes/42,那么他们就可能编辑用户 B 的笔记。每一次更新和删除都必须确认该记录属于发出请求的人。 - **删除时没有确认。**一次误触就不应该毁掉数据。应要求确认步骤,或提供撤销功能。
- **“CRUD 意味着简单,不值得构建。”**许多有价值的产品就是 CRUD 应用,它们比通用工具更契合某种工作流程。
向你的 AI 构建工具提出的要求
针对每个实体,逐个使用以下模板:
创建一个供应商功能,包括列表、新建、编辑和删除。字段:名称(必填)、联系邮箱(需为有效邮箱)、电话、类别(可选:食品、包装、清洁用品)、备注。列表视图支持按名称搜索,按类别筛选,每页 20 条。删除前需确认;如果某供应商有订单,则改为归档而非删除。只有已登录的工作人员可以新建、编辑或归档——请在服务器端强制执行此权限。
然后,分别以有权限的用户和无权限的用户身份,测试全部四种操作。一个实体运行正常后,再添加下一个。如何构建内部工具展示了 CRUD 页面如何组成完整的管理应用,什么是 Postgres 则解释了大多数此类应用所依托的数据库。
Mythex 上的 CRUD 应用
CRUD 应用是 AI 应用构建工具最擅长的功能之一,Mythex 也不例外。在聊天中说明实体及其字段,Mythex 就会为项目附加一个 Postgres 数据库、创建数据表,并在实时预览中构建列表、表单和详情页;之后你可以运行 /test 检查流程。文档中有一份带入门提示词的 CRUD 应用配方,而内部工具构建器和仪表板模板是很好的起点。
常见问题
CRUD 是什么的缩写?
CRUD 代表创建(Create)、读取(Read)、更新(Update)和删除(Delete):即新增一条记录、查看记录、修改一条记录以及删除一条记录。几乎每个存储数据的应用都由这四种操作构成。
什么是 CRUD 应用?
CRUD 应用是主要任务为通过表单、列表和详情页管理记录的应用,例如客户关系管理(CRM)系统、库存跟踪工具、预约管理后台或招聘信息平台的后台。大多数内部工具和管理面板都是 CRUD 应用。
CRUD 与 REST API 有什么关系?
在典型的 REST API 中,创建使用 POST 请求,读取使用 GET,更新使用 PUT 或 PATCH,删除使用 DELETE。后端随后执行相应的数据库操作:INSERT、SELECT、UPDATE 或 DELETE。
CRUD 应用太简单,没有价值吗?
不是的。许多有用的商业软件都是 CRUD 应用,并在其上加入了良好的规则、权限和报表。价值在于良好地建模数据并契合工作流程,而不在于什么特别的技术。