SQLite テーブルの作成、変更、削除

最終更新日:2020年2月26日 08:08:49 (UTC/GMT +8 時間)

はじめに

SQLite CREATE TABLE コマンドは SQLite データベースに新しいテーブルを作成するために使用されます。 また、インデックス、ビュー、トリガーを作成するためにも使用されます。

  • 新しいテーブルの名前
  • 新しいテーブルが作成されるデータベース

CREATE TABLEコマンドは新しいテーブルの次の属性を指定します。

  • テーブルの各列の名前
  • テーブルの各列の宣言された型、および各列は NULL – NULL 値、INTEGER – 符号付き整数、REAL – 浮動小数点値、TEXT – 文字列、BLOB – データの塊、のいずれかのデータ型でなければなりません。
  • 各カラムで使用するデフォルトの照合順序
  • オプションで、テーブルの PRIMARY KEY を指定します。 単一カラムおよび複合 (複数カラム) のプライマリキーの両方がサポートされます。 SQLite は UNIQUE、NOT NULL、CHECK、および FOREIGN KEY 制約をサポートします。
  • ユニーク インデックスは UNIQUE または PRIMARY KEY 制約を強制するために自動的に作成され、DROP INDEX コマンドを使用して手動で削除することができません。
  • 目次

    命名規則

    構文

    ALTER TABLE

    DROP TABLE

    命名規則

    それぞれのデータベース、テーブル、列、インデックス、トリガ、ビューにはそれを識別できるような名前を付けるべきであると言えます。 識別子名は文字またはアンダースコア文字で始めなければならず、その後にいくつかの英数字またはアンダースコアを続けることができます。 この名前に他の文字を使用することはできません。

    The valid identifier names are :

    • tsttable
    • tst_table
    • table456
    • z

    However the following are invalid identifier:

    • tst table
    • tst-table
    • 456table

    Other characters can be used in identifiers if they are enclosed in double quotes (or square brackets), for example:

    • “test table”
    • “tst table”
    • “123 456”

    Reserved Keywords

    Each CREATE TABLE statement must specify a name for the new table. Table names that begin with “sqlite_” are reserved for internal use. It is an error to attempt to create a table with a name that starts with “sqlite_”.

    Name Length

    In SQLite there is not restricted upper limit on the length of an identifier name, so you can use a manageable length of identifier name to be use.

    Case Sensitivity

    For the most part, case sensitivity in SQLite is off. テーブル名とカラム名は大文字、小文字、または混合で入力でき、同じデータベース オブジェクト名の異なる大文字を互換的に使用できます。

    注意:

    新しいテーブルが作成されるとき、それはデータベース内になければならず、データベース名は “main”, “temp” または接続されたデータベースの名前のいずれかでなければなりません。データベース名とTEMPまたはTEMPORARYキーワードの両方を使用することはできません。データベース名が指定されず、TEMPキーワードが存在しない場合、テーブルはメイン・データベースに作成されます。

    同じ名前のテーブル、インデックス、またはビューを含むデータベースにテーブルを作成しようとすると、エラーが発生しますが、CREATE TABLE文の一部として “IF NOT EXISTS” 句が指定されている場合は、何の効果もありません。

    CREATE TABLE table-name (column-def);

    TEMPORARY – 必要であれば、テーブルは一時的なものとして宣言することができます。 – A column definition consists of the name of the column, and followed by the declared type of the column which is optional, then one or more optional column constraints.

    A column definition can be defined as follows:

    name column-constraint]

    Example

    Here is a simple Create Table Statement:

    CREATE TABLE company(com_id text(4),com_name text(15));

    To see the structure of the table, use the following commands:

    Sample Output:

    sqlite> .mode columnsqlite> .header onsqlite> PRAGMA table_info(company);cid name type notnull dflt_value pk---------- ---------- ---------- ---------- ---------- ----------0 com_id text(4) 0 01 com_name text(15) 0 0

    Here the .mode command shows the columns and .header on command shows the header on.

    Create a table to use TEMPORARY clause

    CREATE TABLE TEMPORARY (com_id text(4),com_name text(15));  

    This time table is created in temp databases. If you want to see the created table execute the following command-

    sqlite> .tablesTEMPORARY 

    If you use the table name with TEMPORARY keyword an error message will appear.

    sqlite> create table TEMPORARY company( ...> com_id text(4), ...> com_name text(15));Error: near "company": syntax error 

    メイン データベース内の既存のテーブルのコピーを作成する

    作業中の元のテーブルのバックアップを取ることは開発者にとって非常に必要で、開発時に不用意または適当に有害な措置が行われることはないため、このようなことはありません。 また、列名を変更したり、sqliteテーブルから1つ以上の列を削除する必要があるかもしれませんので、作業テーブルのバックアップを時々取るのは良い習慣です。

    すべてのレコードを含む会社テーブルのバックアップを取りたい場合は、次のステートメントを使用できます

    CREATE TABLE backup_company AS SELECT * FROM company ;

    会社テーブルの構造だけのバックアップを取りたい場合は、次のステートメントを使用できます。

    CREATE TABLE backup_company AS SELECT * FROM company LIMIT 0;

    ALTER TABLE

    ALTER TABLE コマンドは、SQLite では、ユーザーがテーブル名を変更したり既存のテーブルに新しい列を追加したりするためにのみ使用することができます。 列の名前を変更したり、列を削除したり、テーブルから制約を追加または削除することはできません。

    RENAME TO コマンドは table-name によって識別されるテーブルを new-table-name に変更するために使用されます。

    名前を変更されたテーブルがトリガーまたはインデックスを含んでいる場合、その影響はなく、これらは名前を変更する前と同様にそのまま残ります。

    ここで、新しいテーブル company を作成します。

    sqlite> create table company( ...> com_id text(4), ...> com_name text(15));

    新しいカラムを追加するには:

    ALTER TABLE company ADD com_add VARCHAR(50);

    カラムを追加したらテーブル会社の構造を見てください。

    sqlite> .schemaCREATE TABLE company(com_id text(4),com_name text(15), com_add VARCHAR(50));

    テーブル名を変更するには:

    sqlite> .tablescompany hrdb.departments hrdb.jobshrdb.countries hrdb.employees hrdb.locationshrdb.department hrdb.job_history hrdb.regions

    ここで、テーブルcompanyの名前を新しい名前company_newに変更します。

    ALTER TABLE company RENAME TO company_new;

    名前を変更した後、以下のテーブルのリストを参照してください。

    sqlite> .tablescompany_new hrdb.departments hrdb.jobshrdb.countries hrdb.employees hrdb.locationshrdb.department hrdb.job_history hrdb.regions

    名前の変更またはテーブルからの列の削除。

    注意: Sqlite は ALTER TABLE を限定的にしかサポートしていません。 列の削除と名前の変更は SQLite ではサポートされていません。 そのため、要件に応じた変更を加えた新しいテーブルを作成し、元のテーブルを削除して、作成したばかりの新しいテーブルの名前を元のテーブル名に再度変更する方がよい方法です。 テーブルを削除すると、関連するトリガーも失われますので、注意が必要です。 テーブルの名前を変更したりドロップしたりする前に、テーブルを作成したときのステートメントをコピーしておくとよいでしょう。

    SELECT sql FROM sqlite_master WHERE tbl_name = 'table_name';

    DROP TABLE

    DROP TABLEコマンドはデータベースからテーブルを削除します。

    構文

    DROP TABLE table_name orDROP TABLE table_name 

    パラメータ:

    table_name – 削除する既存のテーブル名です。 You may drop more than one tables by specifying their names seperated by a comma.

    DROP TABLE company_new;

    Previous: Data Types
    Next: Constraint

    コメントを残す

    メールアドレスが公開されることはありません。 * が付いている欄は必須項目です