at posts/single.html

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;

覚えてしまえば難しくないんだろうけど、やりたいことによって使うコマンドが違ったりするのでメモ。

関連する日記