跳转到内容
主菜单
主菜单
移至侧栏
隐藏
导航
首页
最近更改
随机页面
MediaWiki帮助
代码酷
搜索
搜索
中文(中国大陆)
外观
创建账号
登录
个人工具
创建账号
登录
未登录编辑者的页面
了解详情
贡献
讨论
编辑“︁
Database/sql
”︁
页面
讨论
大陆简体
阅读
编辑
编辑源代码
查看历史
工具
工具
移至侧栏
隐藏
操作
阅读
编辑
编辑源代码
查看历史
常规
链入页面
相关更改
特殊页面
页面信息
外观
移至侧栏
隐藏
您的更改会在有权核准的用户核准后向读者展示。
警告:
您没有登录。如果您进行任何编辑,您的IP地址会公开展示。如果您
登录
或
创建账号
,您的编辑会以您的用户名署名,此外还有其他益处。
反垃圾检查。
不要
加入这个!
= database/sql = '''database/sql'''是[[Go语言]]标准库中提供的一个通用[[数据库]]接口包,它定义了一套统一的API用于操作各种关系型数据库。该包为Go程序提供了与SQL数据库交互的标准方式,同时支持多种数据库驱动。 == 概述 == database/sql包的主要特点包括: * 提供与数据库无关的编程接口 * 支持连接池管理 * 自动处理连接的生命周期 * 支持事务处理 * 兼容多种数据库驱动 该包采用[[设计模式]]中的"驱动"架构,通过不同的驱动实现与特定数据库的通信。开发者只需学习一套API即可操作多种数据库。 == 基本用法 == === 数据库连接 === 使用database/sql连接数据库的基本流程: <syntaxhighlight lang="go"> import ( "database/sql" _ "github.com/go-sql-driver/mysql" // MySQL驱动 ) func main() { // 打开数据库连接 db, err := sql.Open("mysql", "user:password@tcp(127.0.0.1:3306)/dbname") if err != nil { panic(err.Error()) } defer db.Close() // 验证连接 err = db.Ping() if err != nil { panic(err.Error()) } } </syntaxhighlight> === 执行查询 === 查询数据库并处理结果集的示例: <syntaxhighlight lang="go"> type User struct { ID int Name string Age int } func queryUsers(db *sql.DB) ([]User, error) { rows, err := db.Query("SELECT id, name, age FROM users WHERE age > ?", 18) if err != nil { return nil, err } defer rows.Close() var users []User for rows.Next() { var u User if err := rows.Scan(&u.ID, &u.Name, &u.Age); err != nil { return nil, err } users = append(users, u) } return users, nil } </syntaxhighlight> === 执行更新 === 执行INSERT、UPDATE或DELETE语句: <syntaxhighlight lang="go"> func updateUser(db *sql.DB, id int, name string) error { result, err := db.Exec("UPDATE users SET name = ? WHERE id = ?", name, id) if err != nil { return err } rowsAffected, err := result.RowsAffected() if err != nil { return err } fmt.Printf("Updated %d rows\n", rowsAffected) return nil } </syntaxhighlight> == 高级特性 == === 事务处理 === database/sql支持数据库事务: <syntaxhighlight lang="go"> func transferMoney(db *sql.DB, from, to int, amount float64) error { tx, err := db.Begin() if err != nil { return err } // 执行转账操作 _, err = tx.Exec("UPDATE accounts SET balance = balance - ? WHERE id = ?", amount, from) if err != nil { tx.Rollback() return err } _, err = tx.Exec("UPDATE accounts SET balance = balance + ? WHERE id = ?", amount, to) if err != nil { tx.Rollback() return err } return tx.Commit() } </syntaxhighlight> === 预处理语句 === 使用预处理语句提高性能和安全性: <syntaxhighlight lang="go"> func batchInsertUsers(db *sql.DB, users []User) error { stmt, err := db.Prepare("INSERT INTO users(name, age) VALUES(?, ?)") if err != nil { return err } defer stmt.Close() for _, u := range users { _, err := stmt.Exec(u.Name, u.Age) if err != nil { return err } } return nil } </syntaxhighlight> == 支持的数据库驱动 == database/sql支持多种数据库驱动,常见的有: * MySQL: github.com/go-sql-driver/mysql * PostgreSQL: github.com/lib/pq * SQLite: github.com/mattn/go-sqlite3 * SQL Server: github.com/denisenkom/go-mssqldb == 性能优化 == 使用database/sql时的性能优化建议: * 合理设置连接池参数(SetMaxOpenConns, SetMaxIdleConns) * 复用预处理语句 * 使用事务批量操作 * 及时关闭Rows和Stmt对象 == 实际应用案例 == database/sql广泛应用于: * [[Web应用]]后端数据存储 * [[微服务]]中的数据访问层 * [[数据分析]]工具 * [[DevOps]]系统中的配置管理 == 参见 == * [[Go语言]] * [[SQL]] * [[ORM]] * [[数据库连接池]] == 参考资料 == <references /> [[Category:Go语言]] [[Category:数据库]] [[Category:编程接口]]
摘要:
请注意,所有对代码酷的贡献均被视为依照知识共享署名-非商业性使用-相同方式共享发表(详情请见
代码酷:著作权
)。如果您不希望您的文字作品被随意编辑和分发传播,请不要在此提交。
您同时也向我们承诺,您提交的内容为您自己所创作,或是复制自公共领域或类似自由来源。
未经许可,请勿提交受著作权保护的作品!
取消
编辑帮助
(在新窗口中打开)