SQLite で PRIMARY KEY 制約を使用する例

2024-04-02

SQLite テーブル制約 - 複数の列で一意

複合キーは、複数の列で構成されるテーブルの主キーです。複合キーを使用すると、各レコードを一意に識別できます。

UNIQUE 制約を使用して、テーブル内の複数の列の組み合わせを一意に保つことができます。これは、CREATE TABLE ステートメントまたは ALTER TABLE ステートメントを使用して行うことができます。

次の例では、users テーブルを作成し、usernameemail 列の組み合わせを一意に保つ UNIQUE 制約を追加します。

CREATE TABLE users (
  id INTEGER PRIMARY KEY AUTOINCREMENT,
  username TEXT NOT NULL,
  email TEXT NOT NULL,
  UNIQUE (username, email)
);

この制約により、同じユーザー名と電子メールアドレスを持つ 2 つのレコードをテーブルに挿入することはできません。

UNIQUE 制約を使用する利点は次のとおりです。

  • データの整合性を保つことができます。
  • 重複データを排除できます。
  • データ検索を効率化できます。

複合キーと UNIQUE 制約は、さまざまな状況で使用できます。

  • 顧客データベースで、顧客を一意に識別するために、顧客 ID と氏名を複合キーとして使用できます。

SQLite の UNIQUE 制約を使用して、テーブル内の複数の列の組み合わせを一意に保つことができます。これは、複合キーと呼ばれるものを作成するのに役立ちます。複合キーと UNIQUE 制約は、データの整合性を保ち、重複データを排除し、データ検索を効率化するのに役立ちます。




-- テーブルを作成する
CREATE TABLE users (
  id INTEGER PRIMARY KEY AUTOINCREMENT,
  username TEXT NOT NULL,
  email TEXT NOT NULL,
  UNIQUE (username, email)
);

-- データを挿入する
INSERT INTO users (username, email) VALUES ("user1", "[email protected]");
INSERT INTO users (username, email) VALUES ("user2", "[email protected]");

-- 重複データを挿入しようとするとエラーが発生する
INSERT INTO users (username, email) VALUES ("user1", "[email protected]");

-- データを取得する
SELECT * FROM users;

-- 結果
-- id | username | email
-- --- | --- | ---
-- 1 | user1 | [email protected]
-- 2 | user2 | [email protected]

このコードは、users テーブルを作成し、usernameemail 列の組み合わせを一意に保つ UNIQUE 制約を追加します。次に、2 つのレコードをテーブルに挿入します。3 番目のレコードを挿入しようとすると、UNIQUE 制約違反エラーが発生します。最後に、SELECT ステートメントを使用して、テーブル内のすべてのデータを取得します。




他の方法

PRIMARY KEY 制約は、テーブル内の各レコードを一意に識別する必要があります。複合キーを使用して、PRIMARY KEY 制約を作成できます。

CREATE TABLE users (
  username TEXT NOT NULL,
  email TEXT NOT NULL,
  PRIMARY KEY (username, email)
);

CHECK 制約を使用して、テーブル内の列の値に制限を適用できます。複合キーを使用して、CHECK 制約を作成できます。

CREATE TABLE users (
  username TEXT NOT NULL,
  email TEXT NOT NULL,
  CHECK (username <> '' AND email <> ''),
);

UNIQUE インデックスは、テーブル内の複数の列の組み合わせの一意性を保証します。ただし、PRIMARY KEY 制約とは異なり、NULL 値を許可できます。

CREATE TABLE users (
  username TEXT NOT NULL,
  email TEXT NOT NULL,
  UNIQUE (username, email)
);

この制約により、同じユーザー名と電子メールアドレスを持つ 2 つのレコードをテーブルに挿入することはできません。ただし、空のユーザー名または電子メールアドレスを持つレコードを挿入することはできます。

SQLite では、UNIQUE 制約、PRIMARY KEY 制約、CHECK 制約、UNIQUE インデックスを使用して、テーブル内の複数の列の組み合わせを一意に保つことができます。どの方法を使用するかは、特定の要件によって異なります。

  • 複合キーがテーブル内のレコードを一意に識別する必要がある場合は、PRIMARY KEY 制約を使用する必要があります。
  • 複合キーに NULL 値を許可する必要がある場合は、UNIQUE インデックスを使用する必要があります。

sqlite unique-constraint compound-key


歴史的株式データを整理するためのデータベーススキーマ:SQL、SQLite、およびスキーマの概要

歴史的株式データを整理するには、データベースが役立ちます。データベースは、データを構造化された方法で格納して管理するためのソフトウェアツールです。これにより、データを効率的に検索、分析、可視化することができます。SQLite は、軽量で使いやすく、ファイルベースのデータベースエンジンです。初心者にとって人気のある選択肢であり、歴史的株式データを整理するためのスキーマを設計するのに適しています。...


データを自在に操る!SQL、SQLite、データベースにおける複数レベルの並べ替えの完全ガイド

SQL、SQLite、およびその他の多くのデータベースでは、複数の列に基づいて結果セットを並べ替えることができます。これは、1 つの列に基づいて並べ替えるよりも複雑な方法でデータを整理する必要がある場合に役立ちます。構文複数レベルの並べ替えを行うには、ORDER BY 句を使用します。この句には、並べ替えたい列をカンマ区切りでリストします。各列名の後に、昇順 (ASC) または降順 (DESC) で並べ替えることを指定するオプションキーワードを指定できます。...


Python スクリプトを使って SQLite クエリを実行する

ここでは、コマンドラインで SQLite クエリを実行して終了する方法を、3 つの方法に分けて解説します。概要sqlite3 コマンドは、SQLite データベースを操作するためのコマンドラインツールです。このコマンドを使用して、データベースを開き、クエリを実行し、結果を表示することができます。...


【保存版】SQLiteでタイムゾーンの壁を越える!18桁タイムスタンプを現地時間に簡単変換

方法 1:strftime() 関数と cast() 関数を使用するstrftime() 関数を使用して、18 桁のタイムスタンプから必要な形式の文字列に変換します。cast() 関数を使用して、文字列を DATETIME 値に変換します。...