快速入門:使用 Node.js 來連線及查詢適用於 MySQL 的 Azure 資料庫中的資料
警告
本文參考 CentOS,這是處於終止服務 (EOL) 狀態的 Linux 發行版。 請據此考慮您的使用方式和規劃。 如需詳細資訊,請參閱 CentOS 生命週期結束指導。
適用於: 適用於 MySQL 的 Azure 資料庫 - 單一伺服器
重要
適用於 MySQL 的 Azure 資料庫單一伺服器位於淘汰路徑上。 強烈建議您升級至適用於 MySQL 的 Azure 資料庫彈性伺服器。 如需移轉至適用於 MySQL 的 Azure 資料庫彈性伺服器的詳細資訊,請參閱適用於 MySQL 的 Azure 資料庫單一伺服器會發生什麼事?
在本快速入門中,您將使用 Node.js 連線至適用於 MySQL 的 Azure 資料庫。 接著,您可以使用 SQL 陳述式來查詢、插入、更新和刪除 Mac、Linux 和 Windows 平台中的資料庫所含的資料。
本文假設您已熟悉使用 Node.js 進行開發,但不熟悉適用於 MySQL 的 Azure 資料庫。
必要條件
- 具有有效訂用帳戶的 Azure 帳戶。 免費建立帳戶。
- 適用於 MySQL 的 Azure 資料庫伺服器。 使用 Azure 入口網站建立適用於 MySQL 的 Azure 資料庫伺服器或使用 Azure CLI 建立適用於 MySQL 的 Azure 資料庫伺服器。
重要
確保您用於連線的 IP 位址已使用 Azure 入口網站或 Azure CLI 新增伺服器的防火牆規則
安裝 Node.js 和 MySQL 連接器
根據您的平台,依照適當小節中的指示安裝 Node.js。 使用 npm 將 mysql2 套件及其相依性安裝到您的專案資料夾中。
造訪 Node.js 下載頁面 \(英文\),然後選取您需要的 Windows 安裝程式選項。
建立本機專案資料夾,例如
nodejsmysql
。開啟命令提示字元,然後將目錄變更為專案資料夾,例如
cd c:\nodejsmysql\
執行 NPM 工具將 mysql2 程式庫安裝至專案資料夾中。
cd c:\nodejsmysql\ "C:\Program Files\nodejs\npm" install mysql2 "C:\Program Files\nodejs\npm" list
檢查
npm list
輸出文字,以確認安裝。 版本號碼可能會隨著新的修補檔案發行而有所不同。
取得連線資訊
取得連線到 Azure Database for MySQL 所需的連線資訊。 您需要完整的伺服器名稱和登入認證。
- 登入 Azure 入口網站。
- 從 Azure 入口網站的左側功能表中,選取 [所有資源],然後搜尋您所建立的伺服器 (例如 mydemoserver)。
- 選取伺服器名稱。
- 從伺服器的 [概觀] 面板,記下 [伺服器名稱] 和 [伺服器管理員登入名稱]。 如果您忘記密碼,您也可以從此面板重設密碼。
執行程式碼範例
將 JavaScript 程式碼貼入新文字檔,然後使用副檔名 .js 將其儲存到專案資料夾 (例如 C:\nodejsmysql\createtable.js 或 /home/username/nodejsmysql/createtable.js)。
將程式碼中的
host
、user
、password
和database
設定選項取代為您在建立伺服器和資料庫時所指定的值。取得 SSL 憑證:從 https://dl.cacerts.digicert.com/DigiCertGlobalRootCA.crt.pem 下載要透過 SSL 與「適用於 MySQL 的 Azure 資料庫」伺服器通訊所需的憑證,並將該憑證檔儲存到本機磁碟機。
針對 Microsoft Internet Explorer 和 Microsoft Edge:在下載完成後,請將憑證重新命名為 DigiCertGlobalRootCA.crt.pem。
關於主權雲端的伺服器憑證,請參閱下列連結:Azure Government、由 21Vianet 營運的 Microsoft Azure 和 Azure 德國。
在
ssl
設定選項中,將ca-cert
檔案名稱取代為這個本機檔案的路徑。開啟命令提示字元或 Bash 殼層,然後將目錄變更為您的專案資料夾
cd nodejsmysql
。若要執行應用程式,請輸入後接檔案名稱的節點命令,例如
node createtable.js
。在 Windows 上,如果節點應用程式不在您的環境變數路徑中,則可能需要使用完整路徑來啟動節點應用程式,例如
"C:\Program Files\nodejs\node.exe" createtable.js
連線、建立資料表及插入資料
使用下列程式碼搭配 CREATE TABLE 和 INSERT INTO SQL 陳述式來連線和載入資料。
mysql.createConnection() 方法用來與 MySQL 伺服器互動。 connect() 函式用來建立伺服器連線。 query() 函式用來對 MySQL 資料庫執行 SQL 查詢。
const mysql = require('mysql2');
const fs = require('fs');
var config =
{
host: 'mydemoserver.mysql.database.azure.com',
user: 'myadmin@mydemoserver',
password: 'your_password',
database: 'quickstartdb',
port: 3306,
ssl: {ca: fs.readFileSync("your_path_to_ca_cert_file_DigiCertGlobalRootCA.crt.pem")}
};
const conn = new mysql.createConnection(config);
conn.connect(
function (err) {
if (err) {
console.log("!!! Cannot connect !!! Error:");
throw err;
}
else
{
console.log("Connection established.");
queryDatabase();
}
});
function queryDatabase(){
conn.query('DROP TABLE IF EXISTS inventory;', function (err, results, fields) {
if (err) throw err;
console.log('Dropped inventory table if existed.');
})
conn.query('CREATE TABLE inventory (id serial PRIMARY KEY, name VARCHAR(50), quantity INTEGER);',
function (err, results, fields) {
if (err) throw err;
console.log('Created inventory table.');
})
conn.query('INSERT INTO inventory (name, quantity) VALUES (?, ?);', ['banana', 150],
function (err, results, fields) {
if (err) throw err;
else console.log('Inserted ' + results.affectedRows + ' row(s).');
})
conn.query('INSERT INTO inventory (name, quantity) VALUES (?, ?);', ['orange', 154],
function (err, results, fields) {
if (err) throw err;
console.log('Inserted ' + results.affectedRows + ' row(s).');
})
conn.query('INSERT INTO inventory (name, quantity) VALUES (?, ?);', ['apple', 100],
function (err, results, fields) {
if (err) throw err;
console.log('Inserted ' + results.affectedRows + ' row(s).');
})
conn.end(function (err) {
if (err) throw err;
else console.log('Done.')
});
};
讀取資料
使用下列程式碼搭配 SELECT SQL 陳述式來連線和讀取資料。
mysql.createConnection() 方法用來與 MySQL 伺服器互動。 connect() 方法用來建立伺服器連線。 query() 方法用來執行對 MySQL 資料庫的 SQL 查詢。 結果陣列用來保留查詢的結果。
const mysql = require('mysql2');
const fs = require('fs');
var config =
{
host: 'mydemoserver.mysql.database.azure.com',
user: 'myadmin@mydemoserver',
password: 'your_password',
database: 'quickstartdb',
port: 3306,
ssl: {ca: fs.readFileSync("your_path_to_ca_cert_file_DigiCertGlobalRootCA.crt.pem")}
};
const conn = new mysql.createConnection(config);
conn.connect(
function (err) {
if (err) {
console.log("!!! Cannot connect !!! Error:");
throw err;
}
else {
console.log("Connection established.");
readData();
}
});
function readData(){
conn.query('SELECT * FROM inventory',
function (err, results, fields) {
if (err) throw err;
else console.log('Selected ' + results.length + ' row(s).');
for (i = 0; i < results.length; i++) {
console.log('Row: ' + JSON.stringify(results[i]));
}
console.log('Done.');
})
conn.end(
function (err) {
if (err) throw err;
else console.log('Closing connection.')
});
};
更新資料
使用 UPDATE SQL 陳述式並搭配使用下列程式碼以連接和更新資料。
mysql.createConnection() 方法用來與 MySQL 伺服器互動。 connect() 方法用來建立伺服器連線。 query() 方法用來執行對 MySQL 資料庫的 SQL 查詢。
const mysql = require('mysql2');
const fs = require('fs');
var config =
{
host: 'mydemoserver.mysql.database.azure.com',
user: 'myadmin@mydemoserver',
password: 'your_password',
database: 'quickstartdb',
port: 3306,
ssl: {ca: fs.readFileSync("your_path_to_ca_cert_file_DigiCertGlobalRootCA.crt.pem")}
};
const conn = new mysql.createConnection(config);
conn.connect(
function (err) {
if (err) {
console.log("!!! Cannot connect !!! Error:");
throw err;
}
else {
console.log("Connection established.");
updateData();
}
});
function updateData(){
conn.query('UPDATE inventory SET quantity = ? WHERE name = ?', [200, 'banana'],
function (err, results, fields) {
if (err) throw err;
else console.log('Updated ' + results.affectedRows + ' row(s).');
})
conn.end(
function (err) {
if (err) throw err;
else console.log('Done.')
});
};
刪除資料
使用 DELETE SQL 陳述式並搭配使用下列程式碼以連接和刪除資料。
mysql.createConnection() 方法用來與 MySQL 伺服器互動。 connect() 方法用來建立伺服器連線。 query() 方法用來執行對 MySQL 資料庫的 SQL 查詢。
const mysql = require('mysql2');
const fs = require('fs');
var config =
{
host: 'mydemoserver.mysql.database.azure.com',
user: 'myadmin@mydemoserver',
password: 'your_password',
database: 'quickstartdb',
port: 3306,
ssl: {ca: fs.readFileSync("your_path_to_ca_cert_file_DigiCertGlobalRootCA.crt.pem")}
};
const conn = new mysql.createConnection(config);
conn.connect(
function (err) {
if (err) {
console.log("!!! Cannot connect !!! Error:");
throw err;
}
else {
console.log("Connection established.");
deleteData();
}
});
function deleteData(){
conn.query('DELETE FROM inventory WHERE name = ?', ['orange'],
function (err, results, fields) {
if (err) throw err;
else console.log('Deleted ' + results.affectedRows + ' row(s).');
})
conn.end(
function (err) {
if (err) throw err;
else console.log('Done.')
});
};
清除資源
若要清除在此快速入門期間使用的所有資源,請使用下列命令刪除資源群組:
az group delete \
--name $AZ_RESOURCE_GROUP \
--yes