MySQLの最新版のダウンロードページ http://www.mysql.com/downloads/mysql-3.23.htmlから, Windows版 mysql-3.23.57-win.zip をダウンロードしてくる.
解凍するとフォルダができるので, その中のSETUPをダブルクリックすると, インストーラーが起動する. すべて defaultの設定でOK. defaultの設定では, 一連のファイルはC:\mysql以下にインストールされる.
最初の再起動時に, WinMySQLadminが起動されてのウィンドウが現れるので, ユーザ名と パスワードを入力する. このパスワードはWinMySQLadminのためのユーザ名と パスワードであって, mysqlの管理者としてのユーザ名とパスワードは別途設定 しなければならない.
今入力した. ユーザ名とパスワードの情報は, C:\Windows\My.ini に書き加えられる. このファイルは, アンインストールしても削除されないので, アンインストール時には 手動で削除する必要がある.
タスクバーに信号機のようなWinMySQLadminのアイコンが現れる. WinMySQLadminは, MySQLのさまざまな設定を行うためのアプリケーションである. 右クリックすると メニューがポップアップするので, [Show me]をクリックする. タスクバーに戻すときは 右クリックで, [Hide me]である.
ちなみに, DBMSのサーバープログラム名は, mysqld-nt.exe で, 既にバックグラウンドで 起動中である. (タスクマネージャで確認してみよ. )
WinMySQLadminのウィンドウを開いた状態で, my.ini Setup タブをクリックして, [mysqld]セクションと, [mysql]セクションに, 次の1行を追加する. default-character-set=sjis WinMySQLadminを終了して, 再起動する.
cygwinの自分のホームディレクトリにある .bashrc に PATH = $PATH:C:\mysql\bin の一行を追加して, cygwinを再起動する. (もちろん, そのかわりにWindows環境変数のPATHを変更してもよい. )
cygwin (あるいは, コマンドプロンプト) を起動して, mysqlで起動する. 終了は quit.
% mysql -u rootでmysqlを起動したあと,
mysql> show databases;を実行してみましょう.
+----------+ | Database | +----------+ | mysql | | test | +----------+すでに2つのデータベースが登録されていることがわかる.
上のmysqlというデータベースは, 特別なデータベースで, 他の通常のデータベースに対するアクセスの権限を定めたりする ために, 管理用データベースである. testというデータベースは, 文字通りテスト用のデータベースで, 中身は空である.
mysqladminというコマンドを使う. 一般形は以下の通り.
% mysqladmin -u root create <データベース名>例えば, mydb というデータベースを新規に作成するには,
% mysqladmin -u root create mydbとする.
データベースができているかどうかを確認してみよう.
% mysql -u rootでmysqlを起動したあと,
mysql> show databases;を実行すると,
+----------+ | Database | +----------+ | mydb | | mysql | | test | +----------+と表示されるはずである.
mysql> use <データベース名>;で登録されているデータベースの中からこれから実行する操作の 対象となるものを選択できる. 例えば,
mysql> use mydb;とすれば, 先ほど作ったmydbが選択される. あるいは, mysql の起動時に操作対象のデータベースを 指定することもできる. 例えば,
% mysql -u root mydb;のように.
一つのデータベースは, 1つ以上の表から構成されている. データベースの中の表たちを表示するには, 以下のコマンドを用いる.
mysql> show tables;現在は, 表は一つもないはずだから,
Empty set (0.00 sec)と表示されるであろう.
新規に表を作成するためには,
mysql> create table <テーブル名> ( <属性名1> <型>, <属性名2> <型>, . . . <属性名n> <型> );とする. 例えば, 音楽CDのテーブル cdlist を作るとして, 各データが, アーティスト名 (artist_name), タイトル (title), 発売日 (date), 価格 (price) という属性をもつものとしよう. このときは,
mysql> create table cdlist ( -> artist_name char(40), -> title char(40), -> date DATE, -> price int(20) -> );とすればよい. ここで, char(40)は, 長さが高々40であるような文字列であり, int(20)は高々20桁の整数であることを表し, さらに, DATEはmysqlの内部で 定義されている「日付型」である.
もう一度
mysql> show tables;を実行してみよう. すると,
+----------------+ | Tables_in_mydb | +----------------+ | cdlist | +----------------+ 1 row in set (0.00 sec)というように, cdlistという表ができていることが分かる.
さらに, 表の定義の詳細の確認は,
mysql> describe <テーブル名>;で行う. 例えば,
mysql> describe cdlist;とすれば,
+-------------+----------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------------+----------+------+-----+---------+-------+ | artist_name | char(40) | YES | | NULL | | | title | char(40) | YES | | NULL | | | date | date | YES | | NULL | | | price | int(10) | YES | | NULL | | +-------------|----------|------+-----+---------+-------+ 4 rows in set (0.02 sec)と表示される. 今のところは, NullとかKeyなどの属性は気にしないで先に進もう.
テーブルにレコードを挿入していく方法には, 後で紹介するinsert構文を用いる方法もあるが, 一行一行データを追加していくのも面倒である. ここでは, テキストファイルから一括して複数の行を追加する方法を紹介する. まず, 適当なテキストエディタで
宇多田ヒカル traveling 2001-11-28 1100 嵐 ハダシの未来 2003-09-03 1050 福山雅治 虹 2003-08-27 1260 宇多田ヒカル FINAL DISTANCE 2001-07-25 1100 宇多田ヒカル COLORS 2003-01-29 1100 宇多田ヒカル Movin' on without you 1999-02-17 1020 宇多田ヒカル Automatic 1998-12-09 1020 宇多田ヒカル Automatic 1998-12-09 1020 宇多田ヒカル First Love 1998-12-09 1020 モーニング娘 モーニングコーヒー 1998-01-28 NULL モーニング娘 恋のダンスサイト 2000-01-26 NULL モーニング娘 恋愛レボリューション21 2000-12-13 NULL モーニング娘 LOVEマシーン 1999-09-09 NULL モーニング娘 ハッピーサマーウェディング 2000-05-17 NULL モーニング娘 抱いてHOLD ON ME 1998-09-09 NULLというような内容のファイルを作成し, 例えばdata.txtという名前で保存する. (ここから, ダウンロードしてもよい. ) 列と列の間はtabで区切る.
mysql> load data local infile "data.txt" into table cdlist;で, data.txtの内容がテーブルcdlistに読み込まれる. ただし, この load data local ... というコマンドはセキュリティ上の 理由から最新のヴァージョンでは, デフォルトでは使用できないようになっている. 一旦mysqlを終了してから,
% mysql --local-infile=1 -u root mydbのように --local-infile =1 というオプションを追加して起動してから, load data local 文を実行してみよう.
先ほどのファイルが正しく読み込まれているかどうかを確認してみよう. select構文を用いる.
mysql> select * from cdlist;を実行すれば,
+--------------+----------------------------+------------+-------+ | artist_name | title | date | price | +--------------+----------------------------+------------+-------+ | モーニング娘 | 抱いてHOLD ON ME | 1998-09-09 | 0 | | モーニング娘 | ハッピーサマーウェディング | 2000-05-17 | 0 | | モーニング娘 | LOVEマシーン | 1999-09-09 | 0 | | モーニング娘 | 恋愛レボリューション21 | 2000-12-13 | 0 | | モーニング娘 | 恋のダンスサイト | 2000-01-26 | 0 | | モーニング娘 | モーニングコーヒー | 1998-01-28 | 0 | | 宇多田ヒカル | First Love | 1998-12-09 | 1020 | | 宇多田ヒカル | Automatic | 1998-12-09 | 1020 | | 宇多田ヒカル | Automatic | 1998-12-09 | 1020 | | 宇多田ヒカル | Movin' on without you | 1999-02-17 | 1020 | | 宇多田ヒカル | COLORS | 2003-01-29 | 1100 | | 宇多田ヒカル | FINAL DISTANCE | 2001-07-25 | 1100 | | 福山雅治 | 虹 | 2003-08-27 | 1260 | | 嵐 | ハダシの未来 | 2003-09-03 | 1050 | | 宇多田ヒカル | traveling | 2001-11-28 | 1100 | +--------------+----------------------------+------------+-------+ 15 rows in set (0.00 sec)というような結果を得るであろう.
テーブルへレコードを一件挿入するには,
mysql> insert into <テーブル名> -> values(属性1の値, 属性2の値, ... , 属性nの値);という文を用いる. 例えば,
mysql> insert into cdlist -> values('Ziggy Stardust','David Bowie','1972-01-01',NULL);を実行すれば,
Query OK, 1 row affected (0.00 sec)という結果を得る.
実際に, この挿入が行なわれたことを確認してみよう.
mysql> select * from cdlist;を実行すれば, 下のような結果が得られるであろう.
+----------------+----------------------------+------------+-------+ | artist_name | title | date | price | +----------------+----------------------------+------------+-------+ | Ziggy Stardust | David Bowie | 1972-01-01 | NULL | | モーニング娘 | 抱いてHOLD ON ME | 1998-09-09 | 0 | | モーニング娘 | ハッピーサマーウェディング | 2000-05-17 | 0 | | モーニング娘 | LOVEマシーン | 1999-09-09 | 0 | | モーニング娘 | 恋愛レボリューション21 | 2000-12-13 | 0 | | モーニング娘 | 恋のダンスサイト | 2000-01-26 | 0 | | モーニング娘 | モーニングコーヒー | 1998-01-28 | 0 | | 宇多田ヒカル | First Love | 1998-12-09 | 1020 | | 宇多田ヒカル | Automatic | 1998-12-09 | 1020 | | 宇多田ヒカル | Automatic | 1998-12-09 | 1020 | | 宇多田ヒカル | Movin' on without you | 1999-02-17 | 1020 | | 宇多田ヒカル | COLORS | 2003-01-29 | 1100 | | 宇多田ヒカル | FINAL DISTANCE | 2001-07-25 | 1100 | | 福山雅治 | 虹 | 2003-08-27 | 1260 | | 嵐 | ハダシの未来 | 2003-09-03 | 1050 | | 宇多田ヒカル | traveling | 2001-11-28 | 1100 | +----------------+----------------------------+------------+-------+ 16 rows in set (0.00 sec)
mysql> delete from <テーブル名> where <条件>;を実行すれば条件を満たすレコードが<テーブル名>から削除される. 全レコードを削除したいのであれば,
mysql> delete from <テーブル名> where 1;例えば,
mysql> delete from cdlist where price=1260;とすれば福山雅治のレコードが削除される.
mysql> select * from cdlist; +----------------+----------------------------+------------+-------+ | artist_name | title | date | price | +----------------+----------------------------+------------+-------+ | Ziggy Stardust | David Bowie | 1972-01-01 | NULL | | モーニング娘 | 抱いてHOLD ON ME | 1998-09-09 | 0 | | モーニング娘 | ハッピーサマーウェディング | 2000-05-17 | 0 | | モーニング娘 | LOVEマシーン | 1999-09-09 | 0 | | モーニング娘 | 恋愛レボリューション21 | 2000-12-13 | 0 | | モーニング娘 | 恋のダンスサイト | 2000-01-26 | 0 | | モーニング娘 | モーニングコーヒー | 1998-01-28 | 0 | | 宇多田ヒカル | First Love | 1998-12-09 | 1020 | | 宇多田ヒカル | Automatic | 1998-12-09 | 1020 | | 宇多田ヒカル | Automatic | 1998-12-09 | 1020 | | 宇多田ヒカル | Movin' on without you | 1999-02-17 | 1020 | | 宇多田ヒカル | COLORS | 2003-01-29 | 1100 | | 宇多田ヒカル | FINAL DISTANCE | 2001-07-25 | 1100 | | 嵐 | ハダシの未来 | 2003-09-03 | 1050 | | 宇多田ヒカル | traveling | 2001-11-28 | 1100 | +----------------+----------------------------+------------+-------+ 15 rows in set (0.00 sec)
後になって, テーブルの定義を変更したくなるかも知れない. テーブルの定義の変更とは例えば, 属性の追加, 属性の削除, 属性名の変更, 属性の型の変更, 等である.
テーブルの変更の一般的な構文は以下の通りである.
mysql> alter table <テーブル名> <変更の操作の指定>;例えば, comment という属性を追加したいときは,
mysql> alter table cdlist add comment char(300);また、属性 price を削除したいときは,
mysql> alter table cdlist drop price;とする。
mysql> update <テーブル名> set <属性名1>=<属性1の値>, ... , <属性名k>=<属性kの値> where ...;
mysql> drop table <テーブル名>
データベースの削除するには,
mysql> drop database <データベース名>
cygwinのbash窓とかコマンドプロンプトでは, 日本語が入力できないみたいなので, 例えば
mysql> select * from cdlist where artist_name="宇多田ヒカル";みたいなSQL文を発行できない. で, 仕方ないからバッチ処理を行なう.
まず, SQL文を並べたファイルを作る. 例えば,
select * from cdlist where artist_name = "宇多田ヒカル"; select title from cdlist where artist_name = "モーニング娘" and date <= "2001-01-01";このファイルを, 例えば, test1.sql という名前で保存する.
% mysql -u root mydb < test1.sqlとすれば,
artist_name title date price 宇多田ヒカル First Love 1998-12-09 1020 宇多田ヒカル Automatic 1998-12-09 1020 宇多田ヒカル Automatic 1998-12-09 1020 宇多田ヒカル Movin' on without you 1999-02-17 1020 宇多田ヒカル COLORS 2003-01-29 1100 宇多田ヒカル FINAL DISTANCE 2001-07-25 1100 宇多田ヒカル traveling 2001-11-28 1100 title 抱いてHOLD ON ME ハッピーサマーウェディング LOVEマシーン 恋愛レボリューション21 恋のダンスサイト モーニングコーヒーというような出力を得るであろう.