|
|
@@ -36,6 +36,22 @@ SELECT ... FROM t WHERE 条件 ORDER BY 列 [ASC|DESC], ... LIMIT n [OFFSET m]
|
|
|
SELECT COUNT(*) | COUNT(列) | SUM(列) | MIN(列) | MAX(列) | AVG(列) FROM t [WHERE ...]
|
|
|
```
|
|
|
|
|
|
+**JOIN**(INNER / LEFT [OUTER],等值条件,链式多表):
|
|
|
+
|
|
|
+```
|
|
|
+SELECT 列清单 FROM 表1 [AS] a
|
|
|
+ JOIN 表2 [AS] b ON a.x = b.y -- INNER JOIN 可省 INNER
|
|
|
+ LEFT JOIN 表3 [AS] c ON b.m = c.n
|
|
|
+ [WHERE 条件] [ORDER BY ...] [LIMIT n [OFFSET m]]
|
|
|
+
|
|
|
+列清单: * | t.* | 列名 | t.列名 -- WHERE/ORDER BY 同样支持限定名
|
|
|
+```
|
|
|
+
|
|
|
+执行策略:左表全扫描(本表条件下推索引)→ 逐行取 ON 左列值对右表做
|
|
|
+`Eq` 索引点查的嵌套循环;INNER 无匹配丢行、LEFT 补全 NULL;跨表条件
|
|
|
+(列比较 / 跨表 OR)作残余谓词在组合行上过滤;投影后内存排序再 LIMIT。
|
|
|
+非等值 ON / RIGHT / FULL JOIN 明确报错;JOIN+聚合暂不支持。
|
|
|
+
|
|
|
WHERE 条件族(`?` 为参数占位符,字面量同样可用):
|
|
|
|
|
|
| 语法 | 说明 |
|
|
|
@@ -104,7 +120,7 @@ DROP TABLE [IF EXISTS] t
|
|
|
|
|
|
| 类别 | 内容 |
|
|
|
|------|------|
|
|
|
-| 多表 | JOIN(任何形式) |
|
|
|
+| 多表 | 除 INNER/LEFT 等值 JOIN 外的连接形式(RIGHT/FULL JOIN、笛卡尔积) |
|
|
|
| 嵌套 | 子查询、`INSERT ... SELECT` |
|
|
|
| 分组 | `GROUP BY`、`HAVING`、`DISTINCT` |
|
|
|
| 函数 | WHERE/SELECT 中的任意函数表达式(`UPPER`/`CASE WHEN` 等) |
|
|
|
@@ -142,6 +158,30 @@ DROP TABLE [IF EXISTS] t
|
|
|
- 时序表(行存储为时序索引)同样可经驱动写入:主键列声明 `DATETIME`
|
|
|
且按时间非递减写入即可。
|
|
|
|
|
|
+## GORM 接入(gormvrtx 模块)
|
|
|
+
|
|
|
+仓库提供官方风格的 GORM Dialector:`gormvrtx/` 是独立子模块(自带
|
|
|
+`go.mod`,主仓库保持零依赖):
|
|
|
+
|
|
|
+```go
|
|
|
+import (
|
|
|
+ "gorm.io/gorm"
|
|
|
+ vrtx "git.ycl.pub/yl32940/TsDB2/gormvrtx"
|
|
|
+)
|
|
|
+
|
|
|
+db, err := gorm.Open(vrtx.Open("/path/to/data.db"), &gorm.Config{})
|
|
|
+```
|
|
|
+
|
|
|
+- **CRUD / 查询 / 事务 / Preload**:走 GORM 生成 SQL → vrtx 驱动执行,
|
|
|
+ `Joins()`(等值)同样可用。
|
|
|
+- **AutoMigrate 真正可用**:`gormvrtx` 实现了 GORM 的 Migrator 接口,
|
|
|
+ schema 自省与变更**直连引擎元数据 API**(不经 SQL):建表 / 加列 /
|
|
|
+ 删列 / 唯一与普通索引的自动比对与补齐都能跑通(`AlterColumn` 改类型、
|
|
|
+ 重命名等少数操作返回"不支持")。
|
|
|
+- 整型主键零值自动预分配并回填对象(对齐自增语义)。
|
|
|
+
|
|
|
+演示:`cd gormvrtx/demo && go run main.go`。
|
|
|
+
|
|
|
## 测试与演示
|
|
|
|
|
|
- 驱动测试:`go test ./DB/driver/`(CRUD/查询全链路、事务、不支持语法、
|