webdata
DX推進をサポートする技術者向け情報提供サイト

初心者向けPHP・データベース入門

TOP >初心者向けPHP・データベース入門 >2.2 DBの基本操作

【PHP入門】DBの基本操作

 2023-04-23 (更新日:2023-06-03)

<学習する内容>

 データベースの概要と、sql文を使ってデータベースやテーブルの作成、データの登録・更新等を使って動きを理解します。

1)データベースとは

 データを入れる箱であり、データの作成、読込み、更新、削除できる4つの基本で操作できるものです。
本サイトではよく使われるリレーショナルデータベースについて記述します。
 ひとつのテーブル(表)だけ操作するのではなく、複数のテーブルを関連(リレーション)づけて操作できるのが リレーショナルデータベースです。
例えば名刺管理を作るとしましょう。一つのテーブルに会社名、住所、氏名、電話番号等 入れると情報が増えてしまいます。これを企業の情報、担当者の情報を分けて、得意先コードで関連させてテーブルで作成します。
仮に住所が変わった場合、テーブルが1つだとすべてのデータを更新させないといけないですが、得意先情報と分けていれば 得意先テーブルの住所のみ1つのデータを変えるだけで情報の更新が済ます。
データの取り扱いが簡素化でき情報量も重複する住所データが減ります。重複するのはリレーション用の企業コードだけで済みます。

一つのテーブルの場合
担当者
コード
得意先名 担当者名 郵便番号 住所1 住所2
1 ABC株式会社 田中 太郎 220-0001 横浜市西区〇〇 〇〇・・・ビル
2 ABC株式会社 井上 一郎 220-0001 横浜市中区〇〇 〇〇・・・ビル
3 株式会社DEF 渡辺 進 ***-**** ・・・ ・・・
4 ・・・・ ・・・ ***-**** ・・・ ・・・

二つのテーブルに分けると
<得意先テーブル>
得意先
コード
得意先名 住所等
100001 ABC株式会社 ・・
100002 株式会社DEF ・・
100003 ・・・・ ・・
得意先コードで
リレーション
<担当者テーブル>
担当者
コード
得意先
コード
担当者名
1 100001 田中 太郎
2 100001 井上 一郎
3 100002 渡辺 進
4 100002 ・・・・

 データベース化する一番のメリットはデータが一元管理できること。エクセルだとファイルはどんどん増え、どのデータが最新なのか管理が必要となります。 リアルタイムにデータの重複もなく管理できることです。

2)得意先一覧のデータベースのテーブル設計

 操作する前に得意先のデータベースを作成します。
作業としては、データベースを作成し、得意先情報を入れるテーブル(エクセルシートのようなもの)を作成します。下記の項目がエクセルでいう列に相当しDBではカラムやフィールドと呼びます。
どのような表をつくるか検討しましょう。
 設計 テーブル名:Mcustomer  
項目 カラム名 データ型 長さ 備考
得意先コード customerCode int 11 プライマリキー
得意先名 customerName varchar 50
郵便番号 zipcode varchar 8
住所1 address1 varchar 30
住所2 address2 varchar 30

長さとは、文字や数字の個数(桁数)。例)ABCは3桁、ABCでも3桁、12345なら5桁
intとは、整数 (INTEGER) 型 指定しない場合は11桁で、12桁以上指定する場合がbigint
varcharとは、文字列を意味するデータ型。

3)得意先のデータベース作成とテーブルを作成

 操作する前に得意先のデータベースを作成します。データベースアプリケーションには複数のデータベースを作成することができます。 営業用や経理用、技術用とか。このデータベースを作ってから、テーブル(表)を作っていきます。
今回は営業用としてsalesというデータベースを作ります。
・最初にコマンドプロンプトを起動します。
この検索で
powershell と入力しenter
左記の画面が表示されます。
ここにデータベースのコマンドを入力し
作成していきます。

①ディレクトリーの位置を変更します。
C:\Users\****> cd /xampp/mysql/bin コマンドのあるディレクトリーに移動
 まだパスを通す設定をしていないでこの作業が必要です。  →  パスの設定方法はこちら

②データベース(mysql)にログインします。
 C:\xampp\mysql\bin> mysql -u root -h localhost -p 
 
 -u はユーザ、-hはコンピュータ名やIPアドレス、-pはパスワード
 Enter password: *********      パスワードを入力しEnter
 ログインするとC:\Users\****> から MariaDB [(none)]>が表示が変わります。

 
 ・ログイン時にデータベースを指定することができます
  C:\xampp\mysql\bin> mysql -u root -h localhost -p********* sales
   **********はパスワード -p後スペースは入れない 続いてsalesを記述
   この1行でsalesというベータベースを指定してログインできます
   ※ERROR 2002 (HY000): Can't connect to MySQL server on 'localhost' (10061)
    のエラーが出た場合はmysqlが起動してません。
    Xamppのcontrol panel よりmysqlを起動させてください。
 ・過去の入力したコマンドを呼び出す
   キーボードの上↑で過去の入力をよび出せます

データベースを作成します。
MariaDB [(none)]> create database sales; sales というデータベースを作る
※SQLの命令文の最後には必ず「 ; 」が必要

④この作成したsalesというデータベースを指定します。
MariaDB [(none)]> use sales; salesというデータベース利用するのことを指定する
MariaDB [none] → MariaDB [sales]
[]内の利用データベース名に切変わります。
 
テーブル(データを入れる表)を作成します。
 作業としては、データベースを作成し、得意先情報を入れるテーブル(エクセルシートのようなもの)
 を作成します。
 MariaDB [(sales)]> create table Mcustomer ( customerCode int(11) primary key,customerName varchar(50),zipcode varchar(8),address1 varchar(30),address2 varchar(30));
 
<解説>
テーブル名がMcustomerで
(カラム名がcustomerCode でデータ型がint(11) (11桁の整数型)でプライマリーキー、
カラム名がcustomerName で データ型がvarchar(50) (50桁の文字型)、
カラム名がzipcode で データ型がvarchar(8) (8桁の文字型)、
カラム名がaddress1 で データ型がvarchar(30) (30桁の文字型)、
カラム名がaddress2 で データ型がvarchar(30) (30桁の文字型))
を作りなさい。というコマンド。
・プライマリーキーは、重複しない固有のデータにするという指定
・カラムとは、データの列。テーブルとは表イメージとしてはエクセルのシート。この列がカラムです。
・データ型には、カラム毎どのような型を入れるかの指定ができる。intは整数値のみで11桁まで、
 桁を増やしたいならbigint(15)と記載する。varcharは文字が、floatは少数点のある数値等々、
 どういったものが他にあるかはネット検索ください。「sqlデータ型」検索など

作成されたテーブルの構成を確認します。
 MariaDB [(sales)]> desc Mcustomer;
 

4)データの作成と抽出、更新等SQL文を使って見る

①データ作成
 MariaDB [sales]> insert into Mcustomer(customerCode,customerName,zipcode,address1,
address2) values (10001,'ABC株式会社','220-0001','神奈川県横浜市中区〇〇','横浜ビル10階');
※PowerShellから日本語等(全角文字)の入力すると「強制的に貼り付け」を聞いてきますのでそのまま「強制的に貼り付け」をクリック下さい。  
 insert文では、記述の順番のカラムに合わせvalues以降でデータを記載します。
 カラムがvarcharの場合データは必ずシングルコーテーション「'」 で囲まれていること。
 他に、sql文の途中でEnterを押すと改行され→表示されます。そのまま記述することができ
 ます。また改行は何回も繰り返し行われ最後のセミコロン「;」のEnterで実行されます。

②データの抽出
 MariaDB [sales]> select * from Mcustomer;
 
 データの呼びだしはselect文を使います。「*」はすべてのカラムの呼出しです。
 
 呼び出すカラムを指定することもできます。
 MariaDB [sales]> select customerCode,customerName from Mcustomer;
 
 
 条件式where句
 MariaDB [sales]> select * from Mcustomer where customerCode = 10001;
  customerCodeが10001のデータを抽出
  以外の場合は、customerCode <> 10001 記述

 MariaDB [sales]> select * from Mcustomer where address1 like '神奈川%';
  address1が神奈川のデータを抽出
  ※文字列(数字以外)等の場合は条件式には ' ' で囲む必要があります。
  %は以降の文字はなんでも(曖昧検索)を指定
  %神奈川%の場合、文字の中に神奈川が含まれるものを抽出
  以外の場合は、address1 not like '神奈川%' 記述

③テーブルのデータを更新
 MariaDB [sales]> update Mcustomer set zipcode = '220-0002' where customerCode = 10002;
  テーブル名:McustomerのcustomerCodeが10002のzipcodeを220-0002に更新しなさ
  い

④テーブルのデータを削除
 MariaDB [sales]> delete from Mcustomer where customerCode = 10002;
  テーブル名:McustomerのcustomerCodeが10002のprefを削除しなさい

⑤テーブルのカラムを追加
 MariaDB [sales]> alter table Mcustomer add telephone varchar(12) after address1;
  テーブル名:Mcustomerのカラムaddress1の後にtelephoneという名のカラムを追加し
  なさい。after address1 のようにどのカラムの後に追加するか指定がないと一番最後に
  追加される

⑥テーブルのカラムを変更
 MariaDB [sales]> alter table Mcustomer change telephone tel varchar(12);
  テーブル名:Mcustomerのカラムtelephoneをtelというカラム名に変更しなさい。
  このときデータの型も変更できます

⑦テーブルのカラムを削除
 MariaDB [sales]> alter table Mcustomer drop tel;
  テーブル名:Mcustomerのカラムtelを削除しなさい

⑧テーブルを削除
 MariaDB [sales]> drop table Mcustomer;
  テーブル名:Mcustomerを削除しなさい

⑨データベースを削除
 MariaDB [sales]> drop database sales;
  データベース名:salesを削除しなさい

⑩データベース一覧の確認
 MariaDB [sales]> show databases;
 

⑪データベース内のテーブルの確認
 MariaDB [sales]> show tables;
 

6)失敗で理解する

・SQLエラー
 sql文に間違いがあるとエラーが表示されます。
 <文法間違い>
  
  fromがありません。
 <無いテーブルの指定>
  
  テーブル名の最後にMcustomer1で存在しないテーブルです。
 <無いカラムの指定>
  
  テーブル名の最後にcustomer_Name1で存在しないカラムです。
 <データ重複>
  
  プライマリーキーcustomerCode 10001が重複
 <シングルコーテーション「'」漏れ>
  
  芝ビル10階'の最後「'」が抜けいている(SQL文が終わってないと判断)
  
  > '; を入力してエラーで終わらせます

7)Mysqlの扱う文字特性について

 Mysqlを取り扱う文字では、大文字、小文字の区別はしません。テーブル名をMcustomerとして作成してもmcustomerでも同様とします。 また、カラム名も同じで、データを検索しても大文字小文字に関係なく検索してくれます。本サイトでMcustomerにように混在させているは プログラムを見やすくすることが目的」です。
注意)phpの変数は大文字小文字識別しますので注意してください。

 次はPHPからDBの操作を行います。