练习 - 连接到数据库并添加示例数据

已完成

在将数据库连接到应用之前,需要验证是否可以进行连接、添加基本表以及使用示例数据。

Azure SQL 数据库的基础结构、软件更新和修补程序由我们维护。 可以像对待任何其他 SQL Server 安装一样对待 Azure SQL 数据库。 例如,可以使用 Visual Studio、SQL Server Management Studio、Azure Data Studio 或其他工具来管理 Azure SQL 数据库。

访问数据库以及将其连接到应用的方式由自己决定。 若要获得一些使用数据库的经验,可以直接从门户连接到数据库、创建表并运行一些基本的 CRUD 操作。 在本课程中,你将学到:

  • Cloud Shell 是什么以及如何从门户中访问它。
  • 如何从 Azure CLI 访问有关数据库的信息,包括连接字符串。
  • 如何使用 sqlcmd 连接到数据库。
  • 如何使用基本表和一些示例数据初始化数据库。

Azure Cloud Shell 是什么?

Azure Cloud Shell 是一种基于浏览器的 shell 体验,用于管理和开发 Azure 资源。 将 Cloud Shell 视为在云中运行的交互式控制台。

在后台,Cloud Shell 在 Linux 上运行。 但是,根据想要使用 Linux 环境还是 Windows 环境,有两种体验可供选择:Bash 和 PowerShell。

可从任何位置访问 Cloud Shell。 除了门户网站,还可以从 shell.azure.com、Azure 移动应用或 Visual Studio Code 访问 Cloud Shell。

Cloud Shell 中包含常用工具和文本编辑器。 下面简要介绍 azjqsqlcmd 实用工具,在此练习中将使用这三个工具。

  • az 也称为 Azure CLI。 它是用于处理 Azure 资源的命令行界面。 可使用此接口获取有关数据库的信息,包括连接字符串。
  • jq 是一个命令行 JSON 分析器。 可通过管道将 az 命令的输出传送到此工具,以从 JSON 输出中提取重要字段。
  • sqlcmd 可用于在 SQL Server 上执行语句。 可使用 sqlcmd 创建与 Azure SQL 数据库的交互式会话。

获取有关 Azure SQL 数据库的信息

在连接到数据库之前,最好先验证该数据库是否存在且处于联机状态。

在这里,使用 az 实用工具列出数据库并显示有关物流数据库的一些信息,包括其最大大小和状态。

  1. 要运行的 az 命令需要资源组的名称和 Azure SQL 逻辑服务器的名称。 若要保存击键,请运行 azure configure 命令,将其指定为默认值。

    [server-name] 替换为创建的 Azure SQL 逻辑服务器的名称,并将 [resource-group] 替换为用于服务器的资源组。

    az configure --defaults group=[resource-group] sql-server=[server-name]
    

    注意

    根据你在门户中所处的窗格,SQL Server 名称可能会显示为 FQDN(例如,servername.database.windows.net)。 但是,对于此命令,只需要不带 .database.windows.net 后缀的逻辑名称。

  2. 运行以下 az sql db list 命令,列出 Azure SQL 逻辑服务器上的所有数据库:

    az sql db list
    

    可获得大段 JSON 作为输出。

  3. 由于我们只想获取数据库名称,因此请再次运行该命令。 但此时,通过管道将输出传送到 jq,以仅显示名称字段。

    az sql db list | jq '[.[] | {name: .name}]'
    

    应会获得此输出:

    [
      {
        "name": "Logistics"
      },
      {
        "name": "master"
      }
    ]
    

    Logistics 是你的数据库。 与 SQL Server 一样,master 系统数据库包括服务器元数据,如登录名和系统配置设置。

  4. 运行以下 az sql db show 命令,获取有关 Logistics 数据库的详细信息:

    az sql db show --name Logistics
    

    与前面一样,可看到大段 JSON 作为输出。

  5. 再次运行该命令。 这一次,通过管道将输出传送到 jq,将输出限制为物流数据库的名称、最大大小和状态

    az sql db show --name Logistics | jq '{name: .name, maxSizeBytes: .maxSizeBytes, status: .status}'
    

    你会看到,数据库处于联机状态,以及数据库可以存储的最大数据量。

    {
      "name": "Logistics",
      "maxSizeBytes": 2147483648,
      "status": "Online"
    }
    

连接到数据库

你已经对数据库有所了解,现在来使用 sqlcmd 连接到数据库,创建一个包含运输司机相关信息的表,并执行一些基本 CRUD 操作。

请记住,CRUD 表示“创建”、“读取”、“更新”和“删除”。 这些术语是指对表数据执行的操作,是需要对应用执行的 4 个基本操作。 现在很适合验证你可以执行其中每个操作。

  1. 运行以下 az sql db show-connection-string 命令,以 sqlcmd 可以使用的格式获取 Logistics 数据库的连接字符串:

    az sql db show-connection-string --client sqlcmd --name Logistics
    

    输出如以下示例所示。 复制此输出以在下一步使用。

    "sqlcmd -S tcp:contoso-1.database.windows.net,1433 -d Logistics -U <username> -P <password> -N -l 30"
    
  2. 运行上一步输出中的 sqlcmd 语句,创建交互式会话。 删除两边的引号,并将 <username><password> 替换为在创建数据库时指定的用户名和密码。 下面是一个示例:

    sqlcmd -S tcp:contoso-1.database.windows.net,1433 -d Logistics -U martina -P 'password1234$' -N -l 30
    

    提示

    将密码置于单引号中,避免将“&”和其他特殊字符解释为处理指令。

    重要

    你可能会看到类似于以下示例的错误消息:

    Sqlcmd: Error: Microsoft ODBC Driver 17 for SQL Server:
    Cannot open server 'contoso' requested by the login.
    Client with IP address 'nnn.nnn.nnn.nnn' is not allowed to access the server.
    To enable access, use the Windows Azure Management Portal or run sp_set_firewall_rule
    on the master database to create a firewall rule for this IP address or address range.
    It may take up to five minutes for this change to take effect.
    

    如果发生此错误,则需要为客户端添加另一个防火墙规则。 为此,请执行以下步骤:

    • 登录到 Azure 门户

    • 在 Azure 主页的“Azure 服务”下,选择“所有资源”。 此时将显示“所有资源”窗格。

    • 搜索并选择数据库。 此时将显示 SQL 数据库的“物流”窗格。

    • 在顶部菜单栏中,选择“设置服务器防火墙”。 此时将显示“网络”窗格。

    • 在“防火墙规则”部分中,选择“添加防火墙规则”。 “添加防火墙规则”窗格随即出现。

    • 指定唯一的“规则名称”,然后从错误消息中为“启动 IP”和“结束 IP”字段输入 IP 地址。 选择“确定”。

    • 选择“保存” 。

    • 再次运行 sqlcmd 语句以启动交互式 sqlcmd 会话。 它应该类似于以下示例:

    sqlcmd -S tcp:contoso-1.database.windows.net,1433 -d Logistics -U martina -P 'password1234$' -N -l 30
    

    现在已经启动了会话 sqlcmd,其余命令将使用语言 Transact-SQL 或 T-SQL。

    提示

    在此模块中运行 T-SQL 命令时,第二行的 GO 可能不会复制到 sqlcmd 提示符。 输入命令的第一行后,可能需要键入命令 GO。 没有它,T-SQL 命令不会执行,因此请确保运行 GO 命令。

  3. sqlcmd 会话中,运行以下 T-SQL 语句以创建名为 Drivers 的表格:

    CREATE TABLE Drivers (DriverID int, LastName varchar(255), FirstName varchar(255), OriginCity varchar(255));
    GO
    

    该表包含四列:唯一标识符、司机的姓氏和名字以及司机出发城市。

  4. 运行以下 T-SQL 语句以验证 Drivers 表格是否存在:

    SELECT name FROM sys.tables;
    GO
    

    应会获得此输出:

    name
    --------------------------------------------------------------------------------------------------------------------------------
    Drivers
    
    (1 rows affected)
    
  5. 若要测试创建操作,请运行以下 T-SQL 语句以将示例行添加到表中:

    INSERT INTO Drivers (DriverID, LastName, FirstName, OriginCity) VALUES (123, 'Zirne', 'Laura', 'Springfield');
    GO
    

    此输出指示操作已成功:

    (1 rows affected)
    
  6. 若要测试读取操作,请运行以下 T-SQL 语句,列出表中所有行的 DriverIDOriginCity 列:

    SELECT DriverID, OriginCity FROM Drivers;
    GO
    

    你会获得一个结果,包含在上一步中所创建的行的 DriverIDOriginCity

    DriverID    OriginCity
    ----------- --------------------------
            123 Springfield
    
    (1 rows affected)
    
  7. 若要测试更新操作,请运行以下 T-SQL 语句,将 DriverID 为 123 的司机的出发城市从“Springfield”更改为“Boston”:

    UPDATE Drivers SET OriginCity='Boston' WHERE DriverID=123;
    GO
    
  8. 运行以下 T-SQL 语句以再次列出 DriverIDOriginCity 列:

    SELECT DriverID, OriginCity FROM Drivers;
    GO
    

    现在你应获得以下输出。 请注意 OriginCity 如何反映对 Boston 的更新。

    DriverID    OriginCity
    ----------- --------------------------
            123 Boston
    
    (1 rows affected)
    
  9. 最后,运行以下 T-SQL 语句以删除记录,从而测试删除操作:

    DELETE FROM Drivers WHERE DriverID=123;
    GO
    
    (1 rows affected)
    
  10. 运行以下 T-SQL 语句以验证 Drivers 表格为空:

    SELECT COUNT(*) FROM Drivers;
    GO
    

    你可以看到表中不包含任何行。

    -----------
              0
    
    (1 rows affected)
    

现在,你已经大致了解了如何从 Cloud Shell 使用 Azure SQL 数据库,可以获取喜爱的 SQL 管理工具的连接字符串,无论是通过 SQL Server Management Studio、Visual Studio 还是其他工具。

借助 Cloud Shell,可以轻松访问和使用 Azure 资源。 由于 Cloud Shell 基于浏览器,因此可以从 Windows、macOS 或 Linux(实质上是任何带有 Web 浏览器的系统)访问它。

对于通过运行 Azure CLI 命令来获取有关 Azure SQL 数据库的信息,你获得了一些实践经验。 作为额外收获,你练习了 T-SQL 技能。

在下一单元中,我们将结束此模块并介绍如何关闭数据库。