MySQL データベースの作成 ver.8.0.13 for Windows10
初めてのMySQL データベースを作成する
Hi! MySQLのインストールが終わり、いよいよデータベースを作成します。データベースを作成する手順は次のようになりました!こういった作業はカッコよくLinuxでやってみたいですよね。あいにく自作PCはすべて処分してしまったのでラップトップPCで作業をしています。
目次
MySQLにログイン
MySQLのインストール時にパスワードを設定しました。IDはデフォルトの設定ではroot(管理者)となっています。パスワードについては前回MySQLをインストールしたページをご覧ください。尚、MySQLを操作する時はMySQL 8.0 Command Line Clientを使用しています。
パスワードの要求画面
ログインが完了すると「Welcome to the MySQL monitor. Commands end with ; or・・・」とコマンドの終わりには「;」もしくは「\g」を入力するようにと説明がありました。MySQLのコネクションIDは21ですよっと。
コネクションIDって何だ?どうやらkillというコマンドを使用するまでは考える必要がないようです。商品が売れまくってるウェブサイトや大人気のSNSならともかく、自宅で少人数で使っているうちは、connection idについては今の段階で気にする必要はなさそうです。
データベースの作成
では試しにデータベースをひとつ作ってみました。その前に、既に作成したデータベースが無いか確認してみました。データベースの確認コマンドは「show databases」です。くれぐれも、スクリーンショットにミスって書いたみたいにdadtabesesなんて書かないようにしましょうね(笑)
- create database 小文字の英数字;
データベースの作成コマンドはこのようになっています。
入力を終えたらEnterキーを押しましょう。
Query OK, 1row affected・・・と結果が出力されました。
では、本当にデータベースが作成されたか確認してみましょう。
はい。テキストの枠組に囲まれて結果が出力されました。
私のデータベースの名前は「example」としたのでexampleという名前のデータベースがあることがコマンドラインに示されました。
- imformation_schema
- mysql
- performance_schema
- sakila
- sys
- world
というデータベースがデフォルトで存在するようです。
初めて見ると何のことかわかりませんよね。
sakilaググってみると、サンプルデータベースらしいです。worldは世界の都市のデータが格納されているそうです。開いてみたら、わかるでしょうか。
information_schemaは要するにWindowsでいえばテンプレートみたいなデータや情報が色々入っている感じ。
performance_schemaは、その名の通り、パフォーマンスのデータを格納するスペースでしょうか?応答速度とか、日時やスペックに関する情報が入ってるのかな?Windowsでいえばタスクマネージャーのような感じでしょうか。
sysとは、文字通りシステムという意味なのは分かります。実際にsysを利用してデータベースを操作するよです。英文の解説ページにはsysとは人間が読めるようなDBAを提供するために実装された一連のオブジェクトをもつデータベーススキーマだそうです。
どうやら・・・
- information_schema
- performance_schema
- mysql
- sys
この4つはスキーマが入っているということになるようです。スキーマといえば日本語では概念や観念といった意味の言葉です。mysqlスキーマについてはググってもビッグワードのmysqlしか上位に出てこないので調べるのが無理でした。グーグルさん酷いっす・・・。
どんなデータベースを作ろう?
「example」というデータベースを作ったのはいいとして、中身はどうするか?練習用としても、ちょっとは実用的な物にしたいと思っています。MySQLでは表の中に、次のような構造が必要です。
- テーブル
テーブルとは、WindowsでいえばExcelの表みたいなものです。しかしこの表はExcelやAccessのように1枚物の罫線がびっしり書かれた表ではありません。
その前にちょっとおさらい。データベースの種類についてです。
データベースの種類
パソコン(というか、業務用PCも)で作れるデータベースは次の通りです。ここでは個人でも使えるオープンソースを中心にチラッとお勉強。
- リレーショナルデータベース・・・MySQL、Windows Access。PostgreSQL(オープンソース)。それぞれの表に識別子が付いてて、別々の表を結びつけることができる。
- オブジェクト指向データベース・・・生産工程、仕事や商品の管理。db4o(オープンソース)。
- XMLデータベース・・・スキーマが無く仕様が決まらなくても使えるデータベース。ブラック会社向きか(苦笑)テーブルが無い。Xpath XQueryという言語を使う。BaseX(オープンソース)。ツリー構造。
- 階層型データベース・・・Windowsのフォルダやワンマン組織のようなツリー構造。
- ネットワーク型データベース・・・階層型の逆でツリー構造になっていない。
ここでちょっと気になったのがXMLデータベースです。テーブル(表)が無くてもいいということは、いちいち氏名、郵便番号、電話番号、住所・・・といったテーブルを作成する必要が無いという事です。必要が無いと言ったら誤解になるかもしれませんが・・・。文書を丸ごと保存する、つまり氏名や制作年月日などの個別のデータは文書を見たらわかるでしょって感じのデータベースなんだと思います。名前を検索したらその名前が含まれている文書が結果に出てくる。個別の情報はどうでもいい「記録そのものが見たいんだ!」といった感じの。でもさ、もし歴史が変わって言語が変わったらどうやって検索すんの!と思いませんか?昔の漢字がパソコンで入力できないのと同じで、結局検索の基礎となるデータは入力しないと使えないと思いませんか?確かにテーブルに入力漏れのあるデータを引き出せないというデメリットは免れるかもしれません。ということで、XMLデータベースは個別性や個人の責任が必要無い物でその都度書き換えが必要な物、BtoBのマニュアルや連絡帳、アプリやマルチ端末フレンドリーへの応用が考えられますね。
ただこのBaseX、文書や画像に含まれている情報(何が書かれているか、何が映っているか等)を判定する技術がないと検索は難しいんじゃないかと思います。
MySQLでテーブルを作成
話はそれましたが、リレーショナルデータベースにはテーブルとスキーマが必要だということがわかりました。そういうことで、ひとつテーブルを作ってみたいと思います。今回作るテーブルは・・・どれにしましょうか。
- CREATE TABLE データベースの名前.テーブルの名前 (1行目のタイトル データ型, 2行目のタイトル データ型, ...);
ここで疑問。テーブルの名前は日本語でもいいのか?答えは日本語でも可能です。ただし、業務用では外国人が作業を行う場合があったり、現場に日本語キーボードが無かったり(涙)、トラブルで日本語モードが使えなかったりする場合があるので、プロは英語オンリーでやるのが常識のようです。
ふと疑問に思った。半角スペースは使えるのか。Windowsでは大文字小文字は区別しないということなので、労力削減のため、全部小文字で書いてます。でも英語で書くと、半角スペースは必要になる場面があるのですが。ちょっとググってみると英単語-英単語もよくないみたいですね。困ったな。私、アンダーバー「_」で単語を繋げるのは嫌いなんですよ。
名前の基本は英数字とアンダーバーを使うしかなさそうです。どうしても指定外の文字列を使いたいというときはバッククォーテーション「``」で囲むらしい。老眼になったりディスプレイやフォントによってはシングルかバックか見分けがつかなくなりそうだ(笑)とりあえず半角スペースや日本語はタブーということで。
試しに何か入力してみましょう。
氏名とデータベースデザインの問題
とりあえず、氏名がいいかな。でも氏名もデータベースで考えると厄介だよね。苗字、氏と名が別々に1個ずつある人はいいけど、中にはミドルネームだったり、ものすごく名前が長い外国人、そもそも江戸時代みたいに下の名前しか無い人もいるんだもん。もしも日本人じゃない人がお客さんにいたらどーすんの。しかも親と同じ名前の人なんて、住所も同じだからデータベース、重複するんじゃないの?じゃあ氏名は1個のカラムでいいんじゃない?なんて思うと日本人は、どこからが苗字かどこからが名前かわからない。本当に困るわコの問題。日本在住の外国人は3個入力欄が必要だよ・・・。日本人だって苗字の次に旧姓記入欄が必要な場合もあるし。アメリカ流に書くと鈴木 田中(旧姓) 花子なんてこともあり得る。
「パブロ・ディエーゴ・ホセ・フランシスコ=デ=パウラ・ホアン・ネポムセノ・マリア=デ=ロス=レメディオス・クリスピン・クリスピアノ=デ=ラ=サンティシマ・トリニダード・ルイス=イ=ピカソ」
こうなってしまうと文字数を制限することもできないよ。
また、王侯貴族だったらどうするんだよってこと。
使ってる言語が違うえば名前の検索すらできないじゃないか。しかしお客で英語で名前を表記してもらうのは、今の日本ではパスポートとクレジットカード、銀行以外で流行ってない。
元服して名前が変わったら?
本当に、名前の欄を考えるだけで解決策が思いつかない。
ちなみに損保ジャパンではLast Nameの記入欄にミドルネーム以降を入れるそうだ。
なら騎士や伯爵様は・・・どうするんだろ?高貴なご身分は書いてもらったほうが会社としては絶対いいに決まってる(笑)
ちなみにgoogleはどうしてるかというと姓と名で別れている。
でもさ、フルネームを一括入力すると全角スペース開けたりスペースを開けない日本人が現れるに決まってる!
どうしたらいいのだ。
じゃあ、次以降のお名前ということになるんじゃないだろうか?
「next_later_name」や「later_name」なんてラベルはどうだろう?
テーブルのタイトルがパーソナルインフォにしたからnameでも人物名ってわかるかな?
本当にデータベースって悩ましい。
次以降の名前を苗字とミドルネームに分解できないじゃないか!
もっと名前が多い人はどうすれば!
こうなったらフルネームを書く欄と、first nameとlast nameを記入する3つの入力欄がいるんじゃね?
ぐるぐる・・・。
日中韓以外の外国人が来訪するまでは氏名だけでいいかな・・・(弱気)。
- CREATE TABLE example.personal_info(last_name varchar(30),first_name varchar(30));
こんな感じかな。漢字ひらがなは1文字3バイトあるそうなで、6文字くらいなら入るようです。ググったら長い人で21バイトの苗字があるようなので、30バイトに設定してみました。
コピペしてエンター押しました。
これで、personal_infoというテーブルが出来ました。
ああしまった!
肝心のIDの設定を忘れてました~。
idも難しいですね。登録順に顧客番号を振って行っても退会されるとその番号が抜けちゃうじゃありませんか。
困りましたね~。
今日の作業はここまでにしたいと思います。
コメント
コメントを投稿