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

⚡ スマートサマリー

SQLite テーブル管理は、テーブルを定義するCREATE TABLE、テーブル名を変更したり列を追加・変更したりするALTER TABLE、データベースからテーブルを完全に削除するDROP TABLEという3つのデータ定義コマンドに依存しています。

  • 📐 テーブルを作成する: CREATE TABLE文はテーブル名とその列を定義し、各列には名前とデータ型が必要です。
  • 🛡️ エラーを避ける: CREATE TABLE に IF NOT EXISTS を追加したり、DROP TABLE に IF EXISTS を追加したりすることで、テーブルが既に存在する場合や存在しない場合に発生するエラーを防ぐことができます。
  • 会<XNUMXxEXNUMX><XNUMXxXNUMXF>️️<XNUMXxXNUMXF>️️ テーブルの変更: ALTER TABLE はテーブルの名前を変更し、列を追加し、現代の SQLite 単一の列の名前を変更または削除します。
  • 🗑️ テーブルをドロップする: DROP TABLEコマンドは、テーブルとそのテーブルに属するすべての行およびインデックスを完全に削除します。
  • 📑 テーブルをコピーする: CREATE TABLE AS SELECT は、クエリによって返された列と行から新しいテーブルを作成します。
  • 🤖 AI支援: AIによるテキストからSQLへの変換アシスタントやGitHub Copilotは、平易な英語のプロンプトからCREATE、ALTER、DROPステートメントを生成します。

SQLite 変更ドロップテーブルを作成する

以下のセクションでは、テーブルの作成、構造の変更、および削除の方法を示します。 SQLite3つの例を用いて、CREATE TABLE、ALTER TABLE、およびDROP TABLEコマンドを解説します。

SQLite テーブルを作成

構文

以下は CREATE TABLE ステートメントの構文です。

CREATE TABLE table_name(
column1 datatype,
column1 datatype
);

テーブルを作成するには、次のように「CREATE TABLE」クエリを使用する必要があります。

CREATE TABLE guru99 (
  Id Int,
  Name Varchar
);

テーブル名の後の 2 つの括弧内でテーブルの列を定義します。各列には次のプロパティが必要です。

  • 名前、列名はテーブルの列間で一意である必要があります。
  • データ型 ― 列のデータ型。
  • 列の制約はオプションです。これについては、このチュートリアルの後半のセクションで説明します。

SQLite テーブルが存在しない場合は作成します

スクリプトが複数回実行される場合、テーブルが既に存在すると、単純なCREATE TABLE文は失敗し、エラーで停止します。 SQLite この問題を解決するには、オプションの IF NOT EXISTS 句を使用します。この句は、テーブルが存在しない場合にのみテーブルを作成し、既に存在する場合は何も行いません。

CREATE TABLE IF NOT EXISTS guru99 (
  Id Int,
  Name Varchar
);

上記の記述は「テーブルが既に存在します」というエラーを発生させないため、セットアップスクリプトや移行スクリプトの先頭に記述しても安全です。

テーブルを削除する場合も、同じ考え方が逆の形で適用されます。DROP TABLE に IF EXISTS を追加することで、テーブルが既に削除されている場合のエラーを回避できます。

DROP TABLE IF EXISTS guru99;

どちらの句も自動化スクリプトではよく使われます。なぜなら、実行の合間に手動でクリーンアップすることなく、同じファイルを繰り返し実行できるからです。

ドロップテーブル

テーブルを削除するには、「DROP TABLE」コマンドの後にテーブル名を指定します。例:

DROP TABLE guru99;

他の机

テーブルの名前を変更するには、「ALTER TABLE」コマンドを次のように使用します。

ALTER TABLE guru99 RENAME TO guru100;

テーブル名が変更されたことを確認するには、「.tables」コマンドを使用してテーブルの一覧を表示します。すると、テーブル名が以下のように変更されているはずです。

SQLite .tablesの出力結果には、テーブル名がguru99からguru100に変更されたことが示されています。

ご覧のとおり、「alter table」コマンドを実行すると、テーブル名「guru99」が「guru100」に変更されます。

SQLite 列の追加 - ALTER TABLE コマンドの使用

列を追加するには、「ALTER TABLE」コマンドを使用することもできます。

ALTER TABLE guru100 ADD COLUMN Age INT;

これにより、「guru100」テーブルが変更され、新しい列「年齢」が追加されます。

出力が表示されなかった場合、ステートメントは正常に実行され、列が追加されたことを意味します。出力がない場合、カーソルは「sqlite>」の後にテキストなしで配置されます。例:

SQLite ALTER TABLE ADD COLUMN が正常に実行された後、コマンドラインに何も出力されない

ただし、列が追加されたことを確認するには、「.schema guru100」コマンドを使用できます。これによりテーブル定義が表示され、先ほど追加した新しい列が表示されるはずです。

SQLite .schema guru100 の出力には、テーブルに追加された新しい Age 列が表示されています。

SQLite テーブルの変更:列名の変更と削除

列を追加するだけでなく、現代のバージョンでは SQLite 単一の列の名前を変更したり、列を削除したりすることもできます。列の名前変更は、 SQLite 3.25では、テーブル定義内だけでなく、その列を参照するすべてのインデックス、トリガー、ビュー内の名前も更新されます。

ALTER TABLE guru100 RENAME COLUMN Name TO FullName;

列を削除するには、 SQLite 3.35以降では、直接DROP COLUMN句をサポートしています。

ALTER TABLE guru100 DROP COLUMN Age;

列が主キー、一意制約、またはインデックスの一部である場合、その列を削除することはできません。 SQLite DROP COLUMN がないバージョンでは、従来の回避策として、必要な列を持つ新しいテーブルを作成し、行をコピーし、古いテーブルを削除し、最後に新しいテーブルの名前を変更します。

テーブルをコピーする方法 SQLite CREATE TABLE AS SELECT を使用する

危険な変更を行う前のバックアップとして、あるいは新しいテーブルを作成する際の出発点として、テーブルのコピーが必要になる場合があります。 SQLite CREATE TABLE AS SELECT を使用すると、これを 1 つのステップで構築できます。これは、クエリから取得した列を持つ新しいテーブルを作成し、そのクエリが返す行でテーブルを埋めます。

CREATE TABLE guru100_backup AS SELECT * FROM guru100;

新しいテーブル「guru100_backup」は、「guru100」から同じ列とすべての行を受け取ります。一部の行のみをコピーするには、SELECT文にWHERE句を追加します。

CREATE TABLE known_ages AS SELECT * FROM guru100 WHERE Age IS NOT NULL;

覚えておくべき重要な点は、CREATE TABLE AS SELECT では列名、型、データはコピーされますが、主キー、その他の制約、インデックスはコピーされないということです。コピーしたテーブルが元のテーブルと同じルールを適用する必要がある場合は、それらを新しいテーブルに自分で追加する必要があります。

SQLite テーブルに値を挿入する

テーブルに値を挿入するには、次のように「INSERT INTO」ステートメントを使用します。

INSERT INTO Tablename(colname1, colname2, ….) VALUES(valu1, value2, ….);

テーブル名の後の列名を省略して、次のように記述できます。

INSERT INTO Tablename VALUES(value1, value2, ….);

テーブルから列名を省略している場合、挿入される値の数はテーブルの列の数と正確に同じである必要があります。その後、各値は対応する列に挿入されます。たとえば、次の挿入ステートメントの場合:

INSERT INTO guru100 VALUES(1, 'Mike', 25);

このステートメントの結果は次のようになります。

SQLite INSERT INTO文で、guru100テーブルに値の行を追加する

  • 「id」列には値「1」が挿入されます。
  • 「名前」列には「Mike」という値が挿入され、
  • 「年齢」列には値「25」が挿入されます。

INSERT … DEFAULT VALUES ステートメント

次のように、テーブルに列のデフォルト値を一度に設定できます。

INSERT INTO Tablename DEFAULT VALUES;

列がNULL値もデフォルト値も許可していない場合、その列に対して「NOT NULL制約違反」というエラーが表示されます。以下はその例です。

SQLite INSERT DEFAULT VALUES からの NOT NULL 制約違反エラー

よくあるご質問

いいえ。 SQLite TRUNCATE TABLE コマンドはありません。テーブルを空にするには、WHERE 句を指定せずに DELETE FROM table_name を実行し、その後 VACUUM を使用して解放されたディスク領域を回収します。テーブル構造と列はそのまま保持されます。

DELETE はテーブルから行を削除しますが、テーブル、列、構造は新しいデータを受け入れる準備ができた状態で保持されます。DROP TABLE は、定義、インデックス、トリガーを含むテーブル全体を削除するため、データベースからテーブルは完全に削除されます。

SQLite コマンドラインでは、.tables ドットコマンドですべてのテーブル名が表示されます。SQL では、組み込みスキーマテーブルに対して SELECT name FROM sqlite_master WHERE type = 'table'; というクエリを実行できます。このクエリは、データベースに接続されているどのアプリケーションからでも機能します。

一時テーブルは、CREATE TEMP TABLE または CREATE TEMPORARY TABLE コマンドで作成されます。一時テーブルは、作成元のデータベース接続からのみアクセス可能で、接続が閉じられると自動的に削除されます。そのため、クエリの中間結果を保持するのに便利です。

はい。主キーはオプションです。 SQLite1つ省略すると、 SQLite テーブルは、各行を識別するための64ビットの非表示行IDを保持しています。PRIMARY KEY、UNIQUE、NOT NULLなどの列制約は、テーブルを定義する際にすべてオプションです。

デフォルトではいいえ。 SQLite 動的タイプを使用するping 型アフィニティにより、列は宣言された型に関係なく、ほぼすべての型の値を受け入れます。厳密なチェックを強制するには、テーブルをSTRICTテーブルとして作成し、 SQLite 3.37.

はい。AIによるテキストベースのSQL変換アシスタントは、平易な英語で記述されたデータ内容を、列、データ型、キーを含むCREATE TABLE文に変換します。既存のスキーマをモデルに渡すと、実際のテーブル名や列名が再利用されるため、精度が向上します。

Yes. GitHubコパイロット ALTER TABLE、DROP TABLE、その他を提案します SQLite 次のようなエディタ内のインラインステートメント VS Code移行ファイルと既存のクエリを読み込むため、補完候補は実際のテーブル名と列名と一致します。