意味のあるテーブルの作成

これまでの講義で、テーブルを作成するためのクエリについてはすでに少し理解しましたが、今度はこれをさらに詳しく掘り下げていきます。

テーブルの作成は Java でのクラスの宣言に非常に似ており、次のパターンになります。

CREATE TABLE table_name (
	column1 datatype,
	column2 datatype,
	column3 datatype,
   ....
);

たとえば、ユーザーを含むテーブルを作成するクエリを作成してみましょう。

CREATE TABLE user (
	id INT,
	name VARCHAR(100),
	level INT,
	created_date DATE,
);

ここでは多くのニュアンスが示されていないため、非常に単純に見えます。

まず、テーブルには追加の設定がある場合があります。

次に、各列に追加の設定を含めることができます。

そして列を作成するための設定を始めます。

テーブル内のキー

名前とデータ型に加えて、テーブル列には次の設定も含めることができます。

主キー 列はテーブルのキーです
固有のキー すべての列の値は一意である必要があります。
デフォルト値 デフォルト値
NULLではありません NULL 値の受け入れの禁止
自動増加 新しいレコードがテーブルに追加されると、SQL Server は自動的に値をインクリメントします。
生成された 計算フィールド
保管所 データの保存場所: ディスク上またはメモリ内
コメント 列のコメント(現地語のタイトルなど)

以下にその一部を見ていきます。

まず、 PRIMARY KEYです。

ほとんどの場合、これは名前が id でタイプが INT の別の列です。これはテーブルのいわゆる「マスターキー」であり、そのすべての行がこのキーの一意の値を持ちます。これは主に、他のテーブルがテーブルのレコードを参照し、その特定のレコードをポイントできるようにするために使用されます。

2 番目はUNIQUE KEYです。

ある意味では PRIMARY KEY に似ていますが、セマンティックな負荷はまったく異なります。列に UNIQUE 属性がある場合、その列内のすべての値は一意である必要があります。UNIQUE KEY と PRIMARY KEY の違いの良い例は、パスポート局の担当者のリストです。

納税者番号は主キーであり、他のテーブルから適切な人物を簡単に参照できるようにするために使用されます。

パスポート番号は一意のキーです。二人の人が同じパスポート番号を持つことはできません。ただし、パスポート番号は変更することができます。たとえば、姓が変わるとき。そして、納税者番号は永久に残ります。これが PRIMARY KEY の主なタスクです。PRIMARY KEY を指定するクエリの例:

CREATE TABLE user (
	id INT PRIMARY KEY,
	name VARCHAR(100),
	level INT,
	created_date DATE,
);

データ型の設定

それほど重要ではありませんが、便利な属性があります。

デフォルト値

テーブルにデータを挿入する (新しい行を追加する) 場合、一部の列の値がデフォルト値であれば省略できます。この場合、SQL サーバーは単に列自体の値を設定します。

MySQL バージョン 8 以降では、式を値として指定できるようになりました。

NULLではありません

テーブルの作成時に列に NOT NULL 属性を指定すると、SQL Server はこの列に NULL 値を格納できないようにします。デフォルトでは、INT 列であっても、どの列でも NULL 値を持つことができます。これは Java プログラマーにとっては少しわかりにくいことです。

自動増加

通常、列 ID に使用されます。テーブルに新しい行を追加するときは、SQL サーバーにこのエントリの ID を割り当てる必要があります。サーバーほどテーブルに行数があることを知っている人はいません。特に、異なるクライアントからのリクエストが同じ SQL サーバーに送信される場合はそうです。

これはまさに AUTO_INCREMENT 属性の機能です。新しい行を追加するとき、ID として何も渡さないだけで、SQL サーバーはこのレコードに正しい ID を指定します。つまり、最後の既存レコードの ID を取得して 1 ずつ増やします。この属性は次のとおりです。整数型および実数型で使用されます。そしてもちろん、そのようなテーブルを作成する例を作ってみましょう。

CREATE TABLE user (
	id INT PRIMARY KEY AUTO_INCREMENT,
	name VARCHAR(100) NOT NULL,
	level INT DEFAULT 1,
	created_date DATE NOT NULL,
);