MySQL
メインページ > 工学 > 情報技術 > プログラミング > MySQL
MySQLとは、オープンソースのRDBMSである。世界で最も普及しているオープンソースのデータベースとして知られています[1]。
2010年にオラクルがサン・マイクロシステムズを買収すると、MySQLの所有権がオラクルに移転、これを受けオリジナルの作者がMySQLのフォークとして MariaDB をリリースしました。 MariaDB は MySQL と高い互換性を有し、とりわけMySQLクライアントは一切の変更なくMariaDBに接続可能です。
本書では、主にMySQLおよび、その互換ソフトウェアであるMariaDBについて説明します。
目次編集
- MySQL/インストール
- MySQL/基本操作 (起動方法、データベースの作成、テーブルの作成と削除など)
- MySQL/ユーザー
- MySQL/データの挿入
- MySQL/データの検索
関連リンク編集
SQL一般の仕様や文法についての解説は
にあります。
はじめに編集
MySQLの採用しているデータベース言語を「SQL」と言います。
またMySQLは、リレーショナル型データベース(「関係データベース」ともいう)と言われる、データベースの設計思想に基づいています。
MySQLは、データベース言語にSQLを採用しているデータベース・ソフトウェアのうちのひとつです。
SQLは、データベース言語として、大いに普及しています。
MySQLもSQLも、プログラミング言語ではありません。データベース言語は、プログラム言語とは異なります。
また「SQLスクリプト」という、MySQLの命令をスクリプトとしてまとめたコードを実行できる機能をもつデータベースが一部企業の商品にありますが、しかしこのデータベース系スクリプトはデータベースの記録内容などの状況によって結果が変わるため、いわゆる一般的なプログラム言語としては機能しません。
さて、データベースを使うことによって、データの保存や形式その他一切の技術的問題、例えば、データの保存や暗号化やユーザー権限などについて、考える必要がなくなります。そういった意味でデータベースは非常に有用です。
なお、MySQLはそれ自身がサーバーとしての機能を持つので、ネットワーク公開の設定をしてあればネットワーク越しにデータにアクセスする事も可能です[2]。
SQLite との違い編集
SQLiteは、サーバークライアントモデルのMySQLとは異なり、アプリケーションプログラムにライブラリーとしてリンクされ利用されます。 また、データーベースは単一のファイルです。 プログラム言語のPythonには標準でモジュール sqlite3 が提供されSQLite3をサポートしています。またPHP5以降のPHPも標準でサポートしています。 データー型に対するアプローチもMySQLとは異なり、スキーマーで定義されたフィールドの型と異なり値がINSERTされた場合、自動的に型変換します(制約をかけることはできます)。 また、MySQLの desc コマンドは、sqlite3 の .schema コマンドが相当します(desc コマンドについてはMySQL/基本操作で解説します)。
※ 下書き編集
※ 下記の節から、節「外部リンク」の直前までは下書きです。
内容が充実してきたら、専用のサブページを作成して、内容をサブページに移行してください。
バックアップ/外部出力の方法編集
MySQLはサーバーのファイルシステムにデーターベースを保管しますが、外部にデーターベースを渡したり、システムの障害などに備えるためのデーターの保全も必要です。
このため、データベースのダンプが必要です。
mysqldump を使用することで、データベースをバックアップ出力できます(出力先のディフォルトは標準出力です)。
もしMySQLにログイン中なら、いったん exit または quit コマンドで、MySQL からログアウトする必要があります。
- 形式
sudo mysqldump -u root -p 出力したい既存データベース名 > バックアップファイル名
- コマンド入力後にMySQLからパスワードを聞かれます。
MySQLのバックアップファイルはプレーンテキストなので、テキストエディタで中身を読むことができます。 その内容は、リストアをリダイレクトやファイルからのコマンド読込みで可能になるよう、コマンド形式で書かれています。
本書の周期律表のデータベースの例の場合、バックアップファイル中に
INSERT INTO `testTable` VALUES (1,'Hydrogen','H');
という、コマンドでレコードが作られましたが
ダンプ中に
MariaDB [testmysql]> insert into testTable (原子番号,元素名,元素記号) values(1, "Hydrogen", "H" ); Query OK, 1 row affected (0.486 sec)
- とあります。
- これを、コマンドそのもの記録されていると思いがちですが、コマンドが保存されるのではなく、現状のレコードがコマンドの形式で保存されるので、勘違いしないようにしましょう(トランザクションを積んだりジャーナリングが行われているわけではありません)。
データーベースファイルのありか編集
/var/lib/mysql
がディフォルトで使われましたが、ココにない場合は my.cnf
の datadir=
セクションで確認できます。
my.cnf
自体のありかは
mysql --help | grep "my.cnf"
でわかります。
外部リンク編集
脚注編集
- ^ http://db-engines.com/en/ranking
- ^ Bill Lubanovic 著『入門Python3』、斉藤康毅 監訳 ・長尾高弘 訳、株式会社オライリー・ジャパン発行、オーム社 発売、2017年2月3日 初版 第6刷、246ページ