Open18

SQL, DBMS(MySQL)ナレッジ

SoraSora

なるほど。BOOLEANの1はtrueなのね。

CREATE TABLE `m_user` (
  `is_valid` BOOLEAN NOT NULL DEFAULT 1,
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
mysql> select * from m_user where is_valid = true;
+----+-----------+------------+---------------+----------+-----------+---------------------+---------------------+----------+
| id | client_id | login_name | email         | password | acl_group | created_at          | updated_at          | is_valid |
+----+-----------+------------+---------------+----------+-----------+---------------------+---------------------+----------+
|  1 |      1011 | jujuwar    | jjj@gmail.com | admin    | user      | 2021-06-04 10:21:51 | 2021-06-04 10:21:51 |        1 |
+----+-----------+------------+---------------+----------+-----------+---------------------+---------------------+----------+
1 row in set (0.00 sec)

mysql> select * from m_user where is_valid = false;
Empty set (0.00 sec)

SoraSora

テーブル1からテーブル2にデータ移した時に参考にしたページ
ex.) m_clinet から m_zen_client を作成したい時とか

INSERT INTO tbl_name (col_name1, col_name2, ...)
   SELECT col1, col2, ... FROM other_table 
SoraSora

カラムのdefault値の設定

ALTER TABLE テーブル名 ALTER フィールド名 SET DEFAULT デフォルト値;
SoraSora

〈テーブルのプレフィックス規則〉
m_(マスタ):管理側が登録するテーブル。
t_(transaction):ユーザが投入するデータ。Tweetとかはここに入るかな

システムでログなどで大量に登録されるテーブルはh_**かl_**とかでいいかと思います。

r_**の登録、更新頻度が落札の9割程度でi_**の登録、更新頻度がそのr_**の1割~2割ぐらいと分けるときれいにわけられるかと思います。

http://sekaimon.hatenablog.com/entry/2017/06/11/113037

SoraSora

マスタテーブル:m_~
トランザクションテーブル:t_~
ワークテーブル:w_~
ビュー:v_~
インデックス:i_~
プライマリキー:k_~
マテリアライズドビュー:mv_~

https://www.gixo.jp/blog/12383/

SoraSora

なるほど。作業用の一時的なテーブルのこととかを指すんやな。
ほな分析に使うようのデータとかをテーブルにいれるなら、w_ が適切やな。

ワークテーブルは一時テーブルのことです。
どうやらローカル用語だったようで! もう少し説明すると、この処理をするために
専用のテーブルを作成するということです。データベースの一時テーブルの機能を
つかってもいいし 通常のテーブルを一時テーブルに見立てて使用するのもよしです。
ただ 具体的にどうするかは、要件しだいです。

SoraSora

GROUPBYしてグルーピングして、HAVINGでそのグループ内の抽出条件を指定できると。便利。
以下のようにできると

select * from category, AVG(price) from products GROUP BY category HAVING AVG(price) > 100
SoraSora

ストアプロシージャ:複数のsql文をあらかじめ保存しておくこと

<メリット>
ストアプロシージャすると、本来であれば流す複数のsql文を1回の命令で実行することができるので、

  • ネットワークの負荷が軽減できる。
  • 処理速度が速い(ストアプロシージャしたsql文は解析も済まされてる即実行可能な形式なので)
SoraSora

indexの断片化は以下のコマンドでわかる。
※SQL Server (Microsoft製) のやつやからMySQLとは違うかも。

declare @DB_ID int
  ,@OBJECT_ID int

set @DB_ID = DB_ID('DB名')
set @OBJECT_ID = OBJECT_ID('テーブル名')

select *
from sys.dm_db_index_physical_stats(@DB_ID, @Object_ID, null, null, 'DETAILED') as A
join sys.objects as B on A.object_id = B.object_id

https://techblog.zozo.com/entry/sqlserver-index-reorganize-vs-rebuild

SoraSora

なるほど。

  • whereはselect句の結果からfilterかけてデータ取得する
  • HavingはGroupBy句でグルーピングした結果からhavingで指定した抽出条件でデータ取得する

Where句はselect句の結果からwhere句で指定した抽出条件を実行する
Having句はGroupBy句でグルーピングした結果からHaving句で指定した抽出条件を実行する

https://dev.classmethod.jp/articles/difference-where-and-having/

SoraSora

PreparedStatementとは

PreparedStatementとはコンパイルされたSQL文。普通のSQL文より高速に実行できる。

「PreparedStatement」は「Statement」と同じくデータベースに対するSQL文を実行するために使われますが、「PreparedStatement」で使うSQLは事前にコンパイルが行われています。その為高速に実行することが出来るようになっています。

https://www.javadrive.jp/servlet/database/index10.html