MySQL

(作成:2005/11)

さて何の因果かMySQLを使う必要が生じた今日此頃。この先ひょっとしたら使う事になるかも知んないのよね。まぁそれも別に良いんだけどさ。
何かね、聞いた話だとMySQLはとっても高速らしいですな。ちょっと期待。

設定

rootパスワード

インストールし立てだと root にパスワードが掛かっとらんので誰でも居らっしゃーいな状態。

$ mysql -u root
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 5 to server version: 4.0.24_Debian-10sarge1-log

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> 

流石にこれはイカンのでパスワード掛けましょ。 mysqladmin コマンドで色々設定可能。

$ mysqladmin -u root password (パスワード入力)
$ mysql -u root
ERROR 1045: Access denied for user: 'root@localhost' (Using password: NO)
$ mysql -u root -p
Enter password: 
...
mysql> 

ユーザ/DB作成

まさか毎回rootでアクセスなんてしたか無いので、取り敢えず適当なユーザとDBでも作りませうか。ここでは以下のようなユーザ/DBを作成してみる。

DB ユーザ
test riyo

まずはデータベース mysql にログイン。

$ mysql -u root mysql -p
mysql> CREATE DATABASE test;
Query OK, 1 row affected (0.14 sec)

mysql> GRANT USAGE ON *.* TO riyo@localhost IDENTIFIED BY '(パスワード入力)';
Query OK, 0 rows affected (0.07 sec)

mysql> GRANT ALL ON test.* to riyo@localhost IDENTIFIED BY '(パスワード入力)';
Query OK, 0 rows affected (0.03 sec)

mysql> 

サーバ/クライアント接続

せめてローカルネットワーク内からは自由に接続したいぞと。 まずはネットワーク周りの設定をば。

#### /etc/hosts.allow

mysqld: 192.168.1.0/255.255.255.0
#### /etc/mysql/my.cnf

#bind-address = 127.0.0.1

おもむろにMySQL再起動。

# /etc/init.d/mysql restart

さてローカルネットワーク上の他のマシンから繋がるかな?

$ mysql -h oni -u riyo test -p
Enter password: 
...
mysql> 

操作

テーブル作成

これだけじゃ面白くないんでテーブル作ってみましょ。取り敢えず今開発しようと考えてるアレをナニするプログラムの為のテーブルを例にして。 名前は stock で、仕様は以下のようにしようか。

カラム名 カラム型 条件
id 整数 非NULL、インデックス番号を登録、プライマリキー
code 4桁整数 非NULL
name 文字列 非NULL
regist_date 日時 非NULL
last_date 日付
enable Boolean 非NULL、デフォルト値=false

何に使うテーブルだろうねぇ。うふ。 さてこれを作成するには以下のような構文になりますよと。

mysql> CREATE TABLE stock (id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, code SMALLINT(4) NOT NULL, name TEXT NOT NULL, regist_date DATETIME NOT NULL, last_date DATE, enable BOOL NOT NULL DEFAULT 0) TYPE = InnoDB;
Query OK, 0 rows affected (0.09 sec)

mysql> show columns from stock;
+-------------+-------------+------+-----+---------------------+----------------+
| Field       | Type        | Null | Key | Default             | Extra          |
+-------------+-------------+------+-----+---------------------+----------------+
| id          | int(11)     |      | PRI | NULL                | auto_increment |
| code        | smallint(4) |      |     | 0                   |                |
| name        | text        |      |     |                     |                |
| regist_date | datetime    |      |     | 0000-00-00 00:00:00 |                |
| last_date   | date        | YES  |     | NULL                |                |
| enable      | tinyint(1)  |      |     | 0                   |                |
+-------------+-------------+------+-----+---------------------+----------------+
6 rows in set (0.00 sec)

mysql>

こんな感じ。
因みに他にも何やかやテーブル作るなら、ファイルにSQL文を書いて読込ませる方法のが管理が楽で良い。 -- で始まる文字列はコメントとして扱われる。

-- test.sql

...

-- アレとアレをナニするテーブル
DROP TABLE stock;
CREATE TABLE stock (
    id          INT         NOT NULL    AUTO_INCREMENT  PRIMARY KEY,
    code        SMALLINT(4) NOT NULL,
    name        TEXT        NOT NULL,
    regist_date DATETIME    NOT NULL,
    last_date   DATE,
    enable      BOOL        NOT NULL    DEFAULT 0
) TYPE = InnoDB;

-- アレを溜めとくテーブル
DROP TABLE stock_price;
CREATE TABLE stock_price (
...

読込ませるにはログインしたのち以下のコマンドで。

mysql> source equity.sql;
Query OK, 0 rows affected (0.01 sec)

Query OK, 0 rows affected (0.01 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.08 sec)

mysql> show tables from equity;
+------------------+
| Tables_in_equity |
+------------------+
| stock            |
| stock_price      |
+------------------+
2 rows in set (0.01 sec)

mysql>