「MariaDB」のコマンドラインでデータベースを作る。 [MariaDB]
■「MariaDB」をコマンドで操作。
|
初め間違えてしまいました。そりゃそうですよね。丸見えですもんねぇ。
「create database if not exists phpbasic2 character set utf8 collate utf8_unicode_ci;」を分解すると、
「create database」データベースの作成。
「if not exists」作成するデータベース名が既存の物と重複しないかチェックし存在しない場合のみ作成。
「phpbasic2」データベース名。「phpbasic」を以前「phpMyAdmin」で作成したので「2」に。
「character set utf8」文字コードを「UTF-8」に。データベース毎に設定可能。
「collate utf8_unicode_ci」照合順序。データベース毎に設定可能。
「create table if not exists enquete(」 「enquete」テーブルを作成。「;」を付けないことにより「->」が出現しモード? が変り複数行で入力するようになります。
初めはこれに戸惑いましたねぇ。「;」を最後に付けることで打ち込みが終了になります。
「-> code int primary key auto_increment,」 「code」フィールドの作成。
構文:CREATE TABLE テーブル名(列名[code] 型[int] PRIMARY KEY ,列名2 型);
主キー制約を付ける事により、一意の番号が保障されなおかつNULLの値が入らなくなります。
「-> nickname varchar (20) not null,」
構文:CREATE TABLE テーブル名(列名[nickname] 型[varchar] NOT NULL ,列名2 型);
NOT NULL制約を付ける事により、NULLの値が入るのを防ぐことが出来ます。
コマンドラインで作成してみましたが「phpMyAdmin」と比べると構文を知っている必要がありますが、一画面に沢山の項目がある「phpMyAdmin」より迷いが無いと思います。
個人的には両方を使えば、知らない設定も理解が早くなる気がしました。
「phpMyAdmin」で「MariaDB」を操作する。 [MariaDB]
■「phpMyAdmin」でデータベースを作成。
|
まずはブラウザからphpMyAdminにアクセスします。「データベース」をクリックすると作成ページに移動します。
作成する「データベース名」と「照合順序」を入力し、「作成」します。
作成する「テーブル名」と「カラム数」を入力し、「実行」します。
「code」フィールドは通し番号が入ります。同じ番号は使われません。同一人物が解答を繰り返しても追加されます。
そのシステム内に一つしか無い番号と言うことで「ユニークコード」とも言われるとのこと。
「code」「nickname」「email」「goiken」これがカラム数が「4」の理由です。
フィールド名はPHPプログラムに合わせて命名しました。
「データ型」各々のフィールドに入力するデータのタイプを初めに設定します。
「INT」は整数を表します。(文字ではないので「長さ/値」には入力しない)
「VARCHAR」は文字列を表します。最大数値を設定しました。
「インデックス」は索引という意味で設定することにより検索が早くなるとのこと。個々のフィールドを検索欄として使用するか決めるのがインデックスの設定です。
「PRIMARY」1枚のテーブルの中で1つのフィールドにしか設定できないインデックスです。このとき選ばれるのは「そのテーブルを代表するフィールドである」という意味から、日本語では「主キー(プライマリーキー)」と呼ばれます。
主キーとなることができるフィールドはその中にダブりが発生せずに、常にユニークな値となる物に限ります。(つまりインデックスをPRIMARYに設定することができるということ)
氏名などは同姓同名がありえるので、主キーになることができないのはよくわかるでしょう。
「A_I」(auto increment)チェックを入れておくとレコードが追加されるたびに自動で通し番号を付けてくれます。
■「phpMyAdmin」から「SQL文」を入力してみる。
|
INSERT INTO enquete ←アンケートテーブルにレコードを追加します。
(nickname,email,goiken) ←[1],[2],[3]
VALUES
("bibo-roku","email","なななもはー") ←["1"],["2"],["3"] ↑の数値と対応します。「nickname=bibo-roku」という具合。
フィールド「code」はautoincrementなので自動で入力されるため手動では入力不要です。
「編集」をクリックすることでデータの編集もできます。
■「PHP」で「SQL文」を入力させる。(アンケート内容を自動で保存させる。)
|
プログラムで「SQL文」を使用するときは「接続」「命令」「切断」の過程を踏む必要があります。
$dsn = 'mysql:dbname=phpbasic;host=localhost';
dsn →パラメータ。データソースネーム。データベースに接続するために 必要な情報が含まれます。 指定されたデータベースへの接続を表す PDO インスタンスを生成します。
mysql: →接頭辞
dbname →データベース名を指定します。
host →データベースサーバーが存在するホスト名を指定します。
$user = 'root';
$password = 'XXXXX';
$dbh = new PDO($dsn,$user,$password);
dbh →パラメータ。データベースハンドル。MariaDBへの接続。
$dbh->query('SET NAMES utf8');
→$dbh->query('命令実行するSQL文');
データベース管理システムに対する処理要求(問い合わせ)を文字列として表したもの。
$sql = 'INSERT INTO enquete (nickname,email,goiken) VALUES("'.$nickname.'","'.$email.'","'.$goiken.'")';
$sql →ここにSQL文を記述する。
INSERT INTO →テーブルにデータを追加する。
$stmt = $dbh->prepare($sql); →SQL文で命令を出す準備。
$stmt->execute(); →その命令を出す。
$dbh = null; →データベースから切断する。
編集後、ブラウザからデータを入力してみる。スマホからも成功しました。
■「SQL文」でデータを取り出す。
|
「SELECT goiken FROM enquete WHERE code=1」を入力します。そして「実行」をクリック。
SELECT goiken →「goiken」フィールドのデータをください。
FROM enquete →「enquete」テーブルから。
WHERE code=1 →「code=1」のデータを。
上記の通り入力したのですが、書籍の通りの出力にはどうしてもなりませんでした。警告が出るのです。
「Current selection does not contain a unique column. Grid edit, checkbox, Edit, Copy and Delete features are not available.」 ネットで調べてもincrementにはチェックを入れているしちょっと解らない状態です。書籍でのPHPのバージョンなども異なりますのでその辺が原因かも知れません。
ですが下記命令は書籍通り表示できました。
「SELECT * FROM enquete WHERE 1」
SELECT * →全てのフィールドのデータをください。
FROM enquete →「enquete」デーブルから。
WHERE 1 →無条件で全部。 「1」が無条件で全部。
これで一応データの呼び出しはできましたね。
「MariaDB10.0」の設定、動作確認。 [MariaDB]
■「MariaDB」の初期設定。
|
初期設定開始のコマンドを入力し設定を開始します。
「root」ユーザのパスワードを問われますが、「空のENTERキー」を押します。
「mysql.sock」に繋げられないというエラーのようです。
「/var/lib/mysql/」に見覚えがあるぞと思ったら、インストール時にそのディレクトリが無いぞと怒られていましたね。ですが、ディレクトリは作成されていました。
しかし「mysql.sock」は見つかりませんでした。
インターネット検索をしてみると、「ソケットファイルが削除されている場合があります。この場合、MySQLサーバーを一旦シャットダウンして再起動をかけるとソケットファイルが復元されます。」とのこと。
「CentOS」を再起動させたところ、「mysql.sock」が現れました。
再度、初期設定を始めます。パスワード入力以外は全て「空ENTERキー」=「Yes」で進めます。
「Set root password?」→パスワードを作成しますか?
「New password:」→入力。
「Re-enter new password:」→再入力。
「Remove anonymous users?」→匿名のユーザーを削除しますか?
「Disallow root login remotely?」→リモートユーザのログインを禁止しますか?
「Remove test database and access to it? 」→テストデータベースを削除しますか?
「Reload privilege tables now?」
■設定ファイルの編集。
|
漢字を扱えるようにするために「utf-8」を追記するとのこと。
※それ以前に作成されたデータには反映されないみたいなので漢字を扱うなら初めに設定しておく。
また反映させるためには「MariaDB」を再起動させます。
■「MariaDB」の動作確認。
|
上記の「MariaDB」の動作確認は。下記サイト様の内容をそのまま実施させていただきました。ありがとうございました。
http://centossrv.com/mariadb.shtml
流れとしては「testデータベースへの全てのアクセス権限を持った、新規ユーザbibo-rokuを登録」※「-」ハイフンが入るユーザー名を使うときは「'」シングルクォーテーションで囲む必要があります。
「testデータベース作成」→「testデータベースに接続」→「testデータベースにテーブル作成」→「testテーブルに山田太郎登録」→「山田太郎を山田次郎に変更」→「testテーブル内データ削除」→「testテーブル削除」→「testデータベース削除」→「bibo-rokuユーザから全てのデータベースへのアクセス権限を剥奪」→「bibo-rokuの削除」→「MariaDBサーバへ反映」
テキストで扱うのは難しそうですね……。
調べてみると、「phpMyAdmin」というモノがあるそうです。
「MariaDB_10.0」のインストール。 [MariaDB]
■「RPM-GPG-KEY」インポート。
|
後者の「mysql-libs-5.1.73-3.el6_5.i686」が競合するようなのですが、なんで入っているのかな。依存関係かな。
依存関係無視で「mysql-libs-5.1.73-3.el6_5.i686」アンインストールします。
次に「RPM-GPG-KEY」をインポートします。その後、確認をしてみたのですがファイルをダウンロードしてからインポートするわけでは無いのかな?
ファイルはありませんでした。(rpm -qai gpg-pubkeyで確認はできました。)
■リポジトリのインストール。
|
現れたテキストについでに「enabled=0」を追記しました。
「vi」コマンドで保存します。
■「MariaDB」のインストール。
|
しかし以下問題があります。
「警告: RPMDB は yum 以外で変更されました。」
→yum以外のコマンドやソフトでRPMDBが変更されたことを表す。とのこと。
また、気にしなくてもよいが、この警告が出て、yumのインストールが実行されないことがある。とのこと。
yumのキャッシュをクリアする「yum clean all」コマンドで解決するとのこと。
「php56u-pdo-5.6.4-1.ius.el6.i386 は次のインストール済みと衝突しています: php-pdo < ('0', '5.6', None): php56u-pdo-5.6.4-1.ius.el6.i386」
→うーん。宜しくないのでしょうねぇ。でも他にPHP-PDOが見つからないのです。パス。
「2:postfix-2.6.6-6.el6_5.i686 は次の要求が不足ています:libmysqlclient.so.16」
→「yum provides --enablerepo=mariadb,epel,ius libmysqlclient.so.16」コマンドを実施したところ「MariaDB-compat-10.0.17-1.el6.i686」にも入っているので、今インストールしたということでこのままで良いのではないでしょうか。
「2:postfix-2.6.6-6.el6_5.i686 は次の要求が不足ています: libmysqlclient.so.16(libmysqlclient_16)」
→上と同様みたいなのでOKにします。
「2:postfix-2.6.6-6.el6_5.i686 は次の要求が不足ています: mysql-libs」
→上と同様で「MariaDB-compat-10.0.17-1.el6.i686」に入っているのでOKにします。