データベース:MySQL
データベースを操作するツール:phpMyAdmin
(仮)会員を管理して会員が投稿したメッセージを管理するシステムを作成
#テーブル作成とカラム作成
①新規作成→②データベース名→③作成ボタンを押す
utf8mb4_general_ciは文字コードの選択で日本語ならこれでOK
テーブルを作成
テーブル名:users カラム数:10
エクセルでいうシートのイメージでカラムの数は後で変更できる。実行ボタンを押す
テーブルを作成する際には
あらかじめ何を入れるか決めとく必要がある。
例えば今回なら会員メンバーを登録するので
それによって名前、データ型に何を入れるかかわってくる。
名前の欄に
name(名前)email(メール)gender(男、女)birth(誕生日)age(年齢)
データ型を入れる際の注意点
データ型に例えば名前なのにINT型にしてしまうと、そこには数字しか入らなくなるので考えて入れる。
名前だと文字なので文字列型を入れるんですが、TEXEでもいいのですが、TEXTだと6万5千文字ぐらい入る。
名前はせいせい20文字くらいなので文字列に制限がある文字列型にする方がよい。
制限がある文字列型だとCHAR、VARCHAR、TINYTEXT、LONGTEXTその他にも色々ある。
データベースは大量にデータがはってくるので余計な領域な取らないほうがいよい。
名前だとVARCHRがよい。
データが何も入ってない状態なので挿入ボタンを押してデータ入れる。
本来はweb上で会員登録画面から入力してデータベースに登録する流れになるが
今回は仮ということで挿入ボタンから直接入力した。
#SQLの基本とINSERT(挿入)
挿入とか編集はボタンを押して簡単にできるが、
データベースをしっかり使いこなすには
SQL(お問い合わせ言語)が必要になってくるので
SQLの基本から学ぶ。
SQLのタブをクリックするとコードを書くことができる。
👇入力する
INSERT INTO users SET name="山田", email="yamada@yn.jp", gender="女", birth="1999/11/23", age=35;
プライマリーキーの設定
現状だとこのように出ている。
このままだと、例えば、name、email、gender、birth、ageがまったく一緒の人が登録したら
どっちがどっちだかわからなくなる。
そのため、編集、コピー、削除がでいない。
まったく一緒の人でも区別をつける必要がある。
他のデータと絶対と絶対に重ならないデータが必要になる。
新しいカラムを追加する必要がある。
PRIMARYを設定する場合一度、操作タブからテーブルを空にするひつようがある。
構造タブ→カラム数を決めて→どの場所に追加するか決める。(今回は一番上)→実行ボタンをクリック
名前をid、データ型をINTにしてインデックスをPRIMARYにしてAIにチェックし設定して保存する。
AIとはオートインクルメントで自動でidをふってくれる。
自分でidをふることになると、まちがって同じidをふってしまうと登録できない。自動でふってくれるように設定しておけば防ぐことができる。
#レコードの更新(UPDATE)と削除(DELETE)
今回のように仮で作成しテストでやってる場合は
たくさんデータを登録するさい大変なので
テストデータ生成のサイトで作成する
URL:https://tm-webtools.com/Tools/TestData
レコード更新(UPDATE)書き換え
id 1 方の メールアドレス「DtAPYxn@example.co.jp」を変更する場合
UPDATE users SET email="cccc@vvvv.jp" WHERE id=1;
id 1 の メールアドレス「cccc@vvvv.jp」に変更される。
☝WHEREはどのデータを書き換えますかという意味。
削除(DELETE)
id 1 方が退会して削除する場合
DELETE FROM users WHERE id=1;
#検索(SELECT)構文と WHEREの条件
id 35の方の名前を検索したい場合
SELECT id , name FROM users WHERE id=35;
id 35の方の全部の情報を知りたい場合「*」を使う
SELECT * FROM users WHERE id=35;
年齢が35歳未満の方を検索したい場合
SELECT * FROM users WHERE age<35;
かっこの中に複数条件を入れたいとき「IN」
SELECT * FROM users WHERE age IN (10, 20, 30);
同じ苗字を検索したいとき「LIKE」
SELECT * FROM users WHERE name LIKE '磯野%'
**「%」**は例えば磯野の後に何が入っていてもよいという意味
部分一致にしたい場合
名前に「内」がはいってる人検索する場合
SELECT * FROM users WHERE name LIKE '%内%'
複数の条件を組み合わせる場合
論理演算子を使用する。
名前に「内」が入っていて、年齢が35歳以上の方を検索する場合
SELECT * FROM users WHERE name LIKE '%内%' AND age>=35;
更に複数条件をつけるとき
名前に「内」が入っていて、年齢が35歳以上の方か、女性の方の場合
( )がないとORが優先されて前の条件は無視される。
SELECT * FROM users WHERE name LIKE '%内%' AND (age>=35 OR gender="女")
####注意点
例えば、「UPDATE」と「DELETE」使い複数条件で書き換えたり、削除したりする場合、条件を間違えて実行してしまうと間違った条件で書き換えたり、削除してしまうので、必ず、「SELECT」で確認して、その後に「UPDATE」と「DELETE」をした方が安全
####sqlの演算子
演算子 | 意味 |
---|---|
= | 等しい |
!= , <> | 等しくない |
> | より大きい |
< | より小さい |
>= | 以上 |
<= | 以下 |
IN | 列挙した要素の中から探す |
NOTIN | 列挙した要素以外のもの |
BETWEEN | 範囲以内 |
LIKE | 文字列の部分一致 |
複数条件を「論理演算子」でつないで検索することもできる
演算子 | 意味 |
---|---|
NOT | 否定 |
AND | かつ |
OR | または |
#集計・並べ替え構文
先に
GROUP BY
指定したカラムを基準にしてグループを作ってその中で計算する。
ORDER BY
指定したカラムの値を対象にソートする
男性、女性の年齢の平均を調べたいとき
SELECT gender, AVG(age) FROM users GROUP BY gender;
☝年齢というカラムを基準に平均を計算する
男性、女性の人数を調べたいとき
SELECT gender, COUNT(*) FROM users GROUP BY gender;
名前をあいうえお順に並べたいときは
SELECT * FROM users ORDER BY name;
これだと、文字コード順に並んでしまう。
日本語には一つの漢字で複数の読み方がある。
「あいうえお」順に並べたいときは
「ふりがな」という」カラムを用意する。
SELECT * FROM users ORDER BY name_kana;
表示する件数を指定する場合は「LIMIT」
SELECT * FROM users LIMIT 10;