快速入门:使用 Node.js 进行连接并查询 Azure Database for MySQL 中的数据

注意

本文引用了 CentOS,这是一个接近生命周期结束 (EOL) 状态的 Linux 发行版。 请相应地考虑你的使用和规划。 有关详细信息,请参阅 CentOS 生命周期结束指南

适用于:Azure Database for MySQL - 单一服务器

重要

Azure Database for MySQL 单一服务器即将停用。 强烈建议升级到 Azure Database for MySQL 灵活服务器。 有关如何迁移到 Azure Database for MySQL 灵活服务器的详细信息,请参阅 Azure Database for MySQL 单一服务器发生了什么情况?

在本快速入门中,你将使用 Node.js 连接到 Azure Database for MySQL。 然后使用 SQL 语句在 Mac、Linux 和 Windows 平台的数据库中查询、插入、更新和删除数据。

本文假设你熟悉如何使用 Node.js 进行开发,但不熟悉如何使用 Azure Database for MySQL。

先决条件

重要

确保已使用 Azure 门户Azure CLI 将服务器的防火墙规则添加到连接的 IP 地址

安装 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. 从服务器的“概览”面板中记下“服务器名称”和“服务器管理员登录名”。 如果忘记了密码,也可通过此面板来重置密码。 Azure Database for MySQL 服务器名称

运行代码示例

  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 与 Azure Database for MySQL 服务器进行通信所需的证书,并将证书文件保存到本地驱动器。
  4. ssl 配置选项中,用此本地文件的路径替换 ca-cert 文件名。
  5. 打开命令提示符或 bash shell,然后将目录更改为项目文件夹 cd nodejsmysql
  6. 若要运行应用程序,请输入 node 命令并后接文件名,例如 node createtable.js
  7. 在 Windows 上,如果 Node 应用程序不在环境变量路径中,则可能需要使用完整路径来启动 Node 应用程序,例如 "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.chinacloudapi.cn',
    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.chinacloudapi.cn',
    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.chinacloudapi.cn',
    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.chinacloudapi.cn',
    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

后续步骤