3134 件中 791 - 800 件を表示
« 前の 10 件 | 次の 10 件 »
そのvarchar型のカラムに入っている値が数字だけかどうかを確認する方法

TL;DR

  • なんか SELECT * FROM t1 WHERE CONCAT('',c1 * 1) != c1 であぶりだせるらしいけどなんで? と聞かれたのでその解説。
    • 俺は↑のやり方初めて聞いた。。
  • 個人的には WHERE c1 NOT RLIKE '^[0-9][0-9]*$' でいいんじゃない? と思う。

前提(?) 「数値しか入らないはずのカラムに文字列が入っていてバッチが転けてるので削除しました」
「?? カラムの型は?」
「varchar型です」
「ちょwww」 こんな状態

mysql57 8> SELECT num FROM t1;
+----------------------+
| num |
+----------------------+
| 1 |
| 2 |
| 3 |
| 4 |
| \(^o^)/オワタ |
| 0x12345 …
[さらに読む]
mysql コマンドを使ってシェルスクリプトを綺麗に書くコツ

mysql コマンドは -e で実行するSQLを指定できる。
セミコロンで区切れば複数のSQLを同時に実行することもできる。

$ mysql -e 'select 1; select 2'
+---+
| 1 |
+---+
| 1 |
+---+
+---+
| 2 |
+---+
| 2 |
+---+

-e を複数指定して、これでもいける。複数行に分けて書く時に自然。

$ mysql -e 'select 1;' \
>       -e 'select 2'

-e で指定した文字列を単に結合して実行しているようで、セミコロンをなくしてしまうと文法エラーになる。

$ mysql -e 'select 1 ' \
>       -e 'select 2'
ERROR 1064 (42000) at line 1: You have an error in your SQL syntax;
check the manual that corresponds to your MySQL server version for

[さらに読む]
mysql コマンドを使ってシェルスクリプトを綺麗に書くコツ

mysql コマンドは -e で実行するSQLを指定できる。
セミコロンで区切れば複数のSQLを同時に実行することもできる。

$ mysql -e 'select 1; select 2'
+---+
| 1 |
+---+
| 1 |
+---+
+---+
| 2 |
+---+
| 2 |
+---+

-e を複数指定して、これでもいける。複数行に分けて書く時に自然。

$ mysql -e 'select 1;' \
>       -e 'select 2'

[さらに読む]
MySQL 8.0 Descending index

MySQL8.0の機能を調べてまとめている。
Descending indexについて読んだまとめ。

dev.mysql.com

MySQL 8.0では、Descending index(DESC, 降順のindex)がサポートされるようになった。 これまではASC(昇順)のindexを逆順にスキャンすることはできたが、パフォーマンス上のペナルティがあった。 Descending indexを使うことで、降順のアクセスでも正順でスキャンすることができる。 optimizerはDESCを含むマルチカラムindexであってもコストを考慮してこれを利用してくれる。

サンプル

c1, c2カラムにasc, descの組み合わせでカラムを作った。
index名はasc, descの頭1文字をとってaかd

mysql> …
[さらに読む]
MySQL 8.0 Invisible indexes

MySQL8.0の機能を調べてまとめている。
invisible indexesについて読んだまとめ。

dev.mysql.com

MySQL 8.0からはinvisible indexesがサポートされる。

invisible indexはoptimizerに使われないindexのこと。 optimizerから見て、visible(利用可能)かinvisible(利用不可)かを選択できるようになった。 invisible indexを利用することで、indexを削除しても影響がないかを確認することが容易になる。
これは結構ありがたい機能で、行数が多かったり、更新頻度が高いテーブルではindexの削除・作成は非常にコストがかかるし、下手にindexを外すとクエリをつまらせてサービスダウンになることもある。

[さらに読む]
MySQL 8.0 Derived Table, Lateral Derived Table

MySQL8.0の機能を調べてまとめている。 Derived Table, Lateral Derived Tableについて読んだまとめ。

DERIVED TABLE

LATERAL DERIVED TABLESや8.0の新機能を説明する前に、DERIVED TABLEについて説明する

dev.mysql.com

DERIVED TABLEとはFROM句のscope内で作るテーブルのことで、例えばFROM句に書いたサブクエリのSELECT等がある。 構文としては以下で、

SELECT ... FROM (subquery) [AS] tbl_name [(col_list)] ...

JSON_TABLE()関数によってJSONカラムからderived tableを作ることもできる

SELECT * FROM JSON_TABLE(arg_list) [AS] tbl_name ...

このとき、

[さらに読む]
NOT NULL指定しないとカラムの確保するストレージサイズが1byte増える

NULLを許容するカラムをつくるとそれぞれのカラムで必要なストレージサイズが1byte増えていた。

以下はexplainでkey長を見てみた様子。 INTは4byteを確保する訳だけど、NULL (DEFAULT NULL)指定したら各カラムで1byte増えているのがわかる。

NULLABLEかの判定に1bit使っていて、丸められて1byte使っているとしたらNULLABLEなカラムがN個あるとして(N/8+1) byte余計に使うかと思ったらそれぞれのカラムで1byte増えてた。。。(idx8, idx9はその境界値が出たりしないかと思って作った)

mysql> CREATE TABLE `t7` (
    ->   `id` int NOT NULL AUTO_INCREMENT,
    ->   `c1` int DEFAULT NULL,
    ->   `c2` int DEFAULT NULL,
    ->   `c3` int DEFAULT NULL,
    ->   `c4` int DEFAULT NULL,
    ->   `c5` int DEFAULT NULL,
    ->   `c6` int DEFAULT NULL,
    ->   `c7` int DEFAULT NULL,
    ->   `c8` …
[さらに読む]
MySQL 8.0 GROUP BY関連の新機能

MySQL8.0の機能を調べてまとめている。
タイトルどおりGROUP BY ... WITH ROLLUPについてドキュメントを読んだまとめ。

GROUP BYで指定したカラム自体の全体の集約(超集約: super-aggregate)結果を返すWITH ROLLUP句で大きく2点の改良と機能追加があった.

  1. ORDER BY及びDISTINCTWITH ROLLUPと同時に指定することができるようになった
  2. GROUPING()の導入。超集約によって発生したNULLなのかもともとNULLが入っていたものかを判別可能になった

WITH ROLLUPによるsuper-aggregate

そもそもWITH ROLLUPによるsuper-aggregateがどういったものか示す

[さらに読む]
MySQL 8.0 新機能 Window Function

MySQL 8.0の新機能について調べてまとめています。 今回はWindow関数に関する章(https://dev.mysql.com/doc/refman/8.0/en/window-functions.html )を読んだまとめです。

window関数はクエリの結果から行ごとにその行に関連する計算を行う機能。
GROUP BYでは集約操作の集約するカラムの値ごとに1行の結果が返ってくるのに対し、window関数では行ごとにwindow関数による計算され結果が返る。

例えば(https://dev.mysql.com/doc/refman/8.0/en/window-functions-usage.html より)

mysql> SELECT
         year, country, product, profit,
         SUM(profit) OVER() AS …
[さらに読む]
MySQL 8.0新機能 CTE (Common Table Expression)

MySQL 8.0の新機能について調べてまとめました。
この記事は公式ドキュメントの以下のページの読んだまとめです。

dev.mysql.com

サンプルのクエリもほぼドキュメントのものですが、手元の8.0.15で実行した結果をつけている場合もあります。場合によって説明の順番を組み替えたり、補足したりしています。

CTE

CTE(Common Table Expression)とは1つのステートメントのスコープ内にできる名前付きの一時結果のこと。 この一時結果は複数回またはCTE内で …

[さらに読む]
3134 件中 791 - 800 件を表示
« 前の 10 件 | 次の 10 件 »