技術向上

プログラミングの学び、気になるテクノロジーやビジネストレンドを発信

MySQL

UnixTimeStampのカラムから日付ごとに集計する【MySQL】

UnixTimeStampで表現されているカラムを用いて、日付ごとに集計を行うクエリ。 SELECT DATE_FORMAT(FROM_UNIXTIME(c.confirmed_at),'%Y/%m/%d') AS confirm_date, COUNT(ci.id) AS quantity FROM carts AS o JOIN cart_items AS ci ON ci.cart_id = c.id WHE…

Cloud SQL Proxyで接続する【GCP】

Cloud SQL Proxyとは Cloud SQL へ接続するにはいくつか方法があります(公式)。 その中でもCloud SQL Proxyを使った接続は、簡単にセキュアな接続ができる便利な方法です。 パブリックIP接続を構成したり、SSL/TLSを構成する手間が省けます。 プロキシサー…

MySQLのインデックス

インデックスとは何か テーブルの中身を検索するときに、任意のカラムの値で検索しやすいようにしておくための機能です。 たとえばnameというカラムを持つメンバーリストのテーブルがあるとします。 それはid順では並んでいますが、name順では並んでいません…

SQLトランザクション【Go】

Goでのトランザクションの構築方法と、トランザクションの利用ケースについて触れます。 MySQLなどのデータベースにアクセスする際、Goではdatabaseパッケージを使うことができます。 databaseパッケージを用いてトランザクションを構築するには、Txを使いま…

日付の範囲指定、月指定など - GoのSquirrelでの方法も紹介【MySQL】

日付の範囲を指定したり、7月だけといったように指定する方法を紹介します。 日付の範囲 // min ~ max WHERE <カラム名> BETWEEN min AND max // min ~ maxではない範囲 WHERE <カラム名> NOT BETWEEN min AND max 年、月、日の指定 // 年月日の指定 WHERE D…

ページング関連のクエリとUI設計【MySQL】

Limit Offsetは遅い MySQLを用いてページネーションを作成する際、はじめに遭遇するのが「Limit Offset」構文かもしれません。 MySQLに用意されている、ページングを実現するには便利な機能です。 SELECT * FROM tableA LIMIT 10 OFFSET 250 OFFSETに指定さ…

Docker-Compose【Docker】

Docker-Composeは、複数のコンテナを管理する仕組みです。 いくつかのファイルにコンテナにまつわる設定を記述することで、コンテナのコマンド実行時にその内容を基にして処理されます。この仕組みがないと、各コンテナの設定をコマンド実行の都度指定する必…

SQLのタイムゾーンを設定する【Go】

SQLの時刻がUTC時刻になってしまう問題を解決します。 sql, err := sql.Open("mysql", "user:passward@/dbname?parseTime=true&loc=Asia%2FTokyo") このようにparseTime=trueに併せてlocを指定しないと、例えソースコード側でJST時刻を指定しても、sql接続時…

最後にInsertまたはUpdateしたレコードのIDを取得する【MySQL】

InsertまたはUpdateした後に、他の関連テーブルを操作するため、処理したレコードのIDを使いたい場合があるかと思います。そんな時は、LAST_INSERT_IDを利用します。 Upsert時に、UpdateしたレコードのIDを取得したい場合は、LAST_INSERT_IDを併せて更新する…

Upsert【MySQL】

なければInsertあればUpdateする、通称Upsert命令文です。Primary Keyの他、Unique Keyも考慮するので、事前にどのカラムにKeyを設定するか検討、対処しておく必要があります。 INSERT INTO stock( book_id, status, created_at, updated_at ) VALUES( 1, 1,…

MySQL【Go】

インストール sql-Driverごとにpackageをインストールする必要があります。 $ go get -u github.com/go-sql-driver/mysql import database/sqlは、コード中で使用するものの、mysqlについてはプログラムの起動処理には使われますが、コード中では使用しない…