| MySQL | MySQLとは? | |
| 2006/01/03 |
| MySQLとは? |
MySQLはフィンランドのMichael Wideniusさんによって1995年に開発され、 隣国スウェーデンを中心に欧米に幅広く普及しています。 現在その開発・サポートは専門の企業MySQL AB で行われており、 このサイトからソースアーカイブまたはコンパイル済みのバイナリ配布が無償でダウンロードできます。 MySQLはバージョン3.23.19からはGNU Public Licence(GPL)による配布となりました。 (現在は商用ライセンスも提供されています)
なお日本国内では、 ソフトエージェンシーが MySQLのサポートを積極的に行っており、 ここで資料やプログラムなどの各種資源を入手できます。
| MS-Windowsへのインストール |
| セットアップ |
> mysqld --default-character-set=sjisそして、次のように mysqladminコマンドを使ってサーバーの起動チェックと状態確認を行えます。
> mysqladmin ping mysqld is alive > mysqladmin status > mysqladmin extended-status停止するには次のようにします。
> mysqladmin -uroot shutdown
●WinMySQLadmin(GUI管理ツール)の使用
MS-Windows環境では、MySQLの各種設定やmysqldの起動・停止を行えるGUIツール
「WinMySQLAdmin」がとても便利です。
先述の通り起動時にスタートアップで開始しますが、終了してしまった場合に手動で再開するには、
コマンドラインで、
dos> C:\Wintools\mysql\bin\winmysqladminと打ちます。
default-character-set=sjisを追加しておくとよいです。 ただし、PHPからMySQLをコールするときはこのオプションをつけていると 「Can't Initialize Codeset 13...」 という不可解な(13というのがまた…)エラーメッセージが出るので外す必要があります。
●rootパスワードの設定
MySQLのデータベースにもOracle、Sybase、PostgreSQLなどと同じく
ユーザーという概念があります。
rootと「 」(匿名ユーザー)の2つのユーザーは最初から作られています。
このうちrootはMySQLに対するあらゆる操作を行える管理ユーザーですが、
デフォルトではパスワードがついていません。
そこでまずrootにパスワードをつけるところから始めます。
シェルから次のようにmysqlコマンドを使い、パスワードをセットします。
CMD> mysql -u root mysql
mysql> SET PASSWORD FOR root@localhost=PASSWORD('pass123');
|
CMD> mysql -u root mysql
mysql> UPDATE USER SET PASSWORD=PASSWORD('pass123')
WHERE USER = 'root';
mysql> FLUSH PRIVILEGES;
|
cmd> mysql -u rootではエラーメッセージが出てMySQLを操作できなくなってしまいます。なぜ? 当然ですね。パスワードを入力しないといけないからです。 「--password=pass123」(または-p pass123)をつけてもいいのですが、 これではデスクの後ろで誰かがこっそり覗いていたらばればれですから、普通は
dos> mysql -u root -pと-pオプションをつけます。この場合は「Password:」 というプロンプトが出るので、ここでパスワードを入力します。 後述しますが、root以外のMySQLユーザーの場合でも同様です。
●データベースの作成
「データベース」という言葉はいろいろな意味で使われるので、
混乱を招きがちです。
「あれ?MySQLがデータベースだろ?もうインストールしただろ?
新しくデータベースを作るって、どうゆうこと?」
実は、Oracle、Sybase、MySQLなどのインストールする物
(EXE)は、正確にはRDBMS(リレーショナルデータベース管理システム)、
つまり、「データベースを管理するツールやアプリケーション」
という意味なんです。で、実際にデータを入れるものが「データベース」で、
これはOracle RDBMSから命令を実行することでOracleデータベースが作られ、
MySQL RDBMSから命令を実行することでMySQLデータベースが作られ…
というイメージで捉えればよいでしょう。
OS的に見ると、1つのデータベースは1つ以上の決まった組のOSファイルで構成されます。
MySQLでは、
インストール直後に「mysql」「test」という2つのデータベースが作られていますが、
mysqlは先述のユーザーや権限に関する表が入る特別なデータベースですし、
testもまた別の意味で特別なデータベースです。
ですから、普通は必ず1つはデータベースを作ることになるでしょう。
MySQLでは、データベースは(マシン的なリソースが尽きるまで)
たくさん作ることが出来ますが、
別々のデータベースに入ったデータは相互に参照することができなくなるので、
関連のあるデータは同じデータベース上に置く必要があります。
普通は、1つのアプリケーションに関するデータを1つのデータベースに配置するようにします。
前置きが長くなってしまいましたが、MySQLでデータベースを作りましょう。
ここでは「udb」という名前のデータベースを作るものとします。
ユーザーrootでmysqladminを起動します。
CMD> mysqladmin -uroot -p create udb |
mysql> CREATE DATABASE udb; |
dos> mysqladmin -uroot -p drop udbこのコマンドは即座に問答無用で中のデータごとデータベースを消してしまうので、 操作には充分注意が必要です。
●ユーザーの作成
さて、データベースができたところでMySQLユーザーも作ります。
ユーザーを作るには、「ユーザーを作る」
という「権限」が必要ですが、最初にこの権限をもっているユーザーは
rootだけです。つまり、最初の1人目は必ずrootユーザーに作ってもらう必要があります。
dos> mysql -u root -p mysql mysql> grant all privileges on *.* to urano@localhost identified by 'urano398'; mysql> grant file on *.* to urano@localhost; Query OK, 0 rows affected(0.00 sec) mysql> exitCREATE USER(ユーザーの作成)とGRANT(権限の付与)でコマンドが分かれている OracleやPostgreSQLに慣れている場合は注意してください。 MySQLでは、上の例のようにGRANT文で新規ユーザーの作成とそのユーザーに対する権限付与を同時にやってしまいます。 「all privileges on *.*」というのは、 全てのデータベース上の全ての表を操作する権限を持つという意味で、 最初から最強に強まったボスキャラを作るようなものですから、 実用として公開するときにはこのようなことはしないでください。 例えば上で作ったデータベース「udb」に対する全操作を可能にするには「udb.*」のように限定して指定できます。 「urano@localhost」というのがユーザー名、 「urano398」というのがパスワードですが、 MySQLユーザーは常にユーザー名とホスト名のワンセットで識別される点にも注意してください。 つまり、別々のマシンから接続してくる 「urano@a.b.co.jp」と「urano@c.d.co.jp」はMySQL世界では全くの別人として扱われます。
dos> mysql -u urano -p udb Password: ******** mysql> exit Bye. dos>
●データを操作してみよう
データベースとユーザーが作れた段階で、ひとまずセットアップは完了です。
今度は実際にデータを入れていきます。
MySQLでデータを操作するための最も基本的なツールは
「mysql」です(いままでもさんざっぱら出てきましたね?)
mysqlは、OracleのSQL*Plus、PostgreSQLのpsql
のようなものだというとウダウダ言うよりあっさり理解してもらえる方も多いでしょう。
データを操作する「SQL文」を入力し、
実行結果が表示されるという文字ベースの対話インターフェースです。
まず何をするかというと、CREATE TABLE文で表を作らないといけません。
このへんは他のRDBMSと同じなので分かりやすいでしょう。
> mysql -u urano -p udb
Password: ********
mysql>CREATE TABLE ITEMS(
-> NAME VARCHAR(50),
-> PRICE INTEGER,
-> QTY INTEGER
->);
Query OK, 0 rows affected (0.06 sec)
|
データ型はVARCHAR、INTEGER、DECIMALが基本です。 NUMBER, VARCHAR2はありませんので、Oracleに慣れている方は要注意、ですね。 ちなみに主キー制約、外部参照制約、一意制約、NOT NULLやDEFAULT などもOracleなどと同じような書式で指定できます。
mysql>INSERT INTO ITEMS VALUES('メロン', 1200, 20);
Query OK, 1 rows affected (0.06 sec)
mysql>INSERT INTO ITEMS VALUES('りんご', 130, 50);
Query OK, 1 rows affected (0.06 sec)
mysql>SELECT * FROM ITEMS;
+--------+-------+------+
| name | price | qty |
+--------+-------+------+
| メロン | 1200 | 20 |
| りんご | 130 | 50 |
+--------+-------+------+
2 rows in set (0.06 sec)
> \q
|
mysql> source komando.sqlあるいはコマンドラインから
dos> mysql -u urano -p udb < komando.sqlとmysqlを起動するやいきなりSQL文を投げ付けることもできます。ちなみに、 このSQL文のファイルにはC言語式のコメント/* 〜 */を書くことができ(★1)、 1つの文(先頭から;まで)が複数行に渡る長い文の場合でも、改行時に「\」 などを書く必要はありません。
mysql> SHOW FIELDS FROM ITEMS;そしてもうひとつは、テキストファイルからデータベースにデータを流しこんだり、 逆にデータをテキストファイルに書き出す機能です。 まず、 データのファイルへの出力です。
mysql> SELECT * FROM ITEMS INTO OUTFILE 'C:/abc/out.txt'ファイル名のパス区切りはWindowsでもスラッシュを使うのに注意が必要です。 このとき書き出されるテキストの内容は、デフォルトでは
では実際に、今度はテキストファイルからのデータの読み込みで使ってみましょう。
mysql> LOAD DATA INFILE 'C:/abc/items-input.txt' INTO TABLE ITEMS
-> FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
-> LINES TERMINATED BY '\r\n';
わかる人にはわかると思いますが、この構文はOracleのロードユーティリティ
SQL*Loaderの制御ファイルの記述方法にとてもよく似ています。
ただし、入力データファイルは絶対パスで指定しないと、
ファイル名だけの指定では、「Mysqlホーム/var/DB名/ファイルのパス」とみなされてしまいます。
とりあえず、このように、 MySQLではカンマ区切りやタブ区切りのテキストファイルを使って、 データベース上のデータのインポートやエクスポートができます。 OracleのSQL*Loaderのように列の指定までできると嬉しいのですが、これだけでも利便性は充分確保できます。 これならママも一安心、よかったぬよかったぬ。(なんでやねん)
最後に、そのようなスクリプトの例を一通り載せてみます。
●テーブルを作成するスクリプト
CREATE TABLE SHITEN ( SHITEN_CODE VARCHAR(5) NOT NULL, SHITEN_NAME VARCHAR(30), ADDRESS VARCHAR(100), AREA_CODE INT(2), EMPLOYEE_NUM INT(5), CONSTRAINT SHITEN_PK PRIMARY KEY(SHITEN_CODE), CONSTRAINT SHITEN_FK1 FOREIGN KEY(AREA_CODE) REFERENCES AREA (AREA_CODE) ); |
LOAD DATA INFILE 'C:/usr/dbms/mysql/shiten.dat' INTO TABLE SHITEN FIELDS OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\r\n'; |
●ログの設定
アプリケーションの開発時に、SQL文が文法エラーになるなどの問題の解決のために、
MySQLサーバに受け付けたSQLのログを出力するよう設定することができます。
これはmysql.iniに、
log=C:/temp/mysqld.log |
| もくじ | ||
| MySQL | (C) 2002-2003 MISUMI URANO (2001/03/20 - 2006/01/03) |
|
|||
|
|