MySQLのCREATE TABLE文の書き方

MySQLのCREATE TABLE文の書き方

MySQLでCREATE TABLE文を使用して新しいテーブルを作成する方法について説明します。
CREATE TABLE文は、データベース内に新しいテーブルを定義するために使用されます。
テーブルの定義には、テーブル名、カラム(列)名、および各カラムのデータ型が含まれます。
オプションとして、各カラムに対して制約(例: NOT NULL, UNIQUE, PRIMARY KEYなど)を指定することもできます。

基本的なCREATE TABLE文の構文

CREATE TABLE文の基本構文は以下のとおりです。

CREATE TABLE テーブル名 (
  カラム名1 データ型 [制約],
  カラム名2 データ型 [制約],
  ...
  [テーブル制約]
);

この構文を分解して説明します。

  • テーブル名:

作成するテーブルの名前です。
データベース内で一意である必要があります。

  • カラム名:

各カラムの名前です。

  • データ型:

各カラムに格納されるデータのタイプを指定します。
例えば、INT、VARCHAR(255)、DATEなどです。

  • 制約:

各カラムに対して適用される制約を指定します。
これには、NOT NULL(NULL値を許可しない)、UNIQUE(ユニークな値でなければならない)、PRIMARY KEY(プライマリキーである)、DEFAULT(デフォルト値を指定する)などがあります。

  • テーブル制約:

テーブル全体に適用される制約です。
例えば、複数のカラムに対してユニークな制約を設定したい場合や、外部キー制約を設定したい場合などです。

例: シンプルなテーブルの作成

例えば、顧客情報を保存するためのcustomersという名前のテーブルを作成したい場合、次のようなSQL文を使用します。

CREATE TABLE customers (
  customer_id INT NOT NULL AUTO_INCREMENT,
  first_name VARCHAR(50) NOT NULL,
  last_name VARCHAR(50) NOT NULL,
  email VARCHAR(100) UNIQUE,
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (customer_id)
);

この例を見ていきます。

  • customer_id:

整数型(INT)で、NOT NULL制約が付いており、AUTO_INCREMENT属性により、自動的に一意の数値が割り振られます。
プライマリキー(PRIMARY KEY)として設定されています。

  • first_name:

文字列型(VARCHAR(50))で、NOT NULL制約があるため、必ず値を持たなければなりません。

  • last_name:

first_nameと同様に、VARCHAR(50)型でNOT NULL制約が付いています。

  • email:

文字列型(VARCHAR(100))で、UNIQUE制約により、一意の値でなければなりません。
同じメールアドレスを持つ顧客を複数登録することはできません。

  • created_at:

タイムスタンプ型(TIMESTAMP)で、デフォルト値として現在のタイムスタンプが設定されます。
これは新しいレコードが作成された日時を自動的に記録します。

テーブル制約の追加

CREATE TABLE文では、テーブル制約を追加することもできます。
例えば、外部キー制約を設定して、customersテーブルが他のテーブルとリレーションシップを持つようにすることができます。

CREATE TABLE orders (
  order_id INT NOT NULL AUTO_INCREMENT,
  customer_id INT,
  order_date DATE,
  amount DECIMAL(10, 2),
  PRIMARY KEY (order_id),
  FOREIGN KEY (customer_id) REFERENCES customers(customer_id)
);

この例では、ordersという名前のテーブルを作成しています。
このテーブルには以下のカラムがあります。

  • order_id:

INT型で、AUTO_INCREMENTおよびPRIMARY KEYの制約が付いています。

  • customer_id:

INT型で、customersテーブルのcustomer_idカラムと外部キー制約(FOREIGN KEY)で結びつけられています。
これにより、ordersテーブルのcustomer_idカラムには、必ずcustomersテーブルの有効なcustomer_idが格納されます。

  • order_date:

日付型(DATE)で、注文日を記録します。

  • amount:

DECIMAL(10, 2)型で、注文金額を記録します。
小数点以下2桁までの数値を保持します。

よく使用されるデータ型と制約

MySQLでよく使用されるデータ型には以下のようなものがあります。

  • INT:

整数型

  • VARCHAR(n):

可変長文字列型、最大n文字

  • TEXT:

長文のテキストデータ

  • DATE:

日付型(年-月-日)

  • TIMESTAMP:

タイムスタンプ型(年-月-日 時:分:秒)

また、一般的な制約には以下のようなものがあります。

  • NOT NULL:

NULL値を許可しない

  • UNIQUE:

一意の値でなければならない

  • PRIMARY KEY:

テーブル内で一意の識別子となるカラム

  • FOREIGN KEY:

他のテーブルのカラムへの参照を保持するカラム

まとめ

CREATE TABLE文を使用することで、MySQLデータベースに新しいテーブルを作成できます。
テーブルの構造を定義する際には、カラム名、データ型、制約を指定し、必要に応じてテーブル全体に対する制約も設定します。
これにより、データの整合性と一貫性を保つことができます。
テーブル設計を適切に行うことは、データベースのパフォーマンスと効率を向上させるために重要です。