SQL 实战与 Go 客户端
本章聚焦 MySQL 的实用 SQL 技巧,并给出 Go 访问 MySQL 的两种方式:标准库 database/sql 与 ORM 框架 GORM。
常用函数
实用模式
Warning
REPLACE INTO 会先删除再插入,导致自增主键变化、触发器与级联外键被触发,并可能丢失未指定列的值。除非明确需要,优先使用 INSERT ... ON DUPLICATE KEY UPDATE。
用 database/sql 访问 MySQL
Tip
sql.Open 不会真正建立连接,务必用 PingContext 验证。SetConnMaxLifetime 很关键:它能避免长时间空闲连接被数据库或中间件单方面断开而导致的错误。
用 GORM 访问 MySQL
Warning
GORM 的 Updates(Struct) 会跳过零值字段(如 Amount: 0),更新零值请用 map[string]any 或 Select 指定列。另外 First 查不到会返回 gorm.ErrRecordNotFound,业务需显式处理。
小结
- 常用函数与
ON DUPLICATE KEY UPDATE、原子扣减等模式是日常主力。 database/sql提供统一接口:注意 DSN 的parseTime、连接池参数与ErrNoRows。- GORM 提升开发效率,但要清楚零值更新与软删除的边界。
- SQL 一律参数化(MySQL 用
?),杜绝注入。