cafegale(LeafCage備忘録)

LeafCage備忘録(はてなダイアリー)と統一しました。

SQLについて軽くまとめてみた

参考サイト ■MySQLの使い方 初級: MySQL初心者入門講座

ユーザ作成

一覧する(mysqlのuserテーブルから見る)

SELECT user FROM Mysql.user;

作成する

GRANT {権限(all, selectなど)} {DB名}.* TO {ユーザ名}@localhost
IDENTIFIED BY {'パスワード文字列'};

権限見る

SHOW GRANTS FOR {ユーザ名}@localhost;

{DB名}での権限を剥奪する

REVOKE SELECT ON {DB名}.* FROM {ユーザ名}@localhost;

削除する

DROP user {ユーザ名}@localhost;

データベース作成

一覧する

SHOW DATABASE;

作成する

CREATE DATABASE {DB名};

切り替える

USE {DB名};

削除する

DROP DATABASE {DB名};

テーブル作成

一覧する

SHOW TABLES;

作成する(※varcharには最大長さを設定しなければいけない)

CREATE TABLE {テーブル名}(
    {フィールド名} {データ型} [PRIMARY KEY (またはほかの属性((AUTO_INCREMENTなど)))],
    {フィールド名} {データ型},
    ...
    [PRIMARY KEY({フィールド名} [, {フィールド名}])]
);
//外部キーを設定する場合
CREATE TABLE {テーブル名}(
    {フィールド名A} {データ型}, index({フィールド名A}),

    FOREIGN key({フィールド名A}) REFERENCES {親テーブル名}[(親フィールド名)]
  [ON UPDATE {挙動}] [ON DELETE {挙動}],
    ...
);
外部キーの挙動 親テーブルに対して更新や削除を行うと
RESTRICT エラー
CASCADE 子の同じフィールドが更新・削除
SET NULL 子の同じフィールドの値がNULLになる
NO ACTION エラー(RESTRICTと同じ(MySQLでは))

変更する

ALTER TABLE {テーブル名} RENAME TO {テーブル名};

削除する

DROP TABLE {DB名};

レコード追加

一覧する

SELECT * FROM {テーブル名};

追加する

INSERT INTO {テーブル名} VALUES({値}, {値}, ...);       //フィールド順の挿入
INSERT INTO {テーブル名}({フィールド名}, {フィールド名}, ...) VALUES({値}, {値}, ...) [, ({値}, {値}, ...)];
INSERT INTO {テーブル名} SET {フィールド名} = {値} [, {フィールド名} = {値}];

変更する

UPDATE {テーブル名} SET {フィールド名}={値}, {フィールド名}={値}, ... WHERE {条件}
  • {テーブル名}の前にFROMはいらないよ気をつけて

削除する

DELETE FROM {テーブル名} [WHERE {フィールド名} = {値}]; //条件なしだと全件

フィールド追加

構成を確認する

DESC {テーブル名};

追加する

ALTER TABLE {テーブル名} ADD {フィールド名} {型名};
ALTER TABLE {テーブル名} ADD ({フィールド名} {型名}, {フィールド名} {型名}, ...);

変更する

ALTER TABLE {テーブル名} CHANGE {フィールド名} {型名};         //型変更
ALTER TABLE {テーブル名} CHANGE {旧フィールド名} {新フィールド名} {型名}; //名前変更
ALTER TABLE {テーブル名} MODIFY {フィールド名} {型名} AUTO_INCREMENT; //AUTO_INCREMENT属性の付加

削除する

ALTER TABLE {テーブル名} DROP {フィールド名};

where条件について

WHERE {フィールド名} = {値};
WHERE {フィールド名} <> {値};  //否定
WHERE {フィールド名} LIKE '_(ワイルドカード"?"任意の一文字) %(ワイルドカード"*"任意の0文字)'
WHERE {フィールド名} BETWEEN {値} AND {値};
WHERE {フィールド名} IN({値},{値},{値},...);
WHERE {フィールド名} >= {値} AND {フィールド名} <= {値};
WHERE {フィールド名} IS NULL;
WHERE {フィールド名} IS NOT NULL;
NOT IN

NOTはあとの条件を否定。INは後の条件のうちのどれか(OR)。ANYと同じだが、INだけはNOT foo IN(bar, baz)だけでなく、foo NOT IN(bar, baz)という形も認められる。
あと、INの後の()にはレコードを指定してもよい。

データのファイル入出力について

//バックアップ
$ MYSQLDUMP -u ユーザ名 -p DB名 > "パス/backup.sql"
//リストア
$ MYSQL -u ユーザ名 DB名 < "パス/backup.sql"

csv読み込み

LOAD DATA INFILE "パス"
INTO TABLE {読み込み先テーブル名}
FIELDS TERMINATED BY ","          //フィールド区切り
LINES TERMINATED BY "\r\n"        //改行コード