mysql2
是 Ruby 访问 MySQL 数据库的首选库,比 dbi
更现代、性能更优,支持 线程安全、流式查询 和 参数化查询,推荐用于生产环境。
📌 目录
- 🔹 安装
mysql2
Gem - 🔹 连接 MySQL 数据库
- 🔹 执行 SQL 语句
- 🔹 处理查询结果
- 🔹 使用占位符(Prepared Statement)
- 🔹 插入、更新和删除数据
- 🔹 事务控制(Commit & Rollback)
- 🔹 连接池(Connection Pooling)
- 🔹 关闭数据库连接
- 🔹 参考资料
🔹 安装 mysql2
Gem
1. 安装 MySQL2 gem
在终端执行以下命令安装 mysql2
:
gem install mysql2
2. 检查安装是否成功
ruby -e "require 'mysql2'; puts 'MySQL2 安装成功!'"
🔹 连接 MySQL 数据库
require 'mysql2'
begin
client = Mysql2::Client.new(
host: "localhost",
username: "root",
password: "your_password",
database: "test_db",
encoding: "utf8mb4"
)
puts "✅ 成功连接到 MySQL 数据库!"
rescue Mysql2::Error => e
puts "❌ 连接失败: #{e.message}"
end
连接参数说明
参数 | 说明 |
---|---|
host | MySQL 服务器地址(本地 localhost ,远程填 IP 或域名) |
username | 数据库用户名 |
password | 数据库密码 |
database | 连接的数据库名 |
encoding | 数据库编码(建议使用 utf8mb4 以支持 Emoji) |
🔹 执行 SQL 语句
1. 创建数据库
client.query("CREATE DATABASE IF NOT EXISTS test_db")
2. 选择数据库
client.query("USE test_db")
3. 创建表
client.query("
CREATE TABLE IF NOT EXISTS users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50),
age INT
)
")
🔹 处理查询结果
1. 查询所有数据
results = client.query("SELECT * FROM users")
results.each do |row|
puts "ID: #{row['id']}, Name: #{row['name']}, Age: #{row['age']}"
end
2. 查询单行数据
row = client.query("SELECT * FROM users WHERE id = 1").first
puts "用户: #{row['name']}, 年龄: #{row['age']}" if row
🔹 使用占位符(Prepared Statement)
使用 预处理语句 避免 SQL 注入,提高查询效率:
statement = client.prepare("INSERT INTO users (name, age) VALUES (?, ?)")
statement.execute("Alice", 25)
statement.execute("Bob", 30)
🔹 插入、更新和删除数据
1. 插入数据
client.query("INSERT INTO users (name, age) VALUES ('Charlie', 28)")
2. 更新数据
client.query("UPDATE users SET age = 29 WHERE name = 'Charlie'")
3. 删除数据
client.query("DELETE FROM users WHERE name = 'Charlie'")
🔹 事务控制(Commit & Rollback)
1. 事务提交
client.query("START TRANSACTION")
client.query("INSERT INTO users (name, age) VALUES ('David', 22)")
client.query("COMMIT") # 提交事务
2. 事务回滚
client.query("START TRANSACTION")
client.query("INSERT INTO users (name, age) VALUES ('Eve', 24)")
client.query("ROLLBACK") # 取消插入
🔹 连接池(Connection Pooling)
在高并发环境中,使用连接池管理数据库连接:
require 'mysql2'
require 'connection_pool'
pool = ConnectionPool.new(size: 5, timeout: 5) do
Mysql2::Client.new(host: "localhost", username: "root", password: "your_password", database: "test_db", encoding: "utf8mb4")
end
# 使用连接池
pool.with do |client|
results = client.query("SELECT * FROM users")
results.each { |row| puts row["name"] }
end
🔹 关闭数据库连接
client.close if client
或者:
pool.shutdown
🔹 参考资料
总结
mysql2
提供 高性能、线程安全 的 MySQL 访问方式。- 通过
client.query("SQL")
执行 SQL 语句,使用client.prepare
进行 参数化查询。 - 事务 (
START TRANSACTION
,COMMIT
,ROLLBACK
) 适用于 数据一致性 场景。 - 连接池 (
ConnectionPool
) 适用于 高并发应用,避免重复建立连接。
你可以将本教程作为 MySQL2 最佳实践 指南,用于 Web 开发、数据存储、API 应用 等项目 🚀
发表回复