前往 MySQL 官網 下載對應作業系統的安裝包。macOS 可使用 Homebrew:
brew install mysql
brew services start mysql
安裝完成後,預設 root 密碼為空,建議立即設定密碼:
mysqladmin -u root password 'your_strong_password'
現代專案推薦使用 mysql2(支援 Promise/Async-Await)或 Prisma(ORM):
npm init -y
npm install mysql2
# 或使用 ORM
npm install prisma @prisma/client
npx prisma init
// db.js
const mysql = require('mysql2/promise');
const pool = mysql.createPool({
host: 'localhost',
user: 'root',
password: 'password',
database: 'test',
waitForConnections: true,
connectionLimit: 10,
queueLimit: 0
});
module.exports = pool;
// 查詢範例
const pool = require('./db');
async function getUsers() {
try {
const [rows] = await pool.query('SELECT id, name, email FROM users WHERE status = ?', ['active']);
console.log('查詢結果:', rows);
return rows;
} catch (err) {
console.error('查詢失敗:', err);
throw err;
}
}
// 事務範例
async function transferFunds(from, to, amount) {
const conn = await pool.getConnection();
try {
await conn.beginTransaction();
await conn.query('UPDATE accounts SET balance = balance - ? WHERE id = ?', [amount, from]);
await conn.query('UPDATE accounts SET balance = balance + ? WHERE id = ?', [amount, to]);
await conn.commit();
} catch (err) {
await conn.rollback();
throw err;
} finally {
conn.release();
}
}
| 錯誤現象 | 原因 | 解決方案 |
|---|---|---|
| ER_ACCESS_DENIED_ERROR | 帳號密碼錯誤或權限不足 | 確認認證資訊,授予對應資料庫權限 |
| ECONNREFUSED | MySQL 服務未啟動或端口錯誤 | 檢查服務狀態,確認 3306 端口開放 |
| ER_BAD_DB_ERROR | 資料庫不存在 | 先建立資料庫或修正連線字串 |
| PROTOCOL_ENQUEUE_AFTER_FATAL_ERROR | 連線池耗盡或長連線斷開 | 調整 connectionLimit,啟用 ping 保活 |
INSERT INTO ... VALUES (...), (...), ...EXPLAIN 分析慢查詢long_query_time = 1若維護舊專案使用 db-mysql,建議逐步遷移至 mysql2:
export MYSQL_CONFIG=... 等環境變數設定Node.js 搭配 MySQL 開發已相當成熟,採用 mysql2 連線池與 Async-Await 寫法,能編寫出可維護、高效能的資料庫存取層。搭配 Prisma 等 ORM 更能提升開發效率與型別安全。