[SQL][初心者] CREATE TABLE – 基本的なテーブル作成の文法・型など

これさえ覚えれば基本的なテーブルを作成できる!という内容をまとめています。MySQLをもとにしていますが、あまり他DBでも差分がない内容です。

外部キーや複雑な型などは別記事でまとめる予定です。

CREATE TABLE文法


テーブルの作成は以下のような文法。

CREATE TABLE <テーブル名> (
  <カラム名> <データの型> <属性・オプションなど、複数可>,
  <カラム名> <データの型> <属性・オプションなど、複数可>,
  ...
);

すでに作成されていたら何もしない場合は1行目を以下のようにする。

CREATE TABLE IF NOT EXISTS <テーブル名> (

テーブルの具体例


ユーザー情報とユーザー権限のテーブルを例にするとこうなります。

それぞれの属性はこの後説明します。

CREATE TABLE IF NOT EXISTS role (
  -- 権限のID
	id INT AUTO_INCREMENT NOT NULL PRIMARY KEY, 
  -- 権限の名前。adminやゲストなどの値が入る
	role_name VARCHAR(20) NOT NULL
);

CREATE TABLE IF NOT EXISTS user (
  -- ユーザーのID。自動で付与される
	id INT AUTO_INCREMENT NOT NULL PRIMARY KEY,
  -- ユーザー名
	name VARCHAR(20) NOT NULL,
  -- パスワード
	password VARCHAR(256) NOT NULL,
  -- データ作成日時
	created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  -- データ更新日時
	updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE current_timestamp,
	-- ユーザーが持っている権限のID
  role_id INT NOT NULL,
  -- ユーザーが持っている権限IDを、権限テーブルに紐づける
	FOREIGN KEY (role_id) REFERENCES role(id) ON DELETE CASCADE
);

こんな感じのデータになります。

基本的なデータの型


基本的なデータ型をまとめています。

ENUMやTEXTなどほかのデータ型はいずれ別記事でまとめようと思います。

型名概要データサイズ範囲・フォーマット
INT整数4バイト-2147483648 ~ 2147483647
FLOAT浮動小数4バイト-3.402823466E+38 ~ -1.175494351E-38
DECIMALDECIMAL(5, 2)固定小数点型

固定少数のため正確な制度
5~171つ目の値は全体の桁数(小数部分含む)、2つ目は小数点以下何桁まで表すか。

DICIMAL(5,2)なら小数点以下2桁、整数部3桁の計5桁となる
DATETIME日付と時刻8バイト年-月-日 時:分:秒
YYYY-MM-DD hh:mm:ss
VARCHARVARCHAR(255)文字列最大文字数 * 使用している文字コードのバイト数(utf8mb4なら4バイト)最大文字数を指定できる。

基本的な属性


属性は以下のように1つのカラムに複数設定可能です。

id INT AUTO_INCREMENT NOT NULL PRIMARY KEY,
name VARCHAR(20) NOT NULL,
password VARCHAR(256) NOT NULL,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
属性名概要
PRIMARY KEY指定したカラムを主キーに設定する。

主キーはレコードを一意に識別するためのカラムである。
重複、NULLは許容されない。
NOT NULLNULLを許可しないようにする。この指定がない場合は許可された設定になる。

UNIQUE, PRIMARY KEY, INDEXのどれかを指定したカラムはNOT NULLを指定する必要がある。
UNIQUE値の重複を禁止する。
重複した値を挿入しようとするとエラーが発生する。
DEFAULT <デフォルト値>デフォルト値を設定する。
挿入時に値が指定されていなかった場合、DEFAILTで設定した値が適用される。
AUTO_INCREMENT
DBによる差分あり
AUTO_INTREMENTを指定すると最大値+1の値を自動で設定されます。
AUTO_INTREMENTを指定できるのは整数型のみです。

MySQLはAUTO_INCREMENTだが、PostgreSQLは
SERIALだったり、DBによって違います。

他のテーブルとの連携・外部キーについて


別記事でまとめているのでそちらを参照してください。

参考サイト


コメントを残す

メールアドレスが公開されることはありません。