@blog.justoneplanet.info

日々勉強

Relational Database and SQL(RDBとSQL)

■データベースの作成

以下のように、「CREATE DATABASE」文や「CREATE SCHEMA」文を使用する。

CREATE DATABASE <dbname>;
CREATE SCHEMA <dbname>;

■テーブルの作成

以下のように、「CREATE TABLE」文を使ってテーブルを作成する。

CREATE TABLE <tablename> (
    <colname> <coltype> [<colattributes>],
    [...
    <colname> <coltype> [<colattributes>]]    
);

例えば以下のようになる。

CREATE TABLE book (
    id INT NOT NULL PRIMARY KEY,
    isbn VARCHAR(13),
    title VARCHAR(255),
    author VARCHAR(255),
    publisher VARCHAR(255)
)

■インデックスの作成

CREATE INDEX <indexname> ON <tablename> (<column>[, ... <column>]);

例えば以下のようになる。

CREATE INDEX book_isbn ON book (isbn);

但し、一般的には以下のようにテーブルの作成と同時に行うことが多い。

CREATE TABLE `book` (
    `id` int(11) NOT NULL auto_increment,
    `isbn` varchar(13) default NULL,
    `title` varchar(255) default NULL,
    `author` varchar(255) default NULL,
    `publisher` varchar(255) default NULL,
    PRIMARY KEY  (`id`),
    KEY `book_isbn` (`isbn`)
);

■データベースの削除

DROP SCHEMA <dbname>;

■テーブルの削除

DROP TABLE <tablename>;

■データの操作

追加

データを追加するには、以下のようにINSERT( INTO)文を使用する。テーブルのカラム名は運用上のメリットが非常に大きいため、記述することを強くお勧めする(カラムの追加に対するSQL文の耐性)。

INSERT INTO <tablename>(<colname> [, ... , <colname>]) VALUES(<value> [, ... , <value>]);

更新

データを更新するためには、以下のようにUPDATE(~SET~)文を使用する。但し、以下のコードは全レコードが特定の値に上書きされてしまう。

UPDATE <tablename> SET <colname> = <value> [, ... , <colname> = <value>];

通常は、以下のようにWHERE節などと組み合わせて使用し、特定のレコードのみを更新する。

UPDATE `address_book` SET `name` = 'Mike' WHERE `id` = '1';

削除

データを削除するには、以下のようにDELETE文を使う。但し、以下のコードは全レコードが削除される。

DELETE  FROM <tablename>;

通常は以下のようにWHERE節などと組み合わせて使用する。

DELETE  FROM `address_book` WHERE `name` = 'John';

■データの表示

データを表示するには、以下のようにSELECT文を使用する。

SELECT * FROM `address_book`;

通常、アプリケーションで全件のデータが必要なときというのは稀である。そして全件をSQLから抽出すると、サーバのメモリを圧迫することになる。従って、以下のようにWHERE節などと組み合わせて使うことが多い。

SELECT `tel` FROM `address_book` WHERE `name` = 'John';

WHERE節について

WHERE節では、条件をANDやORで複数指定できる。また、LIKE演算子を使用し大文字/小文字を区別しないようにしたり、「%(任意の複数文字)」や「_(任意の一文字)」の記号を使用して検索できる。

SELECT `tel` FROM `address_book` WHERE (`name` = 'John') OR (`name` LIKE '%Joh%' AND `age` = '27')';

正規表現と記法が異なるのが、個人的にはシックリこない。

インデックス

日本語に直訳すると「索引」。リソース内の特定の項目を検索するためのメカニズム。一般的にはアプリケーションがWHERE節などで検索に使用するカラムに対して指定される。

  • 「インデックス」はデータベースサーバがテーブルの行を特定するために使われる
  • 「インデックス」は特殊なテーブルである
  • 「インデックス」は行を特定するために使用される列と、行が物理的に配置されている場所を示す情報のみを含んでいる

主キー(primary key)

一組のデータレコードを一意に識別するための特殊なインデックス

テーブルの関係性

テーブルの関係性として「1:1」と「1:複数」の場合は簡単に処理できるが、「複数:複数」の場合はintermediate tableなどを使用しなくてはならない。

1:1
子テーブルの1レコードが、親テーブルの1レコードと関連する
1:複数
子テーブルの複数レコードが、親テーブルの1レコードと関連する
複数:複数
子テーブルの複数レコードが、親テーブルの複数レコードと関連する

関係性を意識したテーブルの作成

1:1

以下のように、primary keyを共通にしてみると良い。

CREATE TABLE `book` (
    `id` int(11) NOT NULL,
    `isbn` varchar(13) default NULL,
    `title` varchar(255) default NULL,
    `author` varchar(255) default NULL,
    `publisher` varchar(255) default NULL,
    PRIMARY KEY  (`id`),
    KEY `book_isbn` (`isbn`)
);
CREATE TABLE `book_author` (
    `id` int(11) NOT NULL PRIMARY KEY,
    `author_id` int(11) NOT NULL
);
1:多

以下のように、REFERENCESを使用してbookテーブルを参照するようにする。

CREATE TABLE `book` (
    `id` int(11) NOT NULL auto_increment,
    `isbn` varchar(13) default NULL,
    `title` varchar(255) default NULL,
    `author` varchar(255) default NULL,
    `publisher` varchar(255) default NULL,
    PRIMARY KEY  (`id`),
    KEY `book_isbn` (`isbn`)
);
CREATE TABLE `book_chapter` (
    `id` int(11) NOT NULL PRIMARY KEY auto_increment,
    `isbn` varchar(13) REFERENCES `book`(`isbn`),
    `chapter_number` INT NOT NULL,
    `chapter_title` varchar(255)
);

コメントはまだありません»

No comments yet.

RSS feed for comments on this post.TrackBack URL

Leave a comment