sql
Oracle
データベース一覧
テーブル一覧
SELECT * FROM USER_TABLES;
テーブルのフィールド一覧
desc <テーブル名>;
トランザクション
デフォルトで、COMMIT or するまでが、1トランザクション。
MySQL
mysql --user=root db_name < create_db.sql
データベース作成
root ユーザでログイン(パスワードはインストール時に設定)
CREATE DATABASE <データベース名>
データベース削除
root ユーザでログイン(パスワードはインストール時に設定)
DROP DATABASE <データベース名>
一般ユーザ作成
root ユーザでログイン(パスワードはインストール時に設定)
CREATE USER <ユーザ名> IDENTIFIED BY '<ユーザ名>';
データベースへのアクセスを許可する
GRANT ALL ON <データベース名>.* TO <ユーザ名>;
.* はワイルドカードか?
一般ユーザ削除
root ユーザでログイン(パスワードはインストール時に設定)
まず(?)、データベースへのアクセス許可を削除する。
REVOKE ALL ON <データベース名>.* FROM <ユーザ名>;
DROP USER <ユーザ名>
起動
mysql -u <ユーザ名> -p<パスワード> -D <データベース名> --default-character-set=sjis
データベース一覧
show databases;
制約一覧
SELECT * FROM information_schema.table_constraints;
テーブル一覧
show tables;
テーブルのフィールド一覧
desc <テーブル名>
テーブル作成情報の表示
show create table <テーブル名>
制約名もみれたりする。
トランザクション
START TRANSACTION; // これで、SET AUTOCOMMIT = 0 COMMIT or ROLLBACK; // これで、前の AUTOCOMMIT 状態に戻る。通常 AUTOCOMMIT = 1
全般
alter table
制約を追加、変更
NOT NULL制約を追加する
alter table <テーブル名> modify <フィールド名> not null
DEFAULT値「001」を追加する
alter table <テーブル名> modify <フィールド名> default '001'
NOT NULL制約を削除する
alter table <テーブル名> modify <フィールド名> null
制約を追加
プライマリキーを追加する
alter table <テーブル名> add constraint <コンストレイント名> primary key(<フィールド名>)
制約を削除
alter table <テーブル名> drop constraint <コンストレイント名>
AUTO_INCREMENT
キーでないとだめ。
create table employee {
id integer not null auto_increment,
name varchar(50),
primary key(id,name)
}
AUTO_INCREMENT は何行か削除しても、リセットせずに、続きから番号付けする。 番号が抜けることはよくある。
AUTO_INCREMENT が設定されている場合は、insert 文で省略はできるが、
insert employee values ('name','hoge@hoge.com');
ではだめで、
insert employee (name,email) values ('name','hoge@hoge.com');
のように、フィールドも指定しないといけない。
AUTO_INCREMENT せずに自分で設定することも可能。
insert employee values (1,'name','hoge@hoge.com');
この場合、この id が最大値の場合、その番号が、max_id_number にセットされ、 AUTO_INCREMENT は次の番号から始まるが、 id が最大値でない場合、特に max_id_number は代わらないので、 次に始まる番号は変わらない。
DELETE して、空きができたことが気になるなら、UPDATE で1つずつ、 上にずらしてやることもできなくはない。その後
alter table employee AUTO_INCREMENT=[max_id_number]
のように、最大値を設定しなおしてやれば、続きからはじめられる。 ただ、普通はやらない。
create table
PRIMARY KEY
主キー、複合キーを作る。
create table employee {
id integer not null auto_increment,
name varchar(50),
primary key(id,name)
}
複合キーの場合でも、各々に NULL をいれることは許されない。 複合キーの組み合わせで、UNIQUE 制約になる。
DATE
create table employee {
birthday DATE NOT NULL,
}
DATE 型には、'2009-02-02' もしくは '2009/02/02' のように指定する。 この書式はロケールによる。上は日本の場合。 存在しない日付はエラーがでる。
where
NULL 値との比較は IS NULL または IS NOT NULL。 = NULL はだめ。 = '' は意味が違う。
LIKE (ワイルドカード)
where a like 'hoge%'
%: 0文字以上の任意の文字列 _: 1文字の任意の文字列
全角文字も _ 1つ。
ORDER BY
select * from table ORDER BY name DESC;
漢字の場合、音読み順かなにかになっているよう。文字コード順かなにかだろう。
JOIN
INNER JOINで結合する場合と、WHERE句で結合する場合の違い。は、なし。 実際の処理が同じらしい。
select 文内キーワードの必須順番
select from where group by having order by
