情報処理とは何から、データベースの基本的な話(情報処理試験のデータベーススペシャリスト程度の話まで)を書く、土日のシリーズ「Hello World程度のデータベース」です。
いままで、三層スキーマ構造に基づき、データベースの設計(概念スキーマ)設計したテーブルの物理構造(内部スキーマ)、それを捜査するSQL(外部スキーマ)とやってきました。
今回は、そのDBをプログラム等から操作をするのは、どういう仕組みで行うかという話、つまり「DBと外部システムとの接続」になります。
■なぜ、データベースはプログラムからも、対話型のプログラムからも入力できるのか?
データベースはJDBCからでも、対話型のプログラム(mySQLの場合、mysqlコマンド、おらくるの場合、sql*plus,isql*plus)からでも、操作できます。
なぜか?というと、これは、常時立ち上がっているデータベースのプログラム(デーモン)があるからです。
mySQLの場合、mysqld,postgreSQLの場合は、pqctlから呼び出されるpostmasterが、データベースのデーモンです。
これが、ずーっと立ち上がっています。
そして、インターネットを使って、そのデーモンが指定するポート番号に、接続して、それぞれのDBできまっている通信内容を送って、操作します。
つまり、JDBCや対話型のプログラムは、データベースのデーモンのポート番号に接続して、操作命令を出し、その結果を受け取っているということになります。
デーモン(mysqld等)は、受け取った命令(SQLなどで指定されたもの)を元にデータベース処理して結果を返します。
つまり、表題の答えは、「デーモンとソケット間通信をしているから」です。
■操作する仕組みのまとめ
まとめると、こんなかんじ
JDBC 対話型コマンド(mysql等) | | | |*ソケット間通信 | | *----------------------------------* | データベースデーモン (mysqld等)| *----------------------------------* | *----------------------------------* | データベースエンジン | *----------------------------------* | 各種テーブル
ここで使われている、インターネットにおけるソケット間通信は、WWWでも、サーブレットでも、FTPでも、メールでも使われている普通の通信技術です。
ちなみに、このポート番号は、mySQLだと、configuration Wizardで設定できて、my.iniのportにかかれています。デフォルトは3306です。
つぎは、JDBCです。