MySQL 基本操作
本ももうすぐ出るみたいだし、そろそろ 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;
覚えてしまえば難しくないんだろうけど、やりたいことによって使うコマンドが違ったりするのでメモ。