データベース 初日
MariaDB
MySQLから派生して作られたオープンソースデータベース。
MySQLと互換性がある。
データベースとは
データベース(以下、DB)は管理人付きの情報保管庫のようなもの。あらゆるデータを記録し、記録したデータを必要な時に閲覧できる。
DBの優れている点は管理人がいること。データを記録するだけであれば、テキストファイルやXMLファイルでも可能だが、検索や並び替えなどを行うことはできない。しかし、管理人が常駐しているDBの場合、管理人にオーダーを出せば検索や並び替え、計算などを行い、必要なデータを適切な状態で渡してくれる。
この便利なDBの機能を使うためには管理人にオーだを出すための言語、SQL(Structured Query Language)を覚える必要がある。
DBの種類
DBには多くの種類があり、機能や性能、価格が違う。
代表的なDB
Oracle Database
MySQL
MariaDB
PostgreSQL
SQLite
Microsoft SQL Server
Microsoft Access
FileMaker
MariaDBの設定
my.iniの設定
165行目にある[mysql]設定の下に以下の設定を変更
default-character-set=cp932
「my.ini」を保存する。
my.iniファイルを変更した時は
MariaDBの設定ファイルである「my.ini」を変更した時は、必ずXAMPPコントロールパネルからMariaDBを再起動する。再起動を忘れると変更した設定が反映されない。
MariaDBクライアントプログラムの起動
文字コードの確認
以下の命令を記述し、データベースの文字コード情報を表示する。
SHOW VARIABLES LIKE 'char%';
以下の設定になっていれば設定完了。
+--------------------------+--------------------------------+
| Variable_name | Value |
+--------------------------+--------------------------------+
| character_set_client | cp932 |
| character_set_connection | cp932 |
| character_set_database | utf8mb4 |
| character_set_filesystem | binary |
| character_set_results | cp932 |
| character_set_server | utf8mb4 |
| character_set_system | utf8 |
| character_sets_dir | C:\xampp\mysql\share\charsets\ |
+--------------------------+--------------------------------+
管理者(root)パスワードの設定
MariaDBの
- XAMPPコントロールパネル「MySQL」を起動
- XAMPPコントロールパネル右側「Shell」ボタンをクリック
起動した「Shell」に以下のコマンドを入力して「Enter」
mysqladmin -u root password
- 「New password:」に続いて設定するパスワードを入力して「Enter」
- 「Confirm new password:」に続いて先程設定したパスワードを再度入力して「Enter」
管理者(root)でMariaDBクライアントプログラムを起動させる
シェル(コマンドプロンプト)に以下の命令を入力し「Enter」を押す
mysql -u root -p
パスワードを聞かれるので、先程設定したパスワードを入力し「Enter」を押す
Enter password:
カーソルが点滅している行の行頭が以下になっていれば、MySQL(MariaDB)の命令待ちになっている
MariaDB [(none)]>
MariaDBクライアントプログラムの終了
quit
MariaDBクライアントプログラムを終了させる
MariaDBクライアントプログラムが起動していることを確認して「quit」と入力し、[Enter]を押す。すると、「Bye」と表示されMariaDBクライアントプログラムが終了する。
「quit」以外に「¥q」や「exit」でも終了させることができる。
MariaDBの記述法
SQL文入力待ちになっていることを確認
行頭がSQL文入力待ち状態「mariaDB[DB名]>」になっていることを確認して記述する。
セミコロンまでが一つの命令
セミコロンを書き忘れて[Enter]を押すと改行される。
大文字と小文字の違いはOK
全角文字と半角文字の違いはNG
記述を間違ったときは一旦「;(セミコロン)」で完了してエラーを出して書き直す。
データベース領域
データベース領域一覧の表示
SHOW DATABASES
SHOW DATABASES;
データベース領域の作成
CREATE DATABASES
DBマネジメントシステムの中に新しいDB領域を作成する書式は次のとおり
CREATE DATABASE データベース領域名;
「lesson」という名前のDB領域を作成してみる。
データベース領域の選択
USE
※USEは最後にセミコロンがなくてもOK
USE データベース領域名
練習用に作成したDB領域「lesson」を選択してみる。
現在利用しているDB領域を確認
使用するDB領域を選択すると、SQL文入力待ち状態の行頭の文字が「MariaDB[(none)]>」から「mariaDB[選択したDB名]>」に変わる。
現在選択しているDB領域名を表示する命令もある。
SELECT database();
※今は「MariaDB」の後の[]内にDB領域名が書かれているので使うことはない
テーブル
実際にデータを入れる表組みのこと。
列はデータの項目を意味し、「フィールド」や「カラム(column)」と呼ばれる。
テーブルの作成
CREATE TABLE
CREATE TABLE テーブル名 (
フィールド名1 フィールドの型1 属性1,
フィールド名2 フィールドの型2 属性2,
フィールド名x フィールドの型x 属性x,
);
-- テーブル作成
-- テーブル名「goods」
-- 「id」「item」「price」フィールドを作成
-- 最後のフィールドを記述したあと「,」を入れないように注意
CREATE TABLE goods (
id INT AUTO_INCREMENT PRIMARY KEY,
item CHAR(10),
price INT DEFAULT 0
);
-- AUTO_INCREMENT:自動連番
-- PRIMARY KEY:UNIQUE & NOT NULL
-- 対象データを1件特定する特別なフィールド
-- DEFAULT 値:値を入力されなかった時の値
-- 未入力時、通常は「null」が入る
フィールドの型と属性
フィールドの型
データ型 | 内容 |
---|---|
TINYINT | 8ビット整数(-128~127) |
SMALLINT | 16ビット整数(-32,768~32,767) |
INT | 32ビット整数(-2,147,483,648~2,147,483,647) |
BIGINT | 64ビット整数 (-9,223,372,036,854,775,808~9,223,372,036,854,775,807) |
FLOAT | 単精度の浮動小数点 |
DOUBLE | 倍精度の浮動小数点 |
CHAR | 固定長文字列(最大255バイト) |
VARCHAR | 可変長文字列(最大64バイト) |
TEXT | 可変長文字列(最大64バイト) |
DATE | 日付 |
DATETIME | 日付と時間 |
BLOB | バイナリデータ |
フィールドの属性
属性 | 内容 |
---|---|
PRIMARY KEY | 主キー:ユニーク値であり NULL 値をゆるさない(UNIQUE & NOT NULL) |
AUTO_INCREMENT | 自動連番を振る |
UNIQUE | 別レコードに同じ値を持つことはできない |
NOT NULL | 必須(省略不可)項目でありNULL値を許さない |
DEFAULT | 値が入らなかったばあいのデフォルト値を指定する |
ON UPDATE | 自レコードを更新した時に指定した値を入力する |
テーブル一覧の表示
SHOW TABLES
SHOW TABLES;
フィールドの構成を調べる
簡単に
レコードを追加する
INSERT INTO
【書式1】
INSERT INTO テーブル名
(フィールド名, フィールド名)VALUES
【書式2】
INSERT INTO テーブル名
SET フィールド名1=値1, フィールド名2=値2, ・・;
書式1
複数レコードを一気に追加する時に使いやすい
文字列は「’」か「”」で囲む
書式2 ※PHPでの利用はこちらの方が楽
-- 【レコードの追加】
-- ●書式1●
INSERT INTO goods (item, price)VALUES('おいしい水',190);
INSERT INTO goods (item, price)VALUES('ポテトチップス',120);
INSERT INTO goods (item, price)VALUES('チョコレート',150);
-- ●書式2●
INSERT INTO goods SET item='パイナップル', price=330;
INSERT INTO goods SET item='食パン', price=180;
INSERT INTO goods SET item='米', price=2000;
-- 【レコードを表示】
SELECT * FROM goods;
入力しないフィールドがある場合
-- 入力しないフィールドがある場合
-- 「NULL」が入る
-- DEFAULT値があるフィールドは
-- DEFAULT値が入る
INSERT INTO goods (item)VALUES('たまねぎ');
INSERT INTO goods (price)VALUES(9800);
データを取得する
SELECT
SELECT フィールド名1, フィールド名2, ・・ FROM テーブル名
[WHERE 条件文]
すべてのフィールドを取得する場合はフィールド名に「すべて」を意味する記号「*(アスタリスク)」を記述する
WHEREで条件をつけて表示
「WHERE」で条件をつけると、その条件と合致したデータのみ取得できる。例えばidフィールドが「3」のデータを取得したい時は以下のような書式になる。
データを変更する
UPDATE
UPDATE テーブル名
SET フィールド名1=値1, フィールド名2=値2,
WHERE 条件文;
★WHEREの条件指定を忘れると全てのレコードが変更されてしまうので注意!
-- レコードを変更する
-- ★WHERE句を必ず指定するように!!★
-- 忘れると、全レコードが変更されてしまう
UPDATE goods SET item='アボカド' WHERE id=4;
UPDATE goods SET item='チョコパン' , price=240 WHERE id=5;
変更時にWarningが表示される
itemフィールドの型は「CHAR(10)」で設定している。ここに10文字を超えた値をセットしようとした。「Warnings:1」はフィールドに入りきらなかった文字列を切り取って処理したことを警告している。
こういった警告が出ないようにテーブル作成時にしっかりとフィールドの型を定義する。
-- 文字数の上限を超えると削除されてしまうので
-- 余裕をもったフィールド構成にする
UPDATE goods
SET item='ポテトチップスバターしょうゆ味' WHERE id=2;
文字列の中に「’」や「”」がある場合
文法エラーなので実行されない。
-- 文字列の中に「'」や「"」がある場合
-- 文字列のセットが壊れてうまく命令を実行できない
UPDATE goods SET item='カフェ'チョコ' WHERE id=3; '
-- 「'>」が表示された時は
-- 「文字列内のまま」の意味なので
-- 「'」で文字列のセットを完成させた後に
-- 「;」で命令を終了させる
-- ちなみに通常の開業時は「->」が表示される
-- 文字列内の「'」「"」は「\」でエスケープする
UPDATE goods SET item='カフェ\'チョコ1' WHERE id=3;
UPDATE goods SET item="カフェ'チョコ2" WHERE id=3;
データを削除する
DELETE
DELETE FROM テーブル名 WHERE 条件文;
id番号「4」のアボカドを削除してみる。
★WHEREの条件指定を忘れると全てのレコードが削除されてしまうので注意!
-- レコードの削除
-- ★WHERE句を必ず指定するように!!★
-- 忘れると、全レコードが削除されてしまう
DELETE FROM goods WHERE id=4;
問題5:顧客テーブルを作成してデータを管理する
-- 問題5
-- 1.新規テーブル作成
CREATE TABLE customer (
id INT AUTO_INCREMENT PRIMARY KEY,
name CHAR(20) NOT NULL,
address TEXT NOT NULL
);
-- 2.データ入力
INSERT INTO customer (name, address)VALUES('鈴木一郎','東京都');
INSERT INTO customer (name, address)VALUES("Shaquille O'Neal",'栃木県');
INSERT INTO customer (name, address)VALUES('田中大五郎','北海道');
INSERT INTO customer (name, address)VALUES('西島洋介','千葉県');
INSERT INTO customer (name, address)VALUES('木村太郎','沖縄県');
INSERT INTO customer (name, address)VALUES('佐々木美樹','和歌山県');
-- ↓ 書き方、コレで良かった・・・orz
-- INSERT INTO customer (name, address)VALUES
-- ('鈴木一郎','東京都'),
-- ("Shaquille O'Neal",'栃木県'),
-- ('田中大五郎','北海道'),
-- ('西島洋介','千葉県'),
-- ('木村太郎','沖縄県'),
-- ('佐々木美樹','和歌山県');
-- 3.データ変更
UPDATE customer SET name='木村大五郎' WHERE id=3;
UPDATE customer SET address='大阪府' WHERE id=5;
UPDATE customer SET name='イチロー', address='シアトル' WHERE id=1;
-- 4.データ削除
DELETE FROM customer WHERE id=4;
スクリプトファイルの作成
スクリプトファイルとは
複数のSQL文をテキストファイルに保存し、そのファイルをMariaDBに読み込ませて実行する。これにより効率的にDBを構築することができ、初期データの登録やテスト用DB領域の作り直しを簡単に行うことができる。