|
mysql
|
管理人さんのブログ 2012-02-10 16:44:28
|
パッケージのインストール
# yum install mysql
# yum install mysql-server
# yum install php-mysql
php-mysqlインストール後は、httpdをrestartさせないといけません。
MySQL起動
# /etc/init.d/mysqld start
一番最初はデータベースを初期化してくれます。
root(MySQL)のパスワード設定
# mysqladmin -u root password abcdefg
ログイン
# mysql -u root -p
MySQLのユーザをパスワード付きで作成
mysql> use mysql;
sampleデータベースに対して、sampleユーザのみALL権限を与える。
mysql> GRANT ALL ON sample.* TO sample@localhost IDENTIFIED BY "pass";
確認はSELECT。
mysql> SELECT host, user, password FROM user;
ユーザ削除はDELETE。
mysql> DELETE FROM user WHERE User='sample';
mysql> FLUSH PRIVILEGES; <直接DBを操作する場合、これで反映させます。
各種コマンド確認
mysql> \h
例えば、システム情報(バージョン確認とか)は
mysql> \s
(# mysql -v -u root -p でもいいですが…)
パスワード変更
mysql> SET PASSWORD FOR root=PASSWORD('hogehoge');
データベース作成
mysql> CREATE DATABASE db_name;
文字コード指定(UTF-8)は↓
mysql> CREATE DATABASE db_name character set utf8;
UTF-8を指定:utf8
Shift JIS を指定:sjis
EUC JP を指定:ujis
データベース削除
mysql> DROP DATABASE db_name;
データベース一覧表示
mysql> SHOW DATABASES;
データベース移動
mysql> USE db_name;
テーブル一覧表示
mysql> SHOW TABLES;
テーブル内カラム一覧表示
mysql> SHOW COLUMNS FROM table_name;
ログアウト
mysql> \q
バックアップ
# mysqldump -u root -p'password' db_name > dump.bak
文字コードは、基本的にUTF-8として変換します。
そのままの文字コードにてバックアップしたい場合は、
# mysqldump --default-character-set=binary -u root -p'password' db_name > dump.bak
バックアップ戻し
# mysql -u root -p db_name < dump.bak
文字コード調べ
mysql> use your_db
mysql> show variables like 'character_set%';
|
|
postgres
|
管理人さんのブログ 2010-03-03 09:57:03
|
postgresユーザになる
root@ubuntu-atsu01:~# id
uid=0(root) gid=0(root) groups=0(root)
root@ubuntu-atsu01:~# su - postgres
psqlでデータベースをいじれます
postgres@ubuntu-atsu01:~$ psql -l
List of databases
Name | Owner | Encoding
------------+----------+------
DBユーザ登録
postgres@ubuntu-atsu01:~$ createuser -P test
ここでパスワード設定。
Shall the new role be a superuser? (y/n) n
Shall the new role be allowed to create databases? (y/n) y
Shall the new role be allowed to create more new roles? (y/n) y
CREATE ROLE
確認は
$ psql
# select usename from pg_user;
DBユーザ削除
postgres@ubuntu-atsu01:~$ dropuser test
DROP ROLE
DB生成
createdb -O オーナー名 -E UTF-8 dbname
DBに入る
psql DB名
テーブル一覧表示
# select * from pg_tables;
# \d ←コレが楽
DB削除
dropdb dbname
↓こんなエラーが出てdropdb出来ない時は、
dropdb: database removal failed: ERROR: database "dbname" is being accessed by other users
データベースへの接続が残っている為。
再起動
# /etc/init.d/postgres restart
すれば、dropdb出来る様になります。
DBオーナー変更
まずはtemplate1データベースに入ります。
psql template1
次に、ユーザIDを探し出します。
SELECT * from pg_user;
ここの『usesysid』を使って、UPDATEにてIDを書き換えれば変更終了。
UPDATE pg_database SET datdba = ID番号 WHERE datname = データベース名;
ユーザ毎のアクセス制御
/var/lib/pgsql/data/pg_hba.conf の一番下。
host all all 127.0.0.1/32 password
環境に応じて変えてやって、リスタート。
# /etc/init.d/postgresql restart
※上の行から順番に判定するので、同じ様な制御はキチンと無効化する事(コメントアウトする)。
DBのバックアップと取り込み
pg_dump dbname > backupdata
で、取り込む所に移動して
psql -d dbname < backupdata
オーナーを合わせて入れてあげる。また、テーブルのオーナーの違いでアクセスできない時はGRANTでアクセス許可してあげる。
例)オーナーを合わせた後、以下の様にすればうまくいきます。
pg_dump -U ユーザ名 -F p -D -v -i -f バックアップファイル名 データベース名
psql -U ユーザ名 -d データベース名 -f バックアップファイル名
SERIAL値と取り出し
テーブルを作ります
# CREATE TABLE test_tbl ( id SERIAL PRIMARY KEY, name text);
NOTICE: CREATE TABLE will create implicit sequence "test_tbl_id_seq" for serial column "test_tbl.id"
NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "test_tbl_pkey" for table "test_tbl"
CREATE TABLE
出来たテーブルを見る
# \d
List of relations
Schema | Name | Type | Owner
--------+--------------------------+----------+------ public | test_tbl | table | postgres
public | test_tbl_id_seq | sequence | postgres
(15 rows)
SERIAL値はINSERT等でセッションが確立された後のでないと見れない様になっている(自分がINSERTしたSERIAL値を得る事が出来る)
# SELECT CURRVAL('test_tbl_id_seq');
ERROR: currval of sequence "test_tbl_id_seq" is not yet defined in this session
実際にデータを入れてみる
# INSERT INTO test_tbl(name) VALUES('atsu');
INSERT 0 1
# INSERT INTO test_tbl(name) VALUES('hoge');
INSERT 0 1
# SELECT * FROM test_tbl;
id | name
----+-- 1 | atsu
2 | hoge
(2 rows)
入れたデータのSERIAL値を得る事ができます
# SELECT CURRVAL('test_tbl_id_seq');
currval
----- 2
(1 row)
SERIAL値を自分で設定するには
# SELECT SETVAL('test_tbl_id_seq', 10);
setval
---- 10
(1 row)
TIMESTAMP
小数点の付かないタイムスタンプ
CREATE TABLE test_tbl (
……
……
write_time TIMESTAMP(0)
);
1日前表示
postgres=# select now() + INTERVAL '-1 day';
?column?
--------------------------- 2008-02-20 20:14:47.475886+09
(1 row)
高速化
EXPLAINを付けてSELECTする。
-> Seq Scan on... と書かれていたら全検索。
Index Scan using... と書かれていたらインデックスが使われている。
cost=0.00..xxx.xx部分が検索時間(少ない程良い)。
インデックスを作るのは
CREATE INDEX index_name ON table_name (fieldname1, fieldname2);
|
|
SQL
|
管理人さんのブログ 2010-03-03 08:22:22
|
テーブル作成
CREATE TABLE テーブル名 (列名 データ型 ,.......);
テーブル削除
DROP TABLE テーブル名;
データの入力
INSERT INTO テーブル名 (列名 , 列名 ,.......) VALUES(データ , データ ,.......);
データの変更
UPDATE テーブル名 SET 列名 = データ, 列名 = データ ,.... ;
データの削除(テーブルは残して、中身のみ削除)
DELETE FROM テーブル名;
列の追加
ALTER TABLE テーブル名 ADD 列名 データ型;
列を削除
ALTER TABLE テーブル名 DROP 列名;
列の同じ要素をまとめて、数を数える
SELECT 列名 ,COUNT(列名) FROM テーブル名 GROUP BY 列名;
テーブルのオーナー変更
ALTER TABLE テーブル名 OWNER TO オーナー名;
|
|
|