LogoMark.png

Database のバックアップの現在との差分(No.2)


#author("2023-11-14T16:27:20+09:00;2023-11-14T16:26:27+09:00","default:inoue.ko","inoue.ko")
#author("2023-11-16T13:30:03+09:00","default:inoue.ko","inoue.ko")
*Database
~

データベースとは、大量のデータをコンピューターで扱いやすい形に整理したものです。インターネット検索、チケット予約、ブログ、オンラインショッピングなど、様々なアプリケーションやWebサイトがデータベースと連携しています。
~

***CONTENTS
#contents2_1
~
~

**概要
***データモデル
データモデルには、カード型、階層型、ネットワーク型、リレーショナル型などが存在しますが、現在主流となっているデータモデルはリレーショナル型です。

リレーショナル型データベースは、データを列(Column)と行(Row)で表現される表(Table)の集合として編成されます。

Table には一般にデータ(行、レコード)を一意に識別するための」''PRIMARY KEY(主キー)''(学籍簿で言えば「学籍番号」)や、他の Table を参照する''FOREIGN KEY(外部キー)''などが設定されます。これらによって、複数の Tableを関係づけた、様々な「問い合わせ」や「ビュー(仮想 Table)」の作成が可能になります。

小規模なデータ管理であれば、同じく Table を基本とするスプレッドシートでも事足りますが、大規模かつ効率的なデータ管理を行うには、これが重宝します。
~

***DBMS
データベースを管理するソフトウェアのことを一般にデータベース管理システム(DBMS:DataBase Mnanagement System)と呼びます。DBMSには、データ管理のための様々な機能があって、それらは以下4つの機能に分類されます。

-Data Definition(データ定義)
データの編成を規定する定義の作成、変更、および削除
-Update(更新)
実データを挿入、変更、および削除
- Retrieval(検索)
データを直接、または他のアプリケーションで処理できる形式で提供
検索結果は、データベースに保存されているものと同形式、または、それらを編集した新たな形式でも利用することができる
-Administration(管理)
ユーザー登録、状態の監視、データの維持・管理、破損情報の回復など


DBMSの具体例としては、MySQL、Microsoft Access、Microsoft SQL Server、FileMaker Pro、Oracle Database、dBASE などがありますが、その代表はオープンソースの__[[MySQL>Database/MySQL]]__(派生版:MariaDB) です。

MySQLは、Webベースのアプリケーションに最適なプラットフォームで、オンデマンド利用における柔軟性から、Airbnb、Uber、LinkedIn、Facebook、X(Twitter)、YouTubeなど、世界中に多数の利用者を持つ Webアプリケーションに利用されています。
~
~

**SQL
***SQLとは
データの書き込みや問い合わせ(クエリ)には、SQL(Structured Query Language:構造化クエリ言語)を使用します。
SQL(Structured Query Language:構造化クエリ言語)とは、データの定義、書き込み、問い合わせ(クエリ)などを行うためのデータベース言語です。

SQLによるデータベース操作には「対話型」と「埋め込み型」の2種類があります。対話型は、phpMyAdmin のようなツール上で、ユーザーが直接SQLのコマンドを打ち込むもので、埋め込み型は、PHPやJavaなどのプログラミング言語で記述したソースコードにSQL文を埋め込むものです。
SQLによるデータベース操作には「対話型」と「埋め込み型」の2種類があります。対話型は、[[Terminal]]接続や、phpMyAdmin のようなGUIツール上で、ユーザーが直接SQLのコマンドを打ち込むもので、埋め込み型は、PHPやJavaなどのプログラミング言語で記述したソースコードにSQL文を埋め込むものです。

SQLは、 あくまでもデータの操作や定義を行うためのデータベース言語で、それ自体はプログラミング言語ではありません。実際的には、様々なアプリケーションにおけるデータベースへのアクセスのために、他のプログラミング言語(ホスト言語)に埋め込まれて利用されるのが一般的です。

SQLはその機能によって「データ定義言語」「データ操作言語」「データ制御言語」の3種類に分類されます。以下、それぞれの概要と命令文の例です。
~

***DDL(Data Definition Language:データ定義言語)
データを格納する際の構造を定義するためのSQL
-CREATE:オブジェクトを制作する
-JOIN:テーブルを結合する
-DROP:オブジェクトを削除する
-ALTER:オブジェクトの内容を変更する
-TRUNCATE:データを全削除する
~

***DML(Data Manipulation Language:データ操作言語)
格納された個々のデータを操作するためのSQL
-SELECT:データを検索して取得する
-INCERT:データを追加する
-DELETE:データを削除する
-UPDATE:データを更新する
~

***DCL(Data Control Language:データ制御言語)
データへのアクセス権限などを制御するためのSQL
-GRANT:ユーザーに権限を付与する
-REVOKE:ユーザーの権限を削除する
-BEGIN:トランザクションを開始する
-COMMIT:トランザクションを確定する
-ROLLBACK:トランザクションを取り消す
~

***DBMSでの対話例
MySQLをWebブラウザから管理する GUIツール phpMyAdmin を使うと、SQLによるデータベースとの対話が簡単に行えます。
Terminalからデータベースに接続する、あるいは GUIツール phpMyAdmin を使うと、SQLによるデータベースとの対話が可能になります。

例えば、成績一覧テーブルから、芸術学部の学生の英語の点数のみを抽出するには、以下のようなSQL を書いて「実行」します。 
例えば、成績一覧テーブルから、芸術学部の学生のみを選んで、その英語の点数のみを抽出するには、以下のようなSQL を書いて「実行」します。 
 SELECT 英語 FROM 成績一覧 WHERE 学部 = '芸術'; 
~

***PHPでの埋め込み例
PHPからデータベースに接続するには、PDO(PHP Data Objects)というデータベース接続クラスを使用します。以下、商品表(shohin)から ID(id) と 商品名(name)を抽出する例です。

 // データベースへの接続情報の設定
 $dsn = 'mysql:dbname=SampleDB; host=localhost';
 $user = 'SampleUser';
 $password = 'SampleP@ssWord';
 
 // PDOインスタンスの生成
 $pdo = new PDO( $dsn, $user, $password );
 $pdo->query('SET NAMES utf8;'); // 文字化け対策

 // クエリの定義
 $sql = 'select id,name from shohin';
 
// クエリの実行
 foreach ( $pdo->query( $sql ) as $row ) {
     print( $row['id'] );
     print( $row['name'].'<br>' );
 }
 
 // データーベースを切断
 unset($pdo);

上記の例では・・
-mysql:dbname = mydb; host = localhost; の部分が、データベースへの接続に必要な情報( DSN:Data Source Name )です。
-select id,name from shohin  という記述が SQL です。

~
~

**phpMyAdmin
***概要
#image(phpMyAdmin07.jpg,right,40%)
[[phpMyAdmin>https://www.phpmyadmin.net/]]とは、MySQLをブラウザからデータベースに接続してGUIで管理するツールです。通常、MySQLを設置したサーバの Webディレクトリ(/var/www/html)に置いて、ブラウザからアクセスします。当然 PHPが動作するサーバ環境になっていることが必要です。

これを使うと、ブラウザからデータベースを操作することができるので、Webアプリケーションの開発等に興味がある方は、まずこれを使って、データベースとその操作のイメージを掴むことをお勧めします。
~

***ダウンロードとセットアップ
-ローカルで XAMPP を利用しているケース
すでに同梱されています。以下のアドレスで確認できるはずです。
http://localhost/phpmyadmin/

-レンタルサーバーを利用するケース
すでに置いてあるケースが大半です。サーバーの管理ページのメニュー項目に phpMyAdmin がないか確認してください。

-自身でサーバーを立てているケース
自分でインストール・初期設定する必要があります。
--以下の公式サイトから phpMyAdmin をダウンロード
https://www.phpmyadmin.net/
--FTP接続で phpMyAdmin フォルダをドキュメントルートにアップロード
&color(red){公開サーバーの場合、ドキュメントルートにあるの phpMyAdmin という名称は攻撃を受けやすいので、別名に変更する方がよいでしょう。};
--設定の詳細は [[Database/MySQL#phpMyAdmin]] に記載しています。
~

***アクセス方法
-ローカルで XAMPP を利用しているケース
自分のPCにXAMPPをインストール済みで、XAMPPマネージャで MySQL Database を Running させている場合は、以下のアドレスとログイン情報でアクセスできるはずです。
--接続先:http://localhost/phpmyadmin/
--データベースユーザー:root
--パスワード:なし

-レンタルサーバーを利用するケース
サーバー管理画面にアクセスすると、メニュー項目に phpMyAdmin というワードが見つかると思います。そこから接続可能です。

-自身でサーバーを立てているケース
MySQL(MariaDB)のインストール・設定時に自身で設定したユーザ名とパスワードを使ってアクセスします。MySQL(MariaDB)のインストールや利用者設定は、通常SSH接続で遠隔操作します。> 詳細:[[Database/MySQL]]
--接続先:http(s)://path/to/(phpMyAdminのディレクトリ名)/
--データベースユーザー:MySQL(MariaDB)に自身で設定したもの
--パスワード:MySQL(MariaDB)に自身で設定したもの
~

***付記:XAMPP をインストール済みの方へ
自分のPCにXAMPPをインストール済みで、XAMPPマネージャで MySQL Database を Running させている場合は、以下のアドレスで、その動作を確認することができるはずです。
http://localhost/phpmyadmin/
***データベースの作成
#image(phpMyAdmin01.jpg,right,40%)
phpMyAdmin に接続すると、デフォルトで4つのデータベースがありますが、まずは、新しいデータベースを作成して、それを使って試しましょう。
~

-1) 新規作成をクリック

#image(phpMyAdmin02.jpg,right,30%)
-2) 「データベース」タブが表示されるので、以下のように入力して「作成」
--データベース名:sample_db
--照合順序:utf8mb4_general_ci

#image(phpMyAdmin03.jpg,right,30%)
-3) 「構造」タブに「テーブルを作成」と表示されるので、以下のように入力して「作成」
--名前:member
--カラム数:4

-4) データベースの構造を定義する画面が表示されるので、以下のように設定して「保存する」をクリック
#image(phpMyAdmin04.jpg)
--名前:id、データ型:INT(Integer:整数値という意味です)
ユニークな(他とかぶらない)値なので、PRIMARY を設定して下さい。
--名前:name、データ型:VARCHAR(255)
--名前:e-mail、データ型:VARCHAR(255)
--名前:created、データ型:datetime
データが登録された際にその日付が自動入力されます。
--付記:name や e-mail の型に TEXT を設定する例もあるようですが、VARCHARは固定長データとしてそのままデータベースに格納、TEXTは長文となることが前提なので、ポインタ(格納場所のアドレス)が格納される・・という違いがあります。VARCHARの方が、その後の処理は高速になります。


-5) テーブル member ができました。
#image(phpMyAdmin05.jpg)


-6) データを数件登録してみます。「挿入タブ」から適当に入力してみて下さい。実行をクリックすると、挿入操作の SQL が表示されて、以下のようにテーブルにデータが登録されたことがわかります。
|45|10|45|c
|#image(phpMyAdmin06.jpg)|>|#image(phpMyAdmin07.jpg)|
~

***データベースの操作
ここから先は、データベースに複数の TABLE を作成して、データの挿入・更新・削除、また、複数の TABLE を組み合わせて問い合わせを行う・・という流れになります。phpMyAdmin は SQL を書く作業を GUI 化させたものなので、その具体的な理解には SQL を直接理解するのが賢明です。以下をご覧下さい。

[[Database/SQL]]

~
~
~