From 48f0ad7b725336f25fc6e7876c7ef47e5f05022e Mon Sep 17 00:00:00 2001 From: evtrouble <105802875+evtrouble@users.noreply.github.com> Date: Mon, 20 Oct 2025 20:16:54 +0800 Subject: [PATCH] Update rules for single table views with expressions --- docs/docs/game/create-view-2025.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docs/game/create-view-2025.md b/docs/docs/game/create-view-2025.md index 01617254d..68edb1674 100644 --- a/docs/docs/game/create-view-2025.md +++ b/docs/docs/game/create-view-2025.md @@ -21,7 +21,7 @@ title: 2025 初赛 create-view 题目 | 单表视图 | `CREATE VIEW v AS SELECT * FROM t;` | ✅ 允许 | ✅ 允许 | ✅ 允许 | 基于单个表的完整列视图,完全可更新 | | 单表视图(部分列) | `CREATE VIEW v(id, age) AS SELECT id, age FROM t;` | ✅ 允许(仅指定列)
❌ 不允许(全列且未覆盖) | ✅ 允许(仅修改包含的列)
❌ 不允许(修改非包含列) | ✅ 允许 | 插入时,其他列为 `NULL`;若缺失的列为 `NOT NULL` 且无默认值,则插入失败 | | 多表视图 | `CREATE VIEW v AS SELECT t1.id, t2.age FROM t1, t2;` | ⚠️ 部分允许
✅ 若只影响一个基表的列
❌ 若涉及多个基表 | ⚠️ 部分允许
✅ 若只更新来自同一基表的列
❌ 若跨多个基表更新 | ❌ 不允许 | 插入或更新只能作用于单一基表对应的字段。
例如:INSERT INTO v(id) 可能允许(仅 t1),但 INSERT INTO v VALUES(...) 同时写两表则禁止 | -| 单表视图(含表达式) | `CREATE VIEW v AS SELECT id, id + age AS data FROM t;` | ✅ 允许(仅插入基础列)
❌ 不允许(插入表达式列) | ✅ 允许(仅更新基础列)
❌ 不允许(更新表达式列) | ✅ 允许 | 表达式列(如 id + age)是计算值,不能写入;
只能对原始列(如 id, age)进行插入或更新 | +| 单表视图(含表达式) | `CREATE VIEW v AS SELECT id, id + age AS data FROM t;` | ❌ 不允许插入 | ✅ 允许(仅更新基础列)
❌ 不允许(更新表达式列) | ✅ 允许 | 表达式列(如 id + age)是计算值,不能写入;
只能对原始列(如 id, age)进行更新 | | 单表视图(含聚合) | `CREATE VIEW v AS SELECT COUNT(*) AS cnt FROM t;` | ❌ 不允许 | ❌ 不允许 | ❌ 不允许 | 聚合结果无法映射回原表的具体行;
此类视图为只读 | | 嵌套视图 | `CREATE VIEW v1 AS SELECT id FROM v2;` | ✅ 允许(当 v2 可插入)
❌ 不允许(当 v2 不可插入) | ✅ 允许(当 v2 可更新)
❌ 不允许(当 v2 不可更新) | ✅ 允许(当 v2 可删除)
❌ 不允许(当 v2 不可删除) | 嵌套视图的操作权限完全依赖源视图。
若源视图 v2 支持某操作,则 v1 可能支持;否则一律禁止 |