MySQL 基本操作
2006-02-06
本ももうすぐ出るみたいだし、そろそろ Rails を試してみようと思い、ちょっと前から少しずつ触っている。 まずは Rails のモデル部分を担当する ActiveRecord から。
ActiveRecord は MySQL などのデータベースを使う。 ということで、まずは MySQL の基本動作から覚える。 (時間が無いので、殴り書きで)
インストール
FreeBSD の場合、以下のパッケージをインストールした。
$ pkg_info | grep mysql
mysql-client-4.0.25 Multithreaded SQL database (client)
mysql-server-4.0.25 Multithreaded SQL database (server)
ruby18-mysql-2.6    Ruby module for accessing MySQL databases with a C API like
起動スクリプトを配置。 ← 不要。/usr/local/etc/rc.d/mysql-server.sh をそのまま使えばいいみたい。
$ cd /usr/local/share/mysql
$ sudo cp mysql.server /etc/rc.d
DB の初期化。
$ cd /var/db
$ mysql_install_db
$ chown -R mysql:mysql mysql
$ sudo /etc/rc.d/mysql.server start
パスワードの変更
インストールが終わったら、まずは root のパスワードを登録する。 ちなみに MySQL のユーザ管理は、OSのアカウント管理とは全く別。 パスワードの変更には mysqladmin が使える。
$ mysqladmin -u root password=new_password
履歴にパスワードが残るのが嫌なら、 SQL 文で変えることもできる。
$ mysql -u root mysql
mysql> SET PASSWORD FOR root=PASSWORD('new_password');
ユーザの管理
常に root で接続するのは危険なので、 Rails から接続するためのユーザを作成する。 MySQL 4.1 リファレンスマニュアル :: 4.4.5 MySQL への新規ユーザの追加を参考に。
$ mysql -u root mysql -p
mysql> GRANT USAGE ON *.* TO testuser@localhost;
mysql> SET PASSWORD FOR testuser=PASSWORD('new_password');
ここでは、 localhost から接続可能な testuser というユーザを作成した。 GRANT 構文でパスワードの初期かもできるみたいだけど、2回に分けたほうが分かりやすいかな。
USAGE は権限によって変わる。 SELECTしか許可しない場合は、下のような SQL を発行する。
mysql> GRANT SELECT ON *.* TO testuser@localhost;
ユーザの一覧を見る場合は、 mysql データベースの user テーブルを使う。
$ mysql -u root mysql -p
mysql> SELECT host,user,password FROM user;
ユーザを削除する場合は、 user テーブルから削除すればいい。 MySQL 4.1 リファレンスマニュアル :: 4.4.6 MySQL ユーザの削除を参考に。
$ mysql -u root mysql -p
mysql> DELETE FROM db WHERE user = 'testuser' AND host = 'localhost';
mysql> DELETE FROM user WHERE user = 'testuser' AND host = 'localhost';
mysql> FLUSH PRIVILEGES;
データベース
ユーザができたら、次はデータベースを作成する。
$ mysqladmin -u root -p create test_db;
もしくは、 SQL 文でも生成できる。
$ mysql -u root mysql -p
mysql> CREATE DATABASE test_db;
先ほど作成したユーザに、データベースに対するアクセス権限を与える。
$ mysql -u root mysql -p
mysql> GRANT ALL PRIVILEGES ON test_db.* TO testuser@localhost;
特定の権限のみを付与することもできる。
mysql> GRANT SELECT,INSERT,UPDATE,DELETE ON test_db.* TO testuser@localhost;
データベースの一覧を見るには、 mysqlshow を使う。
$ mysqlshow -u root -p
データベースを削除するには、 mysqladmin を使う。
$ mysqladmin -u root -p drop test_db;
もしくは、 SQL 文の DROP DATABASE を発行する。
$ mysql -u root mysql -p mysql> DROP DATABASE test_db;
テーブル
データベースができたら次はテーブルを作る。 ここからは Rails の migration を使ってもいいんだけど、今回はとりあえず SQL を使った方法を。
$ mysql -u testuser -p test_db
mysql> CREATE TABLE test_table (
-> id int(11) auto_increment,
-> name varchar(255),
-> PRIMARY KEY (id)
-> );
テーブルの一覧は show table で確認できる。
$ mysql -u testuser -p test_db
mysql> show tables;
+-------------------+
| Tables_in_test_db |
+-------------------+
| test_table        |
+-------------------+
テーブルの各カラムも確認できる。
mysql> describe test_table;
+-------+--------------+------+-----+---------+----------------+
| Field | Type         | Null | Key | Default | Extra          |
+-------+--------------+------+-----+---------+----------------+
| id    | int(11)      |      | PRI | NULL    | auto_increment |
| name  | varchar(255) | YES  |     | NULL    |                |
+-------+--------------+------+-----+---------+----------------+
テーブルを削除する時は DROP TABLE 。
$ mysql -u testuser -p test_db
mysql> DROP TABLE test_table;
覚えてしまえば難しくないんだろうけど、やりたいことによって使うコマンドが違ったりするのでメモ。