MySQL

【MySQL】データベースを指定してdumpファイルを生成する。

メモ。

mysqldump -u [ユーザー名] -p [データベース名] > [出力ファイルパス]

下記例。

mysqldump -u root -p hoge > /path/to/output.sql

 

【MySQL】重複しているレコードを最古のものを残しすべて削除するSQL。

調べていたら神SQLを見つけたのでメモ。

サブクエリを用いる。

delete from `[table_name]` where id not in (select min_id from (select min(t1.id) as min_id from `[table_name]` as t1 group by t1.[duplicate_col]) as t2);

table_nameに対象のテーブル名を。
duplicate_colに重複レコードが確認できるカラム名を。

これで重複していた行は古いものを1件のみ残し、すべて削除される。

神すぎる。

 

【MySQL】文字列を連結する。

めも。

例。

SELECT CONCAT_WS('-', col_1, col_2) as col_12 FROM table_name 

上記のSQLは「col_1」と「col_2」の値を「-」で連結した結果がかえってくる。
CONCAT_WS()関数は、第1引数に連結文字列を、それ以降の引数(任意)に連結対象の文字列(またはカラム)を指定する。
上記の例は、関数の出力結果に「col_12」というカラム名をつけて取得している。

 

【MySQL】VARCHARカラムでアルファベッドの大文字、小文字を区別させる方法。

めも。

カラム作成時にbinary属性を与えてやればよい。

もしくは検索時、WHERE句を下記のように記述する。

where col = binary 'aAbBcCdD';

と言った感じ。

またカラム作成後でもbinary属性は付与してあげられるが、すでにprimary key属性が与えられている場合は、それを解除してからbinaryを指定してやる必要があるので注意。

 

【MySQL】小数点以下を切り捨てる。

めも。

TRUNCATE(num, 0);

numの部分に任意の少数を渡せば切り捨てた値を返してくれる。
第2引数を1にすれば少数第1位、2にすれば少数第2位という様に切り捨て処理を行ってくれる。

尚、テーブルを空にするTRUNCATE文と同じ綴りであるが、こちらは関数なので安心して使用してOK。

 

【MySQL】カラムの存在チェックを行う。

めも。

DESCRIBE table_name col_name

上記のSQLを叩くことで、そのテーブル内に指定のカラムが存在していればカラムの情報が返り、存在しなければ空が返される。

 

【MySQL】カラムの値を置換する。

めも。

REPLACE()関数を用いる。

UPDATE table_name SET col_name = REPLACE(col_name, 'before', 'after');

上記のSQLは「table_name」テーブルの「col_name」カラムに「before」という値があれば、それを「after」に置換するという意味。
この場合WHERE句を指定していないので、すべてのレコードが対象となり置換される。

SQLだけで置換できちゃうのは便利だね。

 

【MySQL】ターミナルからホストを指定して接続する。

めも。

mysql -h [ホスト名] -u [ユーザー名] -p [DB名]

加えてsqlを流し込みたい場合は下記の通り。

mysql -h [ホスト名] -u [ユーザー名] -p [DB名] < [SQLダンプファイル]