MySQL

【MySQL】SQLの基本構文と稀に使うサンプル ~重複削除・Indexなど~

#DB
written by ま。

こんにちは、ま。です!

今回は覚えてはいないけど稀に使うSQL文を私主観での備忘録のように書いていこうと思います。

前提として、MySQLでの構文で記載しております。
公式リファレンス

SQLのCASE式についての記事もありますので是非ご覧ください!
【MySQL】CASE文による条件分岐

DDL (データ定義言語)

テーブルを作成したり、テーブルの定義を変更したりするもの。

  • テーブル作成
    CREATE TABLE スキーマ名.テーブル名 (カラム名 型など, カラム名 型など,…);
  • デーブル削除
    DLOP TABLE スキーマ名.テーブル名;
  • テーブル定義変更
    ALTER TABLE スキーマ名.テーブル名 ADD カラム名 型など;

DML(データ操作言語)

データそのものを追加・編集する最も基本的なSQL。

  • 検索
    SELECT * FROM スキーマ名.テーブル名;
  • 追加
    INSERT INTO スキーマ名.テーブル名 (カラム名, カラム名,…) VALUES (値, 値,…);
  • 変更
    UPDATE スキーマ名.テーブル名 SET カラム名 = 値 WHERE 条件;
  • 削除
    DELETE FROM スキーマ名.テーブル名;

DCL(データ制御言語)

流れを意識したデータ制御を行うもの、変更の確定や戻しを意識的に行える。

  • トランザクション(一連の処理としてSQL群を定義)
    TRANSACTION
  • コミット(変更の確定)
    COMMIT
  • ロールバック(変更の削除)
    ROOLBACK
  • グラント(ユーザー権限変更)
    GRANT
  • リボーク(ユーザー権限の削除)
    REVOKE

ユーザーに付与できる権限はこちらを参照下さい。

Key以外を指定してUpdateやDeleteを行う

UpdateやDeleteをする際によく出る
Error Code: 1175. You are using safe update mode
に対応するためのもの。一意のKey(PK)を証券に指定していない際に出るエラーです。
設定値を一時的に書き換えるのでコネクションを切れば戻りますが、作業終了後は意識的に戻したほうが吉。

  • SET SQL_SAFE_UPDATES = 0;
    ※0なら許可 1なら不可

重複削除

同じinsertが2度実行されたなどで重複データが出来てしまった場合に対応するSQL。
IN句内のSelectのみ使えば消されるデータの確認ができます。

  • DELETE FROM スキーマ名.テーブル名WHERE カラム名 IN
    (SELECT カラム名 FROM
    (SELECT カラム名 FROM スキーマ名.テーブル名 GROUP BY カラム名 HAVING COUNT(カラム名) > 1 ) as 別名
    )

DateTimeの時間だけを比較

日時データを持つカラム(よくあるcrated_atやupdated_atなど)から日付関係なく時間を絞ったデータを取り出すためのもの。

  • SELECT * FROM スキーマ名.テーブル名
    WHERE TIME(カラム名) BETWEEN ’05:00:00′ AND ’07:00:00′

Indexを張る

よく使われる条件式に使われるカラムを登録することで、そのSQLの実行を高速化することができる。

  • ALTER TABLE スキーマ名.テーブル名 ADD INDEX インデックス名(カラム名,…)

最後に

私が実務でSQLを利用する中で以前書いたけど忘れたものを書いてみました。
基本構文もど忘れすることがあるのも何とかしたいですね(笑)

ただ、覚えることも大事かもしれませんが、そもそもメモを取ったりする理由って見返せばわかることだと思うので、
こういった記事はまた増やして、私もここ見て思い出せますし、見てくれている方に必要なものが見つかればいいなと思います!