feat(docs): 完善达梦数据库支持文档
- 更新 .gitignore 文件,添加对 .sql 文件的忽略 - 移除 cache_db.go 中的调试日志相关代码,简化缓存操作逻辑 - 在多个文档中添加达梦 DM8 数据库的支持信息,包括配置、使用注意事项及示例 - 更新 QUICKSTART.md,明确支持的数据库类型及配置示例 - 在 ROADMAP.md 中记录达梦数据库完整支持的进展
This commit is contained in:
+72
-6
@@ -107,10 +107,11 @@ affected := database.Inserts("table", []Map{
|
||||
})
|
||||
// 返回受影响的行数
|
||||
|
||||
// 支持 [#] 标记直接 SQL
|
||||
// 推荐:使用服务器时间(Time2Str),避免数据库时区差异
|
||||
now := Time2Str(time.Now())
|
||||
affected := database.Inserts("log", []Map{
|
||||
{"user_id": 1, "created_time[#]": "NOW()"},
|
||||
{"user_id": 2, "created_time[#]": "NOW()"},
|
||||
{"user_id": 1, "created_time": now},
|
||||
{"user_id": 2, "created_time": now},
|
||||
})
|
||||
```
|
||||
|
||||
@@ -223,10 +224,20 @@ data := database.Page(page, pageSize).PageSelect("table", "fields", whereMap)
|
||||
### 直接SQL
|
||||
| 写法 | SQL | 说明 |
|
||||
|------|-----|------|
|
||||
| `"field[#]": "NOW()"` | `field = NOW()` | 直接SQL函数 |
|
||||
| `"field[#]": "balance + 1"` | `field = balance + 1` | 直接SQL表达式(数值运算等) |
|
||||
| `"[##]": "a > b"` | `a > b` | 直接SQL片段 |
|
||||
| `"field[#!]": "1"` | `field != 1` | 不等于(不参数化) |
|
||||
|
||||
> **时间字段推荐写法**:不要用 `"[#]": "NOW()"`,改用 Go 侧传值:
|
||||
> ```go
|
||||
> // 赋值当前时间
|
||||
> "create_time": Time2Str(time.Now())
|
||||
>
|
||||
> // 时间范围查询(一天前)
|
||||
> "create_time[>]": Time2Str(time.Now().AddDate(0, 0, -1))
|
||||
> ```
|
||||
> 原因:`NOW()` 使用数据库时区;`Time2Str(time.Now())` 使用应用服务器时区,行为稳定且跨数据库兼容。
|
||||
|
||||
## 逻辑连接符
|
||||
|
||||
### AND 条件
|
||||
@@ -391,6 +402,61 @@ database := &db.HoTimeDB{
|
||||
// - Upsert: ON DUPLICATE KEY -> ON CONFLICT
|
||||
```
|
||||
|
||||
## 达梦数据库(DM8)支持
|
||||
|
||||
### 连接配置
|
||||
|
||||
```go
|
||||
import (
|
||||
_ "gitee.com/chunanyong/dm" // vendor 已内置,无需额外安装
|
||||
)
|
||||
|
||||
database := &db.HoTimeDB{
|
||||
Type: "dm", // 或 "dameng"
|
||||
}
|
||||
|
||||
database.SetConnect(func(err ...*common.Error) (master, slave *sql.DB) {
|
||||
// schema= 指定当前会话默认搜索 schema
|
||||
dsn := "dm://SYSDBA:password@127.0.0.1:5236?schema=TEST"
|
||||
master, _ = sql.Open("dm", dsn)
|
||||
return master, master
|
||||
})
|
||||
```
|
||||
|
||||
### 各数据库差异对比
|
||||
|
||||
| 特性 | MySQL | PostgreSQL | 达梦 DM8 |
|
||||
|------|-------|------------|---------|
|
||||
| 标识符引号 | \`name\` | "name" | "name" |
|
||||
| 占位符 | ? | $1, $2... | ? |
|
||||
| Upsert | ON DUPLICATE KEY UPDATE | ON CONFLICT DO UPDATE | MERGE INTO...USING |
|
||||
| 自增列 | AUTO_INCREMENT | SERIAL | IDENTITY(1,1) |
|
||||
| 分页 | LIMIT m, n | LIMIT n OFFSET m | LIMIT m, n 或 LIMIT n OFFSET m |
|
||||
|
||||
框架自动处理所有差异,业务代码无需修改。
|
||||
|
||||
### 达梦注意事项速查
|
||||
|
||||
| 场景 | 说明 |
|
||||
|------|------|
|
||||
| 标识符大小写 | 双引号内大小写敏感,框架统一使用小写 |
|
||||
| 保留字 | `admin`/`user`/`order` 等框架自动加双引号,原生SQL需手动处理 |
|
||||
| 表存在检测 | 用 `COUNT(*)` 代替 `USER_TABLES`(schema 错配问题) |
|
||||
| `Insert` 返回ID | 原生驱动已支持 `LastInsertId()`,与 MySQL 一致 |
|
||||
| 长文本类型 | DM 用 `CLOB`(对应 MySQL 的 `LONGTEXT`) |
|
||||
| 时间赋值 | **推荐统一用** `Time2Str(time.Now())` 传服务器时间,避免 `NOW()` 时区差异及跨库函数不兼容 |
|
||||
|
||||
### 原生 SQL 中的保留字
|
||||
|
||||
```go
|
||||
// 达梦中 admin、user 等是保留字,原生 SQL 必须加双引号
|
||||
results := database.Query(
|
||||
`SELECT "id", "name" FROM "admin" WHERE "state" = ?`, 1)
|
||||
|
||||
// ORM 方法无需处理,框架自动加引号
|
||||
results := database.Select("admin", "*", common.Map{"state": 1})
|
||||
```
|
||||
|
||||
## 错误处理
|
||||
```go
|
||||
// 检查最后的错误
|
||||
@@ -509,8 +575,8 @@ result := database.Table("order").
|
||||
|
||||
---
|
||||
|
||||
*快速参考版本: 2.0*
|
||||
*更新日期: 2026年1月*
|
||||
*快速参考版本: 2.1*
|
||||
*更新日期: 2026年3月*
|
||||
|
||||
**详细说明:**
|
||||
- [HoTimeDB 使用说明](HoTimeDB_使用说明.md) - 完整教程
|
||||
|
||||
Reference in New Issue
Block a user