今までTwitterから得た情報は全てテキストで扱っていたのですが、昨日の分析ごっこをするだけでも手間がかかって不便です。早めにデータベースを構築してSQLで扱えるようにしたいです。
なので、今日は1日かけてMySQLの基礎から学んで行こうと思います。あ、MySQLすでに自分のmacOSに入っています。
データベースの種類
キーバリュー型データベースストア:キーとバリューだけが入っている単純なもの。
SQLのルール
SQL文で大文字小文字は関係ない。
終わりは必ずセミコロンをつける;
文字と日付はシングルクォテーションで囲む。
データーベースのルール
1つのアプリに1つのデータベースを作る。
そのデータベースの中に入っているのがテーブル。
テーブルはいくつも作れる。
カラム(列)には決まったデータ型しか入れられない。
主に、数値型、文字列型、日付型がある。
データ型の種類
数値
名前 | 範囲 |
---|---|
TINYINT | -128 127 |
MALLINT | -32768 32767 |
MEDIUMINT | -8388608 8388607 |
INT | -2147483648 2147483647 |
BIGINT | -32768 32767 |
MALLINT | -9223372036854775808 9223372036854775807 |
ひとまずINTを覚えておけば間違いないかと。あと小数点がある場合はFLOATにする。
MySQL :: MySQL 5.6 リファレンスマニュアル :: 11.2 数値型
文字列型
char、varhar
CHAR 型と VARCHAR 型には、格納する最大文字数を表す長さが宣言されています。たとえば、CHAR(30) には最大 30 文字を格納できます。
TEXT、BLOB
MySQL Connector/ODBC は BLOB 値を LONGVARBINARY として、TEXT 値を LONGVARCHAR として定義します。
BLOB 値と TEXT 値は非常に長くなる可能性があるので、使用するときに次の制約が生じることがあります。
ソート時には、カラムの max_sort_length バイトだけが使用されます。max_sort_length のデフォルト値は 1024 です。サーバーの起動時または実行時に、max_sort_length の値を増やすことによって、ソートまたはグループ化に影響するバイトを増やすことができます。すべてのクライアントで max_sort_length セッション変数の値を変更できます
文字列は文字量が多い場合はTEXTを使うのが良さそう。
日付型
名前 | 範囲 |
---|---|
DATE | '0000-00-00' |
TIME | '00:00:00' |
DATETIME | '0000-00-00 00:00:00' |
TIMESTAMP | '0000-00-00 00:00:00' |
YEAR | 0000 |
かなり駆け足で詰め込んでいますので、細かい部分はあとで勉強し直します。
MySQLの設定はmy.cnfで行う
場所はここ
vim /usr/local/etc/my.cnf
my.cnfに下記を追加をする(日本語の文字化け防止)
character-set-server=utf8 default-character-set=utf8
MySQLのコマンド
箇条書きです。
- mysql.server start
- mysql_secure_installation
- mysql.server restart
- mysql.server status
- mysql.server stop
- mysql -u root -p
mysqld_safe
exit
可視化ツール
SQLiteのDB Browser for SQLiteのように可視化できるツールがないかと思ったら、ORACLEからMySQL Workbenchというのがちゃんと出ているんですね(誰か早く教えて欲しかった)。これを導入していきます。インストールは下記のURLから。
MySQL Workbench 6.3
https://www.mysql.com/jp/products/workbench/
インストールができたら起動させます。 上のメニューにある[Database]->[connect]を選んでサーバーに接続させるのですが、その前にMySQLサーバーを起動させる必要があります。mysql.server startでひさしぶりにMySQLを起動。さすがにエラーが出ますね。
$ mysql.server start ERROR! MySQL server PID file could not be found!
上記のエラーでググってみると、PIDをkillしろだとか、uninstallをして入れ直せ、とか色々な方法があるみたいですが、大した操作をしたこともないので、手軽なuninstallの方法にすることにしました。
$ brew uninstall --force mysql $ brew install mysql $ mysql.server start
これでいけると思ったのですがいけないですね。
ERROR! The server quit without updating PID file (/usr/local/var/mysql/air.pid).
再びググって見ますと権限がうまく設定できていないそうなので権限を設定します。
sudo chown -R _mysql:_mysql /usr/local/var/mysql
これでも同じエラーがでます。 うーん、同じ症状になっている人が見つからず、とりあえずMySQLのエラーを見に行くことに。
cd /usr/local/var/mysql/ sudo grep ERROR ファイルの名前.local.err
エラーの中身は
[ERROR] InnoDB: Unable to lock ./ibdata1 error: 35
の大量エラー。このエラーで再びGoogleで検索。 やはりPIDをkillする必要があるとのこと。
$ ps aux| grep mysqld
でmysql関連のPIDを探して
$ kill -9 PIDの番号
これでいけるかと思って、再び起動。それでもまだできず笑。
Google検索を見て行くと、どうやらMySQL 8.0だと前のバージョンが動いていると、エラーが起こるとの情報を発見。そんなバカな。
ひとまずMySQLのバージョンを確認。
$ mysql --version mysql Ver 8.0.11 for osx10.12 on x86_64 (Homebrew)
確かにバージョンが8.0ですね。前のバージョンが5.7らしいので、5.7をインストール、スタート&ストップを実行します。
brew install mysql@5.7 /usr/local/opt/mysql@5.7/bin/mysql.server start /usr/local/opt/mysql@5.7/bin/mysql.server stop
これで、前バージョンの完全に止まっているはず。 再び、mysql.serverを実行
$ sudo mysql.server restart ERROR! MySQL server PID file could not be found! Starting MySQL ..... SUCCESS! $ sudo mysql.server stop Shutting down MySQL .. SUCCESS!
StartもStopもうまくできますね。 ここまで来るのに長かった笑。
最初の目的であったMySQL Workbenchを起動、connectでつなげます。 Workspaceを開くことができました。 午後はMySQLを触っていきます。