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

初心者向けのSQLCREATETABLE

    この記事には、基本的なSQL CREATE TABLEが含まれています 初心者がデータベースプロジェクトの基本的なテーブルを作成するために使用できるステートメント。

    基本構文

    SQLでテーブルを作成するための基本的な構文は、次のようになります。

    CREATE TABLE TableName (
        Column1 datatype optional_constraints,
        Column2 datatype optional_constraints,
        Column3 datatype optional_constraints,
        ...
    );

    場所:

    • TableName テーブルに付けたい名前です
    • Column1 、などは列に付ける名前です
    • datatype 各列に割り当てるデータ型です。ほとんどのRDBMSでは、各列にデータ型を割り当てる必要があります。 SQLiteでは、これはオプションです。
    • optional_constraints は、列に対して適用する制約のオプションのリストです。

    ほとんどのDBMSはこれよりも複雑な構文を使用します(つまり、より多くのオプションを提供します)が、これは通常、テーブルを作成するために必要な基本的な構文です。ほとんどの初心者はこの構文から始めて、進歩するにつれてより高度なオプションを学びます。

    基本的な例

    基本的な例は次のとおりです。

    CREATE TABLE Pets
    (
        PetId       int NOT NULL PRIMARY KEY,
        PetTypeId   int NOT NULL,
        OwnerId     int NOT NULL,
        PetName     varchar(60) NOT NULL,
        DOB         date NULL
    );

    注意すべき点は次のとおりです。

    • テーブル名と列名はどのような場合でもかまいません。たとえば、PetIdの代わりに 私はそれをpetidと呼ぶことができました 、PETID 、またはpet_id 。一部のDBMS(Postgresなど)は、テーブルとその列名をクエリするときに大文字と小文字を区別しますが、そうでないもの(SQL Serverなど)もあります。
    • 一部のDBMSは、データ型に異なる名前を使用します。
    • NOT NULL この列に値を含める必要があることを指定するテーブル制約です(つまり、NULLを含めることはできません 値)。
    • NULL 列にNULLを含めることができることを意味します 値。一部のDBMS(DB2など)はNULLをサポートしていません キーワードであるため、このようなDBMSを使用する場合は省略してください。
    • PRIMARY KEY テーブルに主キー制約を追加します。すべてのテーブルで主キーを指定することをお勧めします。
    • 同じ名前のテーブルがデータベースにすでに存在する場合、エラーが発生します。既存のテーブルを削除するか、変更する(または作成するテーブルの名前を変更する)必要があります。

    外部キーを使用してテーブルを作成する

    次の例では、2つの外部キーを持つテーブルを作成します。外部キーは、2つのテーブル間の関係を作成するために使用されます。

    CREATE TABLE Pets
    (
        PetId       int NOT NULL PRIMARY KEY,
        PetTypeId   int NOT NULL REFERENCES PetTypes (PetTypeId),
        OwnerId     int NOT NULL REFERENCES Owners (OwnerId),
        PetName     varchar(60) NOT NULL,
        DOB         date NULL
    );

    REFERENCES 句は、2つの列に対する外部キーを定義するために使用されます。私たちの場合、外部キーは以下を強制します:

    • Pets.PetTypeId 列はPetTypes.PetTypeIdを参照します 列(Pets.PetTypeIdに入る任意の値 列のPetTypes.PetTypeIdに一致する値が含まれている必要があります 列)。
    • Pets.OwnerId 列はOwners.OwnerIdを参照します 列(Pets.OwnerIdに入る任意の値 列のOwners.OwnerIdに一致する値が含まれている必要があります 列)。

    ALTER TABLEを使用して、外部キーを後で追加することもできます。 必要に応じてステートメント。

    デフォルトの制約を使用してテーブルを作成する

    次の例では、DEFAULTを使用してテーブルを作成します 制約。

    CREATE TABLE OrderItems
    (
        OrderId     int NOT NULL PRIMARY KEY,
        OrderItem   int NOT NULL,
        ProductId   int NOT NULL,
        Quantity    int NOT NULL DEFAULT 1,
        ItemPrice   decimal(8,2) NOT NULL 
    );

    タイムスタンプ列を含むテーブルを作成する

    DEFAULTを使用できます 新しい行が挿入されるたびに現在の日付と時刻を列に自動的に挿入するための制約。これは、タイムスタンプの挿入と呼ばれることがよくあります。

    異なるDBMSは、異なる関数を使用して現在の日付を返します。

    これはSQLServerでそれを行う例です。

    CREATE TABLE Users
    (
        UserId         int NOT NULL PRIMARY KEY,
        FirstName      varchar(60) NOT NULL,
        LastName       varchar(60) NOT NULL,
        DateInserted   datetime DEFAULT CURRENT_TIMESTAMP
    );

    SQL Serverでは、CURRENT_TIMESTAMP GETDATE()に相当するANSIです 機能。

    または、SYSDATETIME()を使用することもできます より高精度のタイムスタンプの場合:

    CREATE TABLE Users
    (
        UserId         int NOT NULL PRIMARY KEY,
        FirstName      varchar(60) NOT NULL,
        LastName       varchar(60) NOT NULL,
        DateInserted   datetime2 DEFAULT SYSDATETIME()
    );

    より高い精度をサポートするには、列のデータ型が datetime2である必要があります 。

    SQL Serverには、日付/時刻値のデータ型がかなりあります。リストについては、SQLServerの日付と時刻の関数を参照してください。

    各DBMSには、日付と時刻を返すための独自の関数があります。主なもののリストは次のとおりです:

    DB2 CURRENT_DATE
    MySQL CURRENT_DATE またはNOW()
    Oracle SYSDATE
    PostgreSQL CURRENT_DATE
    SQL Server CURRENT_TIMESTAMPGETDATE() またはSYSDATETIME()
    SQLite datetime('now')

    参照:

    • SQLServerの日付と時刻の関数
    • SQLiteの日付と時刻の関数

    値が自動的に増加する列を作成する

    新しい行が挿入されるたびに値を自動的にインクリメントする列を作成する必要がある場合があります。これらは通常、使用されているDBMSに応じて、「自動インクリメント」または「ID」列と呼ばれます。

    SQL Serverでは、IDENTITYを使用します 引数:

    CREATE TABLE Users
    (
        UserId         int NOT NULL IDENTITY(1,1) PRIMARY KEY,
        FirstName      varchar(60) NOT NULL,
        LastName       varchar(60) NOT NULL,
        DateInserted   datetime2 DEFAULT SYSDATETIME()
    );

    この場合、IDENTITY(1,1)を使用します 。

    • 最初の1 シードです。これは、カウントを開始する値を指定します(つまり、これはテーブルに挿入された最初の行の値です)。
    • 2番目の1 増分です。これは、ロードされた前の行のID値に追加された増分値です。

    各DBMSには、自動インクリメント列を作成するための独自のキーワードがあります。

    • MySQLとMariaDbでは、AUTO_INCREMENTを使用します
    • SQLiteには、いくつかのオプションがあります(AUTOINCREMENTを含む) キーワード)
    • PostgreSQLでは、SERIALを使用します
    • OracleDatabase12からc 、IDENTITYキーワードを使用して、自動インクリメント列を作成できるようになりました。例は次のようになります。UserId NUMBER GENERATED BY DEFAULT ON NULL AS IDENTITY

    詳細オプション

    ほとんどのDBMSでは、テーブルを作成するときに詳細オプションを指定できます。使用可能なオプションは、DBMSによって大きく異なります。

    この記事で指定されていないオプションが必要な場合は、DBMSのドキュメントを参照してください。

    多くの高度なオプションは、GUIを介して設定できます(データベースへの接続に使用するツールによって異なります)。 GUIを介していつでもテーブルを作成または変更し、その「Script as Create」(または同様の)オプションを使用して、そのようなテーブルを作成するために実行する必要のあるSQLコードを確認できます。このコードを使用して、テーブル名や列名などを変更し、前のテーブルの定義に基づいてまったく新しいテーブルを作成できます。


    1. クエリを使用してVIEWddlを取得する

    2. PostgreSQLVACUUMおよびANALYZEのベストプラクティスのヒント

    3. OnItemClickListenerを使用してListViewおよびデータベースからアイテムを削除する

    4. SQL Server(T-SQL)でパーティションを2つに分割する