MySQL 是世界上最受歡迎的關聯式資料庫之一。了解如何在 Node.js 中使用它。

MySQL 是世界上最受歡迎的關聯式資料庫之一。

當然,Node 生態系統中有幾個不同的套件可以讓您與 MySQL 進行互動,存儲數據,檢索數據等等。

我們將使用 mysqljs/mysql,這個套件在 GitHub 上有超過 12,000 顆星並且存在多年。

安裝 Node mysql 套件

用以下指令安裝:

npm install mysql

初始化數據庫連接

首先要引入套件:

const mysql = require('mysql')

然後創建一個連接:

const options = {
  user: 'the_mysql_user_name',
  password: 'the_mysql_user_password',
  database: 'the_mysql_database_name'
}
const connection = mysql.createConnection(options)

通過調用以下代碼來建立新的連接:

connection.connect(err => {
  if (err) {
    console.error('An error occurred while connecting to the DB')
    throw err
  }
})

連接選項

在上面的例子中,options 對象包含了 3 個選項:

const options = {
 user: 'the_mysql_user_name',
 password: 'the_mysql_user_password',
 database: 'the_mysql_database_name'
}

還有許多其他選項可以使用,包括:

  • host,資料庫主機名,默認為 localhost
  • port,MySQL 服務器端口號,默認為 3306
  • socketPath,用於指定 Unix socket 而不是主機和端口
  • debug,默認情況下禁用,可用於調試
  • trace,默認情況下啟用,當發生錯誤時打印堆棧跟踪
  • ssl,用於設置到服務器的 SSL 連接(本教程範圍外)

執行 SELECT 查詢

現在準備在資料庫上執行 SQL 查詢。該查詢一旦執行,將調用一個包含可能的錯誤、結果和字段的回調函數。

connection.query('SELECT * FROM todos', (error, todos, fields) => {
  if (error) {
    console.error('An error occurred while executing the query')
    throw error
  }
  console.log(todos)
})

您可以傳入需要自動轉義的值:

const id = 223
connection.query('SELECT * FROM todos WHERE id = ?', [id], (error, todos, fields) => {
  if (error) {
    console.error('An error occurred while executing the query')
    throw error
  }
  console.log(todos)
})

若要傳入多個值,只需將更多元素放入作為第二個參數傳遞的數組中:

const id = 223
const author = 'Flavio'
connection.query('SELECT * FROM todos WHERE id = ? AND author = ?', [id, author], (error, todos, fields) => {
  if (error) {
    console.error('An error occurred while executing the query')
    throw error
  }
  console.log(todos)
})

執行 INSERT 查詢

您可以傳入一個對象:

const todo = {
  thing: 'Buy the milk',
  author: 'Flavio'
}
connection.query('INSERT INTO todos SET ?', todo, (error, results, fields) => {
  if (error) {
    console.error('An error occurred while executing the query')
    throw error
  }
})

如果表格有帶有 auto_increment 的主鍵,該值將在 results.insertId 中返回:

const todo = {
  thing: 'Buy the milk',
  author: 'Flavio'
}
connection.query('INSERT INTO todos SET ?', todo, (error, results, fields) => {
  if (error) {
    console.error('An error occurred while executing the query')
    throw error
  }
  const id = results.resultId
  console.log(id)
})

關閉連接

當你需要結束與資料庫的連接時,可以調用 end() 方法:

connection.end()

這將確保任何待處理的查詢都被發送,並且連接被正常終止。tags:MySQL,Node.js,database,relational database