例)
postテーブルをcommentに名前を変える。
rename table post to comment;
羅列すると順番に処理される。
rename table one to two, three to four, five to six;
2つのデータベースが同じファイルシステム上にある場合に限りデータベース間のテーブル移動にも使用可。
rename table db1.table to db2.table;
例)
postテーブルをcommentに名前を変える。
rename table post to comment;
羅列すると順番に処理される。
rename table one to two, three to four, five to six;
2つのデータベースが同じファイルシステム上にある場合に限りデータベース間のテーブル移動にも使用可。
rename table db1.table to db2.table;
テーブルの構造を丸々コピーしたものを作成したい場合。
例)
postsテーブルと同一構造のposts2テーブルを作成したい場合。
create table posts2 like posts;
データまでコピーしたい場合。
insert into posts2 select * from posts;
テーブルごとバックアップを取っておく際などに便利。
DATE_ADD関数を用いる。
下記例。
■投稿してから30日以上経過している投稿を取得する。(時刻まで厳密に判定する場合)
select * from posts where date_add(insert_date, INTERVAL 30 DAY) <= now()
■上記と同等で、時刻は見ず日付のみで判定する場合。
select * from posts where date_add(DATE(insert_date), INTERVAL 30 DAY) <= CURDATE();
ちなみにdate_add関数はマイナスの数値も指定可能。その場合日付を遡ってくれる。
ためのめちゃくちゃ便利な関数を見つけたのでメモ。
■TIMESTAMPDIFF
フォーマット
TIMESTAMPDIFF(unit,datetime_expr1,datetime_expr2)
日付または日付時刻式 datetime_expr1 および datetime_expr2 間の整数の差を戻す。結果のユニットは、unit 引数によって提示される。
unit に指定出来る引数は下記の通り。
FRAC_SECOND 、SECOND 、MINUTE 、HOUR 、DAY 、WEEK 、MONTH 、QUARTER 、YEAR
※上記引数には「SQL_TSI_」のプレフィックスを付加することも可能。
例)SQL_TSI_SECOND(SECONDと同等)
下記SQLの例。この場合二つの日付の差が秒数で返却される。
select timestampdiff(SQL_TSI_SECOND, insert_date, update_date) from posts;
これめちゃくちゃ便利ですわ。
これはMysqlのバージョンとMysqldumpのバージョンが合っていないと起こる場合がある模様。
Mysql5.6を用いている場合はMysqldumpも5.6を利用してやらなければならないので、下記のようにバージョン5.6のバイナリを指定してやらなければならない。
/usr/bin/mysqldump-5.6 [コマンド]
標準で最新バージョンのパス通しておいてくれよ…。
GROUP_CONCAT()関数を用いると、すべての行を文字列連結させることが出来る。
下記例。
select group_concat(name SEPARATOR ',') from users where 1=1;
的な感じ。
SEPARATORキーワードの後に指定した文字列で全ての行を連結してくれる。
これはマジでクッソ便利。
めも。
mysql> source file_name.txt
sourceコマンドの後にファイル名を指定すればOK。
もし文字化けしたら実行前に「set names utf8」などを実行してから再度読みこむと幸せになれる。
指定した文字コードでSQLを発行したい時とか。
SQL流す前に下記のSQLを流す。
set names utf8;
※utf8の部分は任意の文字コード。
これでOK。(なはず。)