分享方式:


快速入門:使用 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 資料庫。

必要條件

重要

確保您用於連線的 IP 位址已使用 Azure 入口網站Azure CLI 新增伺服器的防火牆規則

安裝 Node.js 和 MySQL 連接器

根據您的平台,依照適當小節中的指示安裝 Node.js。 使用 npm 將 mysql2 套件及其相依性安裝到您的專案資料夾中。

  1. 造訪 Node.js 下載頁面 \(英文\),然後選取您需要的 Windows 安裝程式選項。

  2. 建立本機專案資料夾,例如 nodejsmysql

  3. 開啟命令提示字元,然後將目錄變更為專案資料夾,例如 cd c:\nodejsmysql\

  4. 執行 NPM 工具將 mysql2 程式庫安裝至專案資料夾中。

    cd c:\nodejsmysql\
    "C:\Program Files\nodejs\npm" install mysql2
    "C:\Program Files\nodejs\npm" list
    
  5. 檢查npm list 輸出文字,以確認安裝。 版本號碼可能會隨著新的修補檔案發行而有所不同。

取得連線資訊

取得連線到 Azure Database for MySQL 所需的連線資訊。 您需要完整的伺服器名稱和登入認證。

  1. 登入 Azure 入口網站
  2. 從 Azure 入口網站的左側功能表中,選取 [所有資源],然後搜尋您所建立的伺服器 (例如 mydemoserver)。
  3. 選取伺服器名稱。
  4. 從伺服器的 [概觀] 面板,記下 [伺服器名稱] 和 [伺服器管理員登入名稱]。 如果您忘記密碼,您也可以從此面板重設密碼。

執行程式碼範例

  1. 將 JavaScript 程式碼貼入新文字檔,然後使用副檔名 .js 將其儲存到專案資料夾 (例如 C:\nodejsmysql\createtable.js 或 /home/username/nodejsmysql/createtable.js)。

  2. 將程式碼中的 hostuserpassworddatabase 設定選項取代為您在建立伺服器和資料庫時所指定的值。

  3. 取得 SSL 憑證:從 https://dl.cacerts.digicert.com/DigiCertGlobalRootCA.crt.pem 下載要透過 SSL 與「適用於 MySQL 的 Azure 資料庫」伺服器通訊所需的憑證,並將該憑證檔儲存到本機磁碟機。

    針對 Microsoft Internet Explorer 和 Microsoft Edge:在下載完成後,請將憑證重新命名為 DigiCertGlobalRootCA.crt.pem。

    關於主權雲端的伺服器憑證,請參閱下列連結:Azure Government由 21Vianet 營運的 Microsoft AzureAzure 德國

  4. ssl 設定選項中,將 ca-cert 檔案名稱取代為這個本機檔案的路徑。

  5. 開啟命令提示字元或 Bash 殼層,然後將目錄變更為您的專案資料夾 cd nodejsmysql

  6. 若要執行應用程式,請輸入後接檔案名稱的節點命令,例如 node createtable.js

  7. 在 Windows 上,如果節點應用程式不在您的環境變數路徑中,則可能需要使用完整路徑來啟動節點應用程式,例如 "C:\Program Files\nodejs\node.exe" createtable.js

連線、建立資料表及插入資料

使用下列程式碼搭配 CREATE TABLEINSERT 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

下一步