どのSQLを使うべき?
mySQLか、SQlightか、postgreSQLかどれを使うべきなのか迷いました。mySQLはよさそうなんですが、ライセンスがGPLなのが気になります。ソース公開ルールが適応されてしまうのが怖いです。SQlightはパスワードとかの概念がなさそうなのでやめておきました。消去法からpostgreSQLにしました。
PostgreSQLのインストール
こちらのサイトからインストーラーを使ってダウンロード
windows環境で日本語のユーザー名にしているとインストールの最中に文字化けしてインストールに失敗しました。
postgresql cannot install icacls 文字化け・・・
あるあるなので、英語のユーザー名を別に作ってあります。そちらでインストールすると難なくインストールできました。
デフォルトのままOK押しまくって、パスワードだけ忘れないようにしておきます。ちなみに、インストールすると勝手にSQLがポート5432で待機状態になっています。ユーザー名はデフォルトで、postgresです。変更しておいた方がいいとは思いますがとりあえずはそのままでも使えます。
では、さっそくデータベース+スキーマ+テーブルを作ってみたいと思います。これらの関係は、データベース ∋ スキーマ ∋ テーブル という関係です。
psqlを立ち上げる
めんどくさいパスの設定はしなくても、付属のpsqlというソフト?からSQLコマンドが使えます。psqlを開いてください。
以下、パスワードのところまでエンター押しまくれば進みます。パスワードは先ほど設定したやつです。
Server [localhost]:
Database [postgres]:
Port [5432]:
Username [postgres]:
Client Encoding [SJIS]:
ユーザー postgres のパスワード:
postgres=# というプロンプトがでてきました。さて、もうSQLコマンドが使えるようになっています!と、その前に既存のデータベースを確認します。
データベース一覧
\l;
postgres、template0、template1というデータベースができていることがわかりました。postgresのデータベースがシステム系、template0はカスタマイズできないテンプレート、template1はカスタマイズできるテンプレートです。template0には接続できません。
データベースを作成する
create database データベース名;
データベースに接続する
\c データベース名;
データベース内のテーブル名の一覧(デフォルトであるglobal schema内のテーブルのみ)
\dt;
テーブルの作成方法
create table
mytable1(
col1 int,
col2 int
);
複数行になっても大丈夫です。;で終わらせると、psqlが命令の塊を認識します。
テーブルのプロパティを見る
\d テーブル名;
Schemaの一覧
select schema_name from information_schema.schemata order by schema_name;
Schemaの作成
CREATE SCHEMA スキーマ名;
スキーマ内のテーブル一覧だけが表示される
\dt スキーマ名.*;
スキーマ内にテーブルを作る
CREATE TABLE スキーマ名.テーブル名 (
列名1 serial PRIMARY KEY,
列名2 VARCHAR (100) NOT NULL
);
スキーマ内のテーブル、viewなどの一覧と詳細が表示される
\d スキーマ名.*;
データベース内のテーブルの名前を全て一覧
select schemaname, tablename, tableowner from pg_tables;
テーブルのデータ見る
SELECT * FROM テーブル名;
テーブルに行挿入
INSERT INTO テーブル名 VALUES ( 列1, 列2 );
テーブルの最終行修正
UPDATE テーブル名
SET col1 = 1, col2= 2;
テーブルに列を追加
ALTER TABLE テーブル名
ADD COLUMN 列名 data_type;
テーブルから列を削除
ALTER TABLE テーブル名
DROP COLUMN 列名;
テーブルの削除
DROP TABLE テーブル名;
最後に
postgreSQLはパソコン立ち上げた時からずっと起動しているので、どうしても停止するか、または再起動する必要がある場合には、windowsの「ここに入力して検索」というところで「サービス」と打ち込んで、postgreSQLを選択し、サービスの停止または再起動を押してください