sql >> データベース >  >> RDS >> Sqlserver

SQLServer2017でテーブルを作成する

    ここでは、SQL Serverで3つのテーブルを作成し、それらを作成したスクリプトを分析します。また、別のスクリプトを実行して、テーブルが作成されたことを確認します。

    以前は、スクリプトからデータベースを作成していました。ただし、データベースは空のデータベースであり、テーブルやデータは含まれていません。

    次に、データベース用にいくつかのテーブルを作成します。

    まず、復習として、これまでに行ったことは次のとおりです。

    CREATE DATABASE Music;

    それは空のデータベースを作成しました。まだ実行していない場合は、そのスクリプトを実行してください。

    次に、次のスクリプトを実行します。

    USE Music;
    
    CREATE TABLE Artists (
      ArtistId int IDENTITY(1,1) NOT NULL PRIMARY KEY,
      ArtistName nvarchar(255) NOT NULL,
      ActiveFrom date
    );
    GO
    
    CREATE TABLE Genres (
      GenreId int IDENTITY(1,1) NOT NULL PRIMARY KEY,
      Genre nvarchar(50) NOT NULL
    );
    
    CREATE TABLE Albums (
      AlbumId int IDENTITY(1,1) NOT NULL PRIMARY KEY,
      AlbumName nvarchar(255) NOT NULL,
      ReleaseDate date NOT NULL,
      ArtistId int NOT NULL,
      GenreId int NOT NULL
    
      CONSTRAINT FK_Albums_Artists FOREIGN KEY (ArtistId)     
        REFERENCES dbo.Artists (ArtistId)     
        ON DELETE NO ACTION    
        ON UPDATE NO ACTION    
    );

    このスクリプトは、データベースに3つのテーブルを追加します。テーブルはArtistsと呼ばれます 、Genres 、およびAlbums

    SQL Operations Studio / AzureDataStudioでの結果は次のとおりです。

    どのGUIツールでも、ほぼ同じ方法でテーブルが表示されます。各テーブルを展開して、その列、インデックス、トリガー、キーなどを表示できます。を展開することもできます。 ノードを表示して、列とそのデータ型のリスト、および指定されている制約を表示します。

    CREATE TABLEの説明 ステートメント

    実行したスクリプトは、3つのCREATE TABLEで構成されています。 ステートメント—それぞれが異なるテーブルを作成します。スクリプトは外部キー制約も追加しますが、それについては後で説明します。

    とりあえず、最初のCREATE TABLEを分析しましょう スクリプト内のステートメント:

    USE Music;
    
    CREATE TABLE Artists (
      ArtistId int IDENTITY(1,1) NOT NULL PRIMARY KEY,
      ArtistName nvarchar(255) NOT NULL,
      ActiveFrom date
    );
    GO

    このSQLステートメントは、Artistsというテーブルを作成します ArtistIdと呼ばれる3つの列があります 、ArtistName 、およびActiveFrom 。各列の定義はその名前で始まり、そのデータ型とその列に適用される制約が続きます。

    「行ごと」の詳細な説明は次のとおりです。

    USE Music;
    この部分は実際にはCREATE TABLEの一部ではありません 声明。 音楽 に切り替えるためだけにあります データベース。サーバーには多くのデータベースが存在する可能性があり、正しいデータベースにテーブルを作成していることを確認する必要があります。すでに正しいデータベースで作業している場合は、この行は必要ありません。
    CREATE TABLE Artists (
    これはCREATE TABLEの始まりです 声明。その後にテーブル名(この場合はArtists)が続きます )の後に、テーブル定義を囲む最初の括弧が続きます。
    ArtistId int IDENTITY(1,1) NOT NULL PRIMARY KEY,
    次に、最初の列を定義します。この場合、これをArtistIdと呼びます。 、データ型を整数として指定します(int )、それをインデント列として設定します(この列はテーブルの一意のIDを提供し、値は行が追加されるたびに増加します)、(1,1) 値が1から始まり、1ずつ増加することを意味しますNOT NULL フィールドにnull値、およびPRIMARY KEYを含めることができないことを意味します この列をテーブルの主キーとして設定します。 主キー テーブルの一意の識別子フィールドとして構成されている列です。
    ArtistName nvarchar(255) NOT NULL,
    次の列はArtistNameと呼ばれます そのデータ型はnvarchar(255)です。 、これは、最大長が255文字の可変長Unicode文字列データを受け入れることを意味します。また、この列をNOT NULLに設定します nullエントリを含めることができないようにします。
    ActiveFrom date
    最後の列はActiveFromと呼ばれます dateのデータ型を受け入れるように設定します
    );
    次に)を使用します 定義を閉じるには、; ステートメントを終了します(セミコロンはステートメントターミネーターです)。
    GO
    Transact-SQLステートメントのバッチの終わりを通知します。これは実際にはTransact-SQLステートメントではありません。これは、sqlcmdおよびosqlユーティリティとSQL Server Management Studioコードエディタによって認識されるコマンドであり、Transact-SQLステートメントのバッチの終了を通知します。

    コマンドラインツールを使用するときにテーブル情報を取得する方法

    コマンドラインツールを使用する場合、データベーステーブルがサイドパネルにあり、シングルクリックで展開されるのを待っているのを見る余裕はありません。ただし、それは、テーブルやその他のデータベースオブジェクトに関する情報を表示できないという意味ではありません。

    コマンドラインツールを使用する場合は、次のステートメントを実行して、上記のデータベースのテーブルに関する情報を表示できます。

    USE Music; 
    SELECT column_name, data_type, character_maximum_length, is_nullable 
    FROM information_schema.columns;
    結果
    column_name  data_type  character_maximum_length  is_nullable
    -----------  ---------  ------------------------  -----------
    ArtistId     int        null                      NO         
    ArtistName   nvarchar   255                       NO         
    ActiveFrom   date       null                      YES        
    GenreId      int        null                      NO         
    Genre        nvarchar   50                        NO         
    AlbumId      int        null                      NO         
    AlbumName    nvarchar   255                       NO         
    ReleaseDate  date       null                      NO         
    ArtistId     int        null                      NO         
    GenreId      int        null                      NO         
    
    10 row(s) returned
    
    Executed in 1 ms

    問題のテーブルは、 Musicというデータベースにあります そのため、最初に切り替えます。

    WHEREを使用して、特定のテーブルに絞り込むこともできます 条項:

    USE Music; 
    SELECT column_name, data_type, character_maximum_length, is_nullable 
    FROM information_schema.columns 
    WHERE table_name = 'Artists';
    結果
    column_name  data_type  character_maximum_length  is_nullable
    -----------  ---------  ------------------------  -----------
    ArtistId     int        null                      NO         
    ArtistName   nvarchar   255                       NO         
    ActiveFrom   date       null                      YES        
    
    3 row(s) returned
    
    Executed in 1 ms

    information_schema.columnsによって返されるフィールドは他にもたくさんあります。 。 SELECT *を使用できます 必要に応じてすべてを返却します。

    テーブル情報を取得するためのコマンドラインメソッドは、GUIツールを使用する場合にも機能します(結局のところ、これらは単なるSQLステートメントです)。 sql-cli、sqlcmd、SSMS、Azure Data Studio、DBeaver、またはその他のSQL Server管理ツールを使用しているかどうかに関係なく、同じSQLステートメントを入力して同じデータを取得できます。

    GO コマンド

    GOを追加する必要がある場合があります スクリプトの最後まで(たとえば、sqlcmdを使用する場合)。

    複数行

    コマンドラインツールを使用して上記のスクリプトを複数行に広げようとすると、エラーが発生する場合があります。

    この場合は、各行の末尾に円記号を追加してみてください。このように:

    USE Music; \
    SELECT column_name, data_type, character_maximum_length, is_nullable \
    FROM information_schema.columns;

    バックスラッシュを追加する必要がない場合は、複数行のスクリプトを.sqlファイルに保存し、コマンドプロンプトから実行することもできます。

    コマンドプロンプトからスクリプトを実行する方法は、使用するコマンドラインユーティリティによって異なります。

    sqlcmdを使用してWindowsマシンに保存されたファイルを実行する方法は次のとおりです。

    sqlcmd -S myServer\instanceName -i C:\myScript.sql

    また、sql-cliを使用してMacに保存されたファイルを実行する方法は次のとおりです。

    .run /myScript.sql

    明らかに、フルパスとファイル名はファイル名と保存場所によって異なります。


    1. SQLが機能していません

    2. SQLAlchemy ON DUPLICATE KEY UPDATE

    3. MySQLで今日以上の日時

    4. PHPでPDOを使用してデータベースを作成できますか?