ラベル SQLearning の投稿を表示しています。 すべての投稿を表示
ラベル SQLearning の投稿を表示しています。 すべての投稿を表示
2012/11/25

[SQLearning][SQLite]テーブルの変更と削除

SQL ゼロからはじめるデータベース操作を教材にしてSQLiteを学ぶ
SQL学習連載「SQLearning」の第4回です。

前回: [SQLearning][SQLite]データ型と制約の指定 | DevAchieve
第3回は「テーブルの変更と削除」についてです。

カラムの追加

以下の CREATE 文で生成されるテーブルを元に解説していきます。
CREATE TABLE products (
    id          INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
    name        TEXT    NOT NULL UNIQUE,
    description TEXT    NULL,
    price       INTEGER NOT NULL,
    discount    INTEGER NOT NULL DEFAULT 0,
    reg_date    TEXT    NOT NULL DEFAULT CURRENT_DATE
);
このテーブルにカラムを追加するには以下のように記述します。
ALTER TABLE <テーブル名> ADD <カラム名> <型> <制約>;
ALTER TABLE products
    ADD bar_code TEXT NOT NULL DEFAULT '000000000000000';
カラムは常に末尾に追加されます。
CREATE TABLE 構文とは異なり、以下のような制約があります。
  • 追加されるカラムは PRIMARY KEY 制約, UNIQUE 制約を持つことができません。
  • 追加されるカラムは デフォルト値に固定値以外の値(CURRENT_TIME, CURRENT_DATE, CURRENT_TIMESTAMP, 式)を持つことができません。
  • 追加されるカラムに NOT NULL 制約が指定されている場合は NULL 以外のデフォルト値が設定されている必要があります。
  • 外部キー制約が有効で、REFERENCES 句とともにカラムが追加された場合、追加されたカラムはデフォルト値に NULL を持たなくてはなりません。
※ CHECK 制約を追加する際は既存の列に対してテストされないことに注意してください。
これは CHECK 制約に違反するデータを含むテーブルになりうることを意味します。
SQLite の今後のバージョンでは追加される CHECK 制約を検証するように変更されるかもしれません。

カラムが追加されたデータベースは SQLite Ver.3.1.3 以前のバージョンで読めなくなります。

テーブル名の変更

テーブル名を変更するには以下のように記述します。
ALTER TABLE <テーブル名> RENAME TO <新しいテーブル名>;
テーブル名を変更した際に外部キー制約が有効ならば
REFERENCES 句に指定されていたテーブル名は新しいテーブル名に自動的にリネームされます。

SQLite Query Language: ALTER TABLE

テーブルの削除

テーブルを削除するには以下のように記述します。
DROP TABLE <テーブル名>;
テーブルに関連付けられたすべてのインデックスとトリガも削除されます。
DROP TABLE IF EXISTS <テーブル名>;
IF EXISTS を記述すれば存在しないテーブルの削除を試みることによるエラーを防ぐことができます。

次回

次回は「SELECT文の基礎」を予定しています。

SQL ゼロからはじめるデータベース操作 (CD-ROM付) (プログラミング学習シリーズ)
SQL ゼロからはじめるデータベース操作 (CD-ROM付) (プログラミング学習シリーズ)
2012/11/24

[SQLearning][MySQL]テーブルの変更・削除

SQL ゼロからはじめるデータベース操作を教材にしてMySQLを学ぶ
SQL学習連載「SQLearning」の第4回です。
前回: [SQLearning][MySQL]データ型・制約の指定 | DevAchieve
第4回は「テーブルの変更・削除」についてです。

カラムの追加

前回同様、以下のテーブルを元に解説していきます。
+-------------+--------------+------+-----+---------+----------------+
| Field       | Type         | Null | Key | Default | Extra          |
+-------------+--------------+------+-----+---------+----------------+
| id          | int(11)      | NO   | PRI | NULL    | auto_increment |
| name        | varchar(255) | NO   | UNI | NULL    |                |
| description | text         | YES  |     | NULL    |                |
| price       | int(11)      | NO   |     | NULL    |                |
| tax_free    | tinyint(1)   | NO   |     | 0       |                |
| reg_date    | datetime     | NO   |     | NULL    |                |
+-------------+--------------+------+-----+---------+----------------+
このテーブルにカラムを追加するには以下のように記述します。
ALTER TABLE <テーブル名> ADD <追加するカラム名> <型> <制約>;
ALTER TABLE products
    ADD bar_code varchar(255) NOT NULL DEFAULT '0-000000-000000' AFTER tax_free;
カラムの追加位置は AFTER で指定します。未指定の場合は末尾に追加されます。
先頭に追加する場合は以下のように FIRST で指定します。
ALTER TABLE products
    ADD products_type_id int(11) NOT NULL DEFAULT 0 COMMENT '商品タイプ' FIRST;
また、複数追加する場合は以下のようにカンマ区切りで記述します。
ALTER TABLE products
    ADD receipt_name varchar(255) NOT NULL COMMENT 'レシート表示名' AFTER name,
    ADD url varchar(255) NULL DEFAULT NULL COMMENT '商品ページURL' AFTER description;

カラムの変更

カラム名、カラムの型や制約を変更する場合は以下のように記述します。
ALTER TABLE <テーブル名> CHANGE <古いカラム名> <新しいカラム名> <型> <制約>;
ALTER TABLE products
    CHANGE url homepage_url varchar(255) NULL DEFAULT NULL COMMENT '商品ホームページURL';

カラムの型や制約だけを変更したい場合は以下のように記述します。
ALTER TABLE <テーブル名> MODIFY <変更するカラム名> <型> <制約>;
ALTER TABLE products
    MODIFY bar_code varchar(13) NOT NULL DEFAULT '0000000000000' AFTER id;
AFTER でカラムの順番も変更することもできます。
Oracleの独自実装の互換性対応のため実装されているようです。

カラムのデフォルト値を削除したい場合は以下のように記述します。
ALTER TABLE <テーブル名> ALTER <カラム名> DROP DEFAULT;
ALTER TABLE products
    ALTER bar_code DROP DEFAULT;

カラムのデフォルト値を設定したい場合は以下のように記述します。
ALTER TABLE <テーブル名> ALTER <カラム名> SET DEFAULT <デフォルト値>;
ALTER TABLE products
    ALTER bar_code SET DEFAULT '0000000000000';

カラムの削除

カラムを削除したい場合は以下のように記述します。
ALTER TABLE <テーブル名> DROP <削除するカラム名>;
ALTER TABLE products
    DROP homepage_url;

ADD, ALTER, CHANGE, DROP はカンマで区切ることによって一度に複数の変更を実行することができます。
ALTER TABLE では元テーブルの一時コピーを作成するため一度に変更を実行したほうが良いです。
ほとんどの場合、 ALTER TABLE は元テーブルのテンポラリ コピーを作成する事で起動します。
そのコピー上で変更が行われ、その後元テーブルが削除されて新しいテーブルがリネームされます。
ALTER TABLE が実行している間、他のクライアントが元テーブルを読む事ができます。
新しいテーブルの準備ができるまで更新と書き込みは止められ、
その後更新に失敗する事なく新しいテーブルに自動的にリダイレクトされます。
MySQL :: MySQL 5.1 リファレンスマニュアル :: 12.1.2 ALTER TABLE 構文

AUTO_INCREMENT の値の変更

以下のように記述します。
ALTER TABLE <テーブル名> AUTO_INCREMENT = <値>;
ALTER TABLE products AUTO_INCREMENT = 100;
AUTO_INCREMENT カラム内の最高値以下の値が指定された場合、
MyISAMでは最高値+1にリセットされますが、InnoDBではエラーも出ず、変更もされません。

おまけ: AUTO_INCREMENT の振り直し

挿入と削除を繰り返していると id が歯抜け状態になるので振り直したい時に使えます。
データ不整合を起こす可能性があるのでよく検討してから使用してください。
ALTER TABLE products
    CHANGE id renamed_id int(11);
ALTER TABLE products
    ADD id int(11) NOT NULL AUTO_INCREMENT FIRST,
    ADD PRIMARY KEY(id),
    DROP renamed_id;
単純に id を DROP してから追加しないのは先に DROP すると順序が変わる可能性があるからです。

テーブル名の変更

ALTER TABLE <テーブル名> RENAME TO <新しいテーブル名>
RENAME TABLE <テーブル名> TO <新しいテーブル名>
標準SQLでテーブル名の変更が定義されていないので独自実装で方法が幾つかあります。
MySQL :: MySQL 5.1 リファレンスマニュアル :: 12.1.19 RENAME TABLE 構文

データベースエンジンの変更

ALTER TABLE <テーブル名> ENGINE = <エンジン名>;
ALTER TABLE products ENGINE = InnoDB;

デフォルト文字セットの変更

ALTER TABLE <テーブル名> DEFAULT CHARSET = <文字コード名>;

MySQL :: MySQL 5.1 リファレンスマニュアル :: 12.1.2 ALTER TABLE 構文

テーブルの削除

DROP TABLE [IF EXISTS] <テーブル名>;
DROP TABLE products;
DROP TABLE IF EXISTS products;
IF EXISTS を記述すれば存在しないテーブルの削除を試みることによるエラーを防ぐことができます。

次回

次回は「SELECT文の基礎」について予定しています。
SQL ゼロからはじめるデータベース操作 (CD-ROM付) (プログラミング学習シリーズ)
SQL ゼロからはじめるデータベース操作 (CD-ROM付) (プログラミング学習シリーズ)
2012/10/26

[SQLearning][SQLite]データ型と制約の指定

SQL ゼロからはじめるデータベース操作を教材にしてSQLiteを学ぶ
SQL学習連載「SQLearning」の第3回です。

前回: [SQLearning][SQLite]テーブルの作成・確認・削除 | DevAchieve
第3回は「データ型と制約の指定」についてです。

データ型の指定

以下の CREATE 文を例にデータ型と制約の指定について解説します。
CREATE TABLE IF NOT EXISTS products (
    id          INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
    name        TEXT    NOT NULL UNIQUE,
    description TEXT    NULL,
    price       INTEGER NOT NULL CHECK(price > 0),
    tax_free    INTEGER NOT NULL DEFAULT 0 CHECK(tax_free IN (0, 1)),
    reg_date    TEXT    NOT NULL DEFAULT CURRENT_DATE
);
SQLite では動的型付けシステムを使用していて、データ型はカラムではなく値自体に関連付けられます。
ストレージクラスとして定義されていますが、これらはほぼデータ型と同じと考えることができます。
NULL
NULL値
INTEGER
符号付き整数。桁数によって1, 2, 3, 4, 6 バイトで保存される。
REAL
浮動小数点数。8バイトで保存される。
TEXT
文字列。データベースのエンコーディング(UTF-8, UTF-16BE もしくは UTF-16LE)で保存される。
BLOB
バイナリデータ(Binary Large OBject)。入力データがそのまま保存される。

Boolean
真偽値を格納する Boolean 型はありません。かわりに INTEGER 型の 0(false), 1(true) として保存します。
Date 型と Time 型
Date 型, Time 型, DateTime 型はありません。
かわりに組み込みのDate And Time Functionsが INTEGER, TEXT, REAL のいずれかとして保存します。
INTEGER: 1970-01-01 00:00:00 UTC からの秒数である Unix Time
TEXT: ISO8601 表記の文字列("YYYY-MM-DD HH:MM:SS.SSS")
REAL: 先発グレゴリオ暦にしたがった紀元前4714年11月24日、
グリニッジ標準時における正午からのユリウス日数(関連: ユリウス通日)
REAL はちょっと意味がわかりませんね。

また、SQLite では他の RDBMS との互換性のために Type Affinity (型の類似性)という概念が導入されています。
  • TEXT: ストレージクラスの NULL, BLOB, TEXT のすべてのデータを含みます。
  • NUMERIC: ストレージクラスの5つすべてを含みます。データは変換される可能性があります。
  • INTEGER: NUMERIC とほぼ同じ振る舞いをします。違いは CAST 方法のみです。
  • REAL: NUMERIC とほぼ同じ振る舞いをします。違いは浮動少数表現を強制する点です。
  • NONE: 他のストレージクラスへの変換をしません。
Datatypes In SQLite Version 3

制約の指定

NULL と NOT NULL
NULL は NULL値を許容し、NOT NULL は NULL値 を入れることができなくなります。
DEFAULT
デフォルト値を設定することができます。
INSERT時の日時をデフォルト値にすることのできる以下のキーワードを設定することもできます。
CURRENT_TIMEHH:MM:SS 形式
CURRENT_DATEYYYY-MM-DD 形式
CURRENT_TIMESTAMPYYYY-MM-DD HH:MM:SS 形式
PRIMARY KEY
主キーを設定することができます。INTEGER と組み合わせることで AUTOINCREMENT を実現できます。
しかし、その場合はデータ削除に再び同じ値が入ります。
AUTOINCREMENT
明示的に指定するとデータ削除後は削除した値にはならず次に大きい値が入ります。
UNIQUE
指定すると unique(一意な)値のみを受け入れます。
INSERT または UPDATE 時に既存の値と重複した値を指定するとエラーになります。
NULL を許容する場合、それぞれの NULL値は異なる値として扱われます。
CHECK(条件式)
条件式を満たす値のみを許容します。条件式にサブクエリを含めることはできません。
INSERT または UPDATE 時に条件式を満たさない値を指定するとエラーになります。
ver. 3.3.0 からサポートされました。ver. 3.3.0 以前では指定しても無視されます。

SQLite Query Language: CREATE TABLE

次回

次回は「テーブルの変更」についてを予定しています。

SQL ゼロからはじめるデータベース操作 (CD-ROM付) (プログラミング学習シリーズ)
SQL ゼロからはじめるデータベース操作 (CD-ROM付) (プログラミング学習シリーズ)
2012/10/05

[SQLearning][MySQL]データ型・制約の指定

SQL ゼロからはじめるデータベース操作を教材にしてMySQLを学ぶ
SQL学習連載「SQLearning」の第3回です。
前回: [SQLearning][MySQL]テーブルの作成・確認・削除
第3回は「データ型・制約の指定」の指定についてです。

データ型の指定

以下の CREATE 文を例にデータ型と制約の指定について解説します。
CREATE TABLE products (
    id          int(11)      NOT NULL AUTO_INCREMENT COMMENT '商品ID',
    name        varchar(255) NOT NULL UNIQUE         COMMENT '商品名',
    description text                                 COMMENT '商品の説明',
    price       int(11)      NOT NULL                COMMENT '商品の値段',
    tax_free    tinyint(1)   NOT NULL DEFAULT 0      COMMENT '非課税フラグ',
    reg_date    datetime     NOT NULL                COMMENT '登録日',
    PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT '商品テーブル';
int(11)
数値型です。カッコは表示幅です。値の範囲に影響を与えるものではありません。
ZEROFILL を続いて指定することによってスペースで調整される表示幅を 0 で埋めることができます。
値の範囲は -2147483648 ~ 2147483647 ですが、UNSIGNED をつければ 0 ~ 4294967295 になります。
MySQL :: MySQL 5.1 リファレンスマニュアル :: 10.2 数値タイプ
varchar
可変長の文字列型です。カッコは文字数です。(※4.1以前まではバイト数でした)
MySQL :: MySQL 3.23, 4.0, 4.1 Reference Manual :: 10.4.1 The CHAR and VARCHAR Types
(Before MySQL 4.1, the length is interpreted as number of bytes.)
MySQL 5.0.3以前は varchar は 255 バイト まででした。それ以降のバージョンでは 65535 バイト、
メタデータを除き 65532 バイト まで入れることができます。
MySQL :: MySQL 5.0 Reference Manual :: 11.1.6.1 The CHAR and VARCHAR Types
The length can be specified as a value from 0 to 255 before MySQL 5.0.3, and 0 to 65,535 in 5.0.3 and later versions.
文字コードが utf8 の場合は1文字3バイトなのでカッコに指定できるのは(65532/3=)21844くらいまでです。(*1)
それ以上の数を指定すると MySQLが自動的に mediumtext などに変換します。
(*1)メタデータの領域があるのか僕の環境では varchar(21835) までしか varchar として作成できませんでした。
text
可変長の文字列型です。varchar とは異なりデフォルト値を設定できません。
用途としては varchar とほとんど同じですが varchar がテーブルにインラインに格納されているのに対して
text は文字列を別ファイルとして持ち、カラムはファイルへのポインタを持っているようです。
この件については複雑な問題ですが以下の投稿によくまとまっています。
Takahiko HORIUCHI - Google+ - RDBMS に MySQL を採用したシステムで、VARCHAR の代わりに TEXT…
varchar(10000)とかで指定するくらいなら text にした方がパフォーマンス的に良いようです。
tinyint(1)
MySQL によって BOOL / BOOLEAN が内部変換された数値型です。
主にフラグ系の値を格納するのに使います。値の範囲は -127 ~ 128 です。
datetime
日時を格納する日付型です。'YYYY-MM-DD HH:MM:SS'形式で日時を保存します。

データ型は詳しく書くとリファレンスマニュアル並みの分量になるのでココでは簡単に紹介するだけに留めます。
詳しく知りたい方はMySQL :: MySQL 5.1 リファレンスマニュアル :: 10 データタイプを読むといいでしょう。

カラムの制約の指定

NULL と NOT NULL
description は NULL を許容するので NULL を指定していますが、
他のカラムは NULL を入れたくないので NOT NULL を指定します。
DEFAULT
デフォルト値を指定したい場合は DEFAULT [指定したい値] と記述します。
discount カラムはフラグを 0, 1 で管理したいのでデフォルト false で 0 を指定する、などのように使います。
AUTO_INCREMENT
id などのように自動で連番を振りたい場合は AUTO_INCREMENT を指定します。
UNIQUE
すべての値が一意でなければならない制限を指定します。
INSERT または UPDATE 時に既存の値と同じ値になる場合はエラーが発生します。
NULL を許容する場合、すべての NULL値は異なる値として扱われます。
COMMENT
カラムに対するコメントを記述することができます。
SQL 文のコメントとは異なり、SHOW CREATE TABLE 文で CREATE TABLE 文を表示した時にも表示されます。
phpMyAdmin などを使用する場合はコメントが表示されるのでフラグ系の各値の意味を記述しておくと便利です。

テーブルの制約の指定

PRIMARY KEY ( [カラム名] )
このテーブルの主キーを設定することができます。

テーブルの設定

ENGINE
データベースのストレージエンジンを指定することができます。
InnoDB と MyISAM が有名ですが 5.5 では InnoDB がデフォルトなようです。
以下のクエリでストレージエンジンの種類を確認すすることができます。
mysql> SHOW ENGINES;
MySQL :: MySQL 5.1 リファレンスマニュアル :: 12.5.4.13 SHOW ENGINES 構文
また、以下のクエリで各テーブルが使用しているストレージエンジンを確認することができます。
mysql> SHOW TABLE STATUS;
MySQL :: MySQL 5.1 リファレンスマニュアル :: 12.5.4.27 SHOW TABLE STATUS 構文
DEFAULT CHARSET
使用する文字セットを指定することができます。日本語を扱うなら utf8(utf8_general_ci)が一般的です。
以下のクエリでサポートしている文字セットを確認することができます。
mysql> SHOW CHARACTER SET;
MySQL :: MySQL 5.1 リファレンスマニュアル :: 12.5.4.2 SHOW CHARACTER SET 構文
実行結果
MySQL :: MySQL 5.1 リファレンスマニュアル :: 9.10 MySQL でサポートされるキャラクタセットと照合順序
MySQL :: MySQL 5.5 Reference Manual :: 10.1.14 Character Sets and Collations That MySQL Supports
COLLATE
照合順序を設定することができます。文字列を比較する際に順位を決める設定です。
DEFAULT CHARSET が utf8 の場合、省略すると utf8_general_ci が設定されます。
ちなみに utf8_general_ci の ci は case-insensitive の略で、大文字小文字を区別しないという意味なので
大文字小文字を区別したい場合は utf8_bin などを指定します。
以下のようなクエリで照合順序の一覧を表示します。
mysql> SHOW COLLATION like 'utf8%';
MySQL :: MySQL 5.1 リファレンスマニュアル :: 12.5.4.3 SHOW COLLATION 構文
COMMENT
テーブルに対してもコメントを記述することができます。

次回

次回は「テーブルの変更」についてを予定しています。

SQL ゼロからはじめるデータベース操作 (CD-ROM付) (プログラミング学習シリーズ)
SQL ゼロからはじめるデータベース操作 (CD-ROM付) (プログラミング学習シリーズ)
2012/10/04

[SQLearning][SQLite]テーブルの作成・確認・削除

SQL ゼロからはじめるデータベース操作を教材にしてSQLiteを学ぶ
SQL学習連載「SQLearning」の第2回です。

前回: [SQLearning][SQLite]ログインとデータベースの作成・削除 | DevAchieve
第2回は「テーブルの作成・確認・削除」についてです。

テーブルの作成

CREATE TABLE products (
    id          INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
    name        TEXT    NOT NULL,
    description TEXT    NULL,
    price       INTEGER NOT NULL,
    discount    INTEGER NOT NULL DEFAULT 0,
    reg_date    TEXT    NOT NULL
);
すでにテーブルが存在する場合はエラーになりますが IF NOT EXISTS と書くことでエラーを防ぐことができます。
CREATE TABLE IF NOT EXISTS products (
    id          INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
    name        TEXT    NOT NULL,
    description TEXT    NULL,
    price       INTEGER NOT NULL,
    discount    INTEGER NOT NULL DEFAULT 0,
    reg_date    TEXT    NOT NULL
);
SQLite Query Language: CREATE TABLE

テーブルの確認

.tables
テーブルの一覧を表示します。
sqlite> .tables
.schema
CREATE TABLE 文を表示します。
sqlite> .schema products

テーブルの削除

DROP TABLE products;
すでにテーブルが存在する場合はエラーになりますが IF EXISTS と書くことでエラーを防ぐことができます。
DROP TABLE IF EXISTS products;

次回

次回は「データ型・制約の指定」についてを予定しています。

SQL ゼロからはじめるデータベース操作 (CD-ROM付) (プログラミング学習シリーズ)
SQL ゼロからはじめるデータベース操作 (CD-ROM付) (プログラミング学習シリーズ)
2012/10/01

[SQLearning][MySQL]テーブルの作成・確認・削除

SQL ゼロからはじめるデータベース操作を教材にしてMySQLを学ぶ
SQL学習連載「SQLearning」の第2回です。
第1回: [SQLearning][MySQL]ログインとデータベースの作成・削除
第2回の今回は「テーブルの作成・確認・削除」についてです。

データベースの選択

第1回で作成した shop データベースにテーブルを作成するわけですが、
まずはテーブルを作成するクエリを投げる前にデータベースを選択しなければいけません。
データベースを選択していないとERROR 1046 (3D000): No database selectedというエラーが発生します。
mysql> USE shop;
MySQL :: MySQL 5.1 リファレンスマニュアル :: 12.3.3 USE 構文

テーブルの作成

CREATE TABLE Shohin (
    shohin_id     CHAR(4)       NOT NULL,
    shohin_mei    VARCHAR(100)  NOT NULL,
    shohin_bunrui VARCHAR(32)   NOT NULL,
    hanbai_tanka  INTEGER       ,
    shiire_tanka  INTEGER       ,
    torokubi      DATE          ,
    PRIMARY KEY (shohin_id)
);
すでにテーブルが存在する場合はエラーになりますが IF NOT EXISTS と書くことでエラーを防ぐことができます。
CREATE IF NOT EXISTS TABLE Shohin (
    shohin_id     CHAR(4)       NOT NULL,
    shohin_mei    VARCHAR(100)  NOT NULL,
    shohin_bunrui VARCHAR(32)   NOT NULL,
    hanbai_tanka  INTEGER       ,
    shiire_tanka  INTEGER       ,
    torokubi      DATE          ,
    PRIMARY KEY (shohin_id)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
MySQL :: MySQL 5.1 リファレンスマニュアル :: 12.1.8 CREATE TABLE 構文

テーブルの確認

テーブル情報はいくつかのクエリで確認することができます。
SHOW TABLES 構文
データベースのテーブル一覧を表示します。
mysql> SHOW TABLES;
+----------------+
| Tables_in_shop |
+----------------+
| Shohin         |
+----------------+
MySQL :: MySQL 5.1 リファレンスマニュアル :: 12.5.4.28 SHOW TABLES 構文
DESCRIBE 構文 または SHOW COLUMNS 構文
データ型や制約などを表示します。DESCRIBE 構文は SHOW COLUMNS 構文 のショートカットです。
mysql> DESCRIBE Shohin;
または
mysql> DESC Shohin;
または
mysql> SHOW COLUMNS FROM Shohin;
+---------------+--------------+------+-----+---------+-------+
| Field         | Type         | Null | Key | Default | Extra |
+---------------+--------------+------+-----+---------+-------+
| shohin_id     | char(4)      | NO   | PRI | NULL    |       |
| shohin_mei    | varchar(100) | NO   |     | NULL    |       |
| shohin_bunrui | varchar(32)  | NO   |     | NULL    |       |
| hanbai_tanka  | int(11)      | YES  |     | NULL    |       |
| shiire_tanka  | int(11)      | YES  |     | NULL    |       |
| torokubi      | date         | YES  |     | NULL    |       |
+---------------+--------------+------+-----+---------+-------+
MySQL :: MySQL 5.1 リファレンスマニュアル :: 12.3.1 DESCRIBE 構文
SHOW TABLE STATUS 構文
テーブルに関するさらに詳しい情報を表示します。
mysql> SHOW TABLE STATUS;
+--------+--------+---------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+-------------+------------+-----------------+----------+----------------+---------+
| Name   | Engine | Version | Row_format | Rows | Avg_row_length | Data_length | Max_data_length | Index_length | Data_free | Auto_increment | Create_time         | Update_time | Check_time | Collation       | Checksum | Create_options | Comment |
+--------+--------+---------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+-------------+------------+-----------------+----------+----------------+---------+
| Shohin | InnoDB |      10 | Compact    |    0 |              0 |       16384 |               0 |            0 |   9437184 |           NULL | 2012-09-29 22:44:57 | NULL        | NULL       | utf8_general_ci |     NULL |                |         |
+--------+--------+---------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+-------------+------------+-----------------+----------+----------------+---------+
MySQL :: MySQL 5.1 リファレンスマニュアル :: 12.5.4.27 SHOW TABLE STATUS 構文
SHOW CREATE TABLE 構文
CREATE 文を表示します。
mysql> SHOW CREATE TABLE Shohin;
CREATE TABLE `Shohin` (
  `shohin_id` char(4) NOT NULL,
  `shohin_mei` varchar(100) NOT NULL,
  `shohin_bunrui` varchar(32) NOT NULL,
  `hanbai_tanka` int(11) DEFAULT NULL,
  `shiire_tanka` int(11) DEFAULT NULL,
  `torokubi` date DEFAULT NULL,
  PRIMARY KEY (`shohin_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
MySQL によって自動的に変換されていることがわかります。
MySQL :: MySQL 5.1 リファレンスマニュアル :: 12.5.4.9 SHOW CREATE TABLE 構文

テーブルの削除

mysql> DROP TABLE Shohin;
テーブルが存在していなかった場合はエラーになりますが IF EXISTS と書くことでエラーを防ぐことができます。
mysql> DROP TABLE IF EXISTS Shohin;
MySQL :: MySQL 5.1 リファレンスマニュアル :: 12.1.14 DROP TABLE 構文

次回

次回は「データ型・制約の指定」についてを予定しています。
SQL ゼロからはじめるデータベース操作 (CD-ROM付) (プログラミング学習シリーズ)
SQL ゼロからはじめるデータベース操作 (CD-ROM付) (プログラミング学習シリーズ)
2012/09/30

[SQLearning][SQLite]ログインとデータベースの作成・削除

SQL ゼロからはじめるデータベース操作を教材にしてSQLiteを学ぶ
SQL学習連載「SQLearning」を始めます。

準備は以下の記事で済んでいると想定します。
SQL ゼロからはじめるデータベース操作で SQLite を学ぶ | DevAchieve

SQLite コンソールを開く

ターミナルで以下のコマンドを実行します。
sqlite3
SQLite にはユーザーの概念がないのでログインする必要がありません。常に管理者です。

データベースの新規作成

ファイル作成先を指定せずに作成
sqlite3 shop.db
/Users/[ユーザー名]/に作成されます。

ファイル作成先を指定して作成
sqlite3 /Users/wada/Docments/shop.db

ファイルが作成されるのは何かしらの操作をしたあとになるようです。
sqlite> .databases
上記のコマンドを実行すると接続しているデータベース名のリストが得られ、
データベースファイルが存在しない場合、ファイルが作成されます。

データベースの削除

SQLite では1データベース1ファイルなのでデータベースの削除はSQLからではなく、ファイルの削除で行います。
rm shop.db

SQLite コンソールからログアウト

sqlite> .exit
または
sqlite> .quit

次回

次回は「デーブルの作成・確認・削除」についてを予定しています。

SQL ゼロからはじめるデータベース操作 (CD-ROM付) (プログラミング学習シリーズ)
SQL ゼロからはじめるデータベース操作 (CD-ROM付) (プログラミング学習シリーズ)
2012/09/29

[SQLearning][MySQL]ログインとデータベースの作成・削除

SQL ゼロからはじめるデータベース操作を教材にしてMySQLを学ぶ
SQL学習連載「SQLearning」を始めます。
第1回は「データベースの作成」です。

準備は以下の記事で済んでいると想定します。
MacにMySQLを導入してみた | DevAchieve
※想定する MySQL のバージョンは5.1ですが5.5で実行・確認しています。
バージョンによる差異がある場合はマニュアルを併記しておくつもりです。

MySQL クライアントへのログイン

匿名ユーザーとしてログイン
mysql
ユーザー名を指定してログイン
mysql -u [ユーザー名] -p
root としてログイン
mysql -u root -p
まだユーザーを作成したり、パスワードを設定していないのでパスワードなしで root としてログインします。

データベースの新規作成

mysql> CREATE DATABASE shop;
ちなみに作成できたかは以下のクエリで確認できます。
mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| shop               |
| test               |
+--------------------+

データベースの削除

mysql> DROP DATABASE shop;

MySQL クライアントからログアウト

mysql> exit
または
mysql> quit

次回

次回は「デーブルの作成とデータ型・制約の指定」についてを予定しています。

SQL ゼロからはじめるデータベース操作 (CD-ROM付) (プログラミング学習シリーズ)
SQL ゼロからはじめるデータベース操作 (CD-ROM付) (プログラミング学習シリーズ)

タグ(RSS)