演習 - データベースに接続してサンプル データを追加する
データベースをアプリに接続する前に、データベースに接続し、基本的なテーブルを追加し、サンプル データを操作できることを確認する必要があります。
Azure SQL Database のインフラストラクチャ、ソフトウェア更新プログラム、修正プログラムは Microsoft で維持します。 Azure SQL データベースは、他の SQL Server インストールと同様に扱うことができます。 たとえば、Visual Studio、SQL Server Management Studio、Azure Data Studio、またはその他のツールを使用して、ご自身の Azure SQL データベースを管理することができます。
任意の方法でデータベースにアクセスしてそれをアプリに接続できます。 データベースの操作経験をある程度積むために、ポータルから直接接続し、テーブルを作成し、基本的な CRUD 操作をいくつか実行してみましょう。 ここでは、次のことを学習します。
- Cloud Shell の概要と、ポータルからアクセスする方法。
- 接続文字列などのデータベースに関する情報に Azure CLI からアクセスする方法。
-
sqlcmd
を使用してデータベースに接続する方法。 - 基本的なテーブルといくつかのサンプル データを使用してデータベースを初期化する方法。
Azure Cloud Shell とは
Azure Cloud Shell は、Azure リソースを開発および管理するための、ブラウザー ベースのシェル環境です。 Cloud Shell は、クラウド上で動作する対話型コンソールと考えてください。
バックグラウンドでは Cloud Shell は Linux 上で動作しています。 しかし、Linux 環境と Windows 環境のどちらを好むかによって、Bash と PowerShell の 2 つのエクスペリエンスのいずれかを選択できます。
Cloud Shell は任意の場所からアクセスできます。 ポータル以外にも、shell.azure.com、Azure mobile app、または Visual Studio Code からも Cloud Shell にアクセスできます。
Cloud Shell には、一般的なツールとテキスト エディターが含まれています。 ここでは、この演習で使用する 3 つのツールである az
、jq
、および sqlcmd
ユーティリティについて簡単に説明します。
-
az
は Azure CLI とも呼ばれます。 Azure のリソースを使用するためのコマンド ライン インターフェイスです。 このインターフェイスを使用して、接続文字列など、データベースに関する情報を取得します。 -
jq
はコマンドライン JSON パーサーです。az
コマンドの出力をこのツールにパイプして、JSON 出力から重要なフィールドを抽出します。 -
sqlcmd
を使用すると、SQL Server 上でステートメントを実行できます。sqlcmd
を使用して、Azure SQL データベースとの対話型セッションを作成します。
Azure SQL データベースに関する情報を入手する
データベースに接続する前に、データベースが存在していて、オンラインであることを確認することをお勧めします。
ここでは、az
ユーティリティを使用してデータベースを一覧表示し、最大サイズと状態などの Logistics データベースに関する一部の情報を表示します。
shell.azure.com にアクセスするか、Azure portal で、Azure portal ウィンドウのグローバル コントロールから Cloud Shell ボタンを選びます。
オプションが示されたら、この学習演習に対して Bash を選びます。
[使用を開始する] ポップアップで、[No storage account required] (ストレージ アカウントは必要ありません) を選びます。 [サブスクリプション] ドロップダウンから自分のサブスクリプションを選びます。 適用を選択します。 新しい Cloud Shell のターミナルが読み込まれます。
az
コマンドを実行する場合、リソース グループの名前と Azure SQL 論理サーバーの名前が必要です。 キーストロークを保存するには、次のazure configure
コマンドを実行して既定値として指定します。[server-name]
は作成した Azure SQL 論理サーバーの名前に置き換え、[resource-group]
はサーバーに使ったリソース グループに置き換えます。ヒント
Cloud Shell に貼り付けるには、
Ctrl+Shift+V
の代わりにCtrl+V
を使用します。Ctrl+C
を使用して、ターミナルから現在のコマンドをクリアします。az configure --defaults group=[resource-group] sql-server=[server-name]
注
Azure portal で操作中のペインに応じて、SQL Server 名が完全修飾ドメイン名 (FQDN) (例:
servername.database.windows.net
)、またはスタンドアロン (servername
) として表示されます。 このコマンドに対しては、 サフィックスの "ない" 論理名のみが必要です。.database.windows.net
次の
az sql db list
コマンドを実行して、Azure SQL 論理サーバー上のすべてのデータベースの一覧を表示します。az sql db list
出力として JSON の大きなブロックが得られます。
データベース名のみを取得したいので、コマンドをもう一度実行します。 しかし、今回は、出力を
jq
にパイプして、名前フィールドのみを表示します。az sql db list | jq '[.[] | {name: .name}]'
次のような出力が得られるはずです。
[ { "name": "Logistics" }, { "name": "master" } ]
Logistics
は、ご使用のユーザー データベースです。 SQL Server と同様、master
システム データベースには、ログインやシステム構成の設定などの、サーバーのメタデータが含まれています。次の
az sql db show
コマンドを実行して、Logistics
データベースに関する詳細情報を取得します。az sql db show --name Logistics
前回と同様に、出力として大きなブロックの JSON が表示されます。
このコマンドをもう一度実行します。 今回は、出力を
jq
にパイプして、Logistics データベースの名前、最大サイズ、状態のみに出力を制限します。az sql db show --name Logistics | jq '{name: .name, maxSizeBytes: .maxSizeBytes, status: .status}'
データベースがオンラインであること、データベースに格納できるデータの最大量がわかります。
{ "name": "Logistics", "maxSizeBytes": 2147483648, "status": "Online" }
Azure SQL Database の無料プランを選択した場合、無料の仮想コア秒を節約するためにサーバーレス データベースが自動的に一時停止するので、非アクティブで一定期間が経過すると、
Logistics
データベースが一時停止状態になることがあります。
データベースに接続する
"接続文字列" には、アプリケーションがデータベースに接続するために必要なすべての情報が含まれています。 Cloud Shell を使用している間に、まず接続文字列を取得しましょう。
Cloud Shell の接続文字列
次の az sql db show-connection-string
コマンドを実行し、Logistics
データベースへの接続文字列を、sqlcmd
が使える形式で取得します。
az sql db show-connection-string --client sqlcmd
出力は次の例のようになります。 次の手順で使用するために、この出力をコピーします。
"sqlcmd -S tcp:<server-name>.database.windows.net,1433 -d Logistics -U <username> -P <password> -N -l 30"
Azure portal の接続文字列
Azure portal には、Azure SQL データベースに簡単にアクセスできるように、さまざまなデータ プロバイダー用の接続文字列が用意されています。
- Azure portal で、SQL データベースに移動します。
- SQL データベースのサービス メニューの [設定]で、[接続文字列] を選びます。
- 目的のデータ プロバイダーと接続方法を選びます。
Visual Studio Code を使用してデータベースに接続する
グラフィカル ツールを使用して、新しい Azure SQL データベースに接続してみましょう。 Visual Studio Code は、Linux、macOS、Windows 向けの人気のあるオープンソース コード エディターです。 mssql 拡張機能を含む拡張機能をサポートしています。 SQL Server、Azure SQL Database、Azure SQL Managed Instance、Fabric の SQL データベース、その他のプラットフォームに対してクエリを実行するための拡張機能を使用できます。
Visual Studio Code をダウンロードして、インストールします。
Visual Studio Code で、ウィンドウの横のアクティビティ バーにある [拡張機能] アイコンを選択して、[拡張機能] ビューに移動します。 mssql を検索し、[インストール] を選択して、拡張機能と mssql 拡張機能をローカル ワークステーションに追加します。
ヒント
データベース オブジェクトの将来のアプリケーション プロジェクト開発には、Visual Studio Code 用の SQL Database プロジェクトの拡張機能も使用してください。 このツールを使用すると、ソース管理でデータベースを操作し、既存のデータベース スキーマをキャプチャし、新しいオブジェクトを設計して、データベースに発行できます。
拡張機能の一覧で、SQL Server 拡張機能を選びます。
[接続] で、[接続の追加] を選びます。
[プロファイル名] で、新しい接続にカスタムの覚えやすい名前を付けます。
接続情報を提供する方法は次のように複数あります。
- [パラメーター] を選んで、Azure SQL 論理サーバー名、データベース名、ユーザー名、パスワードを手動で入力します。
- [接続文字列] を選んで、データベースの接続文字列を貼り付けてから、ユーザー名とパスワードを追加します。
- [Azure を参照します] を選んで、VS Code で Azure サブスクリプションに接続し、新しい Azure SQL データベースを一覧から選びます。
この学習演習では、[Azure を参照します] を選びます。 VS Code から Azure サブスクリプションに接続します。
一覧からご使用のサブスクリプションを選びます。
一覧からご使用のリソース グループを選びます。
一覧からご使用のサーバーとデータベースを選びます。
[認証の種類] が [SQL ログイン] に設定された状態で、直近のモジュールで作成したユーザー名とパスワードを指定します。
[接続] を選択します。
正常に接続すると、[接続の追加] ダイアログが表示されなくなります。 サーバー接続と、テーブル、ビューなどのオブジェクト エクスプローラーに置き換えられます。
Visual Studio Code を使用してデータベースにクエリを実行する
ご使用の Azure SQL データベースで基本的な CRUD ("作成、読み取り、更新、削除") 操作を実行する一連のコマンドを実行してみましょう。
[接続] の下にあるサーバー名の行を右クリックし、[新しいクエリ] を選びます。
新しいクエリ ウィンドウで、
Drivers
という名前の新しいテーブルを作成する次のコマンドを貼り付けて最初のデータベース オブジェクトを作成します。CREATE TABLE Drivers (DriverID int IDENTITY(1,1), LastName varchar(255), FirstName varchar(255), OriginCity varchar(255)); GO
このテーブルには、一意の識別子、ドライバーの姓、名、ドライバーの出発地 (市区町村) という 4 つの列があります。
[クエリの実行] ボタンを選んで、クエリ ウィンドウで T-SQL コマンドを実行します。
ヒント
クエリ ウィンドウで多数の中から 1 つの T-SQL コマンドを実行するには、目的のクエリをドラッグして選び、次に [実行] を選びます。
Visual Studio Code でのほぼすべてのものと同様に、キーボード ショートカットを Visual Studio Code でカスタマイズできます。 Windows では、[実行] の既定のキーボード ショートカットは
Ctrl + Shift + E
です。次の T-SQL ステートメントを実行してデータベースのメタデータに対するクエリを実行することで、
Drivers
テーブルが存在することを確認します。SELECT name FROM sys.tables; GO
[クエリの結果] タブの [結果] に、テーブルの一覧に
Drivers
が存在することが示されます。name ------- Drivers
テーブルに行を追加しましょう。 次の T-SQL ステートメントを実行して、サンプル行をテーブルに追加します。
INSERT INTO Drivers (LastName, FirstName, OriginCity) VALUES ('Zirne', 'Laura', 'Springfield'); GO
この出力は、操作が成功したことを示します。
3:14:01 PM Started executing query at Line 7 (1 row affected) Total execution time: 00:00:00.044
挿入した行を表示するには、次の T-SQL ステートメントを実行して、テーブルのすべての行の
DriverID
列とOriginCity
列を一覧表示します。SELECT DriverID, OriginCity FROM Drivers; GO
前のステップで作成した行の
DriverID
とOriginCity
を含む 1 つの結果が得られます。DriverID OriginCity ----------- -------------------------- 1 Springfield
行を更新し、
OriginCity
を変更してみましょう。 次の T-SQL ステートメントを実行して、DriverID
が1
のドライバーについて出発都市を "Springfield" から "Boston" に変更します。UPDATE Drivers SET OriginCity='Boston' WHERE DriverID=1; GO
[クエリ結果] ウィンドウにクエリの実行を確認するメッセージが表示されます。
3:14:29 PM Started executing query at Line 13 (1 row affected) Total execution time: 00:00:00.031
次の T-SQL ステートメントを実行して、
DriverID
列とOriginCity
列を再び一覧表示します。SELECT DriverID, OriginCity FROM Drivers; GO
今度は、次のような出力が得られるはずです。
OriginCity
でボストンへの更新がどのように反映されているかを確認します。DriverID OriginCity ----------- -------------------------- 1 Boston
最後に、レコードを削除する次の T-SQL ステートメントを実行して、その行を削除しましょう。
DELETE FROM Drivers WHERE DriverID=1; GO
3:15:00 PM Started executing query at Line 16 (1 row affected) Total execution time: 00:00:00.017
次の T-SQL ステートメントを実行し、
Drivers
テーブルが空であることを確認します。SELECT COUNT(*) FROM Drivers; GO
テーブルに行がないことがわかります。
----------- 0
これで、Cloud Shell と Visual Studio で Azure SQL Database を操作するための一般的な考え方が得られました。 接続文字列は、SQL Server Management Studio、Visual Studio、カスタム アプリケーションなどの、お気に入りの SQL 管理ツールに使用できます。
Cloud Shell を使用すると、任意の種類の Azure リソースに簡単にアクセスして操作できます。 Cloud Shell はブラウザー ベースであるため、Windows、macOS、Linux などの、Web ブラウザーがある任意のシステムからアクセスできます。
Visual Studio Code で T-SQL コマンドを実行する実践的な経験を積み、T-SQL スキルを訓練しました。
次のユニットでは、このモジュールをまとめて、データベースを破棄する方法について説明します。