MySQL 小数点 Decimal型の設定

MySQL

MySQL 小数点 Decimal型の設定

MySQLに小数点のデータを格納する際、Decimal型に設定した場合の設定方法です。

公式ページの説明が分かりにくかったので、書いておきます。

http://dev.mysql.com/doc/refman/5.1/ja/precision-math-decimal-changes.html

DECIMAL カラムに対する宣言構文は DECIMAL(M,D) です。

  • M は最大桁数(精度)です。それには1から65までの範囲が含まれています。(古いバージョンの MySQL では、1から254までの範囲が許容されています。)
  • D は少数点(スケール)の右側にある数字の桁数です。それは0から30までの範囲であり、M より広くてはいけません。

ということですが、つまりMは全部の桁数、Dは小数点以下の桁数です。
3088.567
という数字を入れたい場合は、

 DECIMAL(7,3)

となります。

ちなみに、phpMyAdminを利用している場合は項目「長さ/セット」にこの数字を記入します。

表示桁に足りない場合に、0を表示させたい場合は、「表示する」という項目に「UNSIGNED ZEROFILL」を入れます。

 //例:先ほどの3088.567を1万の桁から表示させたい場合
 DECIMAL(8,3) UNSIGNED ZEROFILL
 
 //結果
 03088.567
 

MySQL 何ヶ月前、何日前、何ヶ月後、何日後などを計算する

MySQL

MySQLではINTERVALキーワードを用いて柔軟な日付計算が非常に簡単にできます。
INTERVALは年月日・時分秒・四半期等が指定できます。
また、INTERVALの値は定数だけではなく列名(column name)も指定できます。

MySQL ファイルからDBをリストアする

MySQL

次のようにコマンドを打ちます。

 mysql -h ホスト名 -u ユーザー名 -pパスワード データベース名 < ファイルの場所
 //例
  mysql -h localhost -u test-user -phogehogepass mydb < /home/user/mydb.sql

mysqlモニタから打つわけではないのがミソです。

MySQL バイナリログの内容を確認する

MySQL

mysqlbinlogコマンドでバイナリログの内容を確認することができます。

mysqlbinlogコマンドの形式は下記の通りです。

 mysqlbinlog [options] LOG_FILE

mysqlbinlogの出力内容は例えば以下のようになります。

 mysqlbinlog binlog.000001
 # at 264
 #131226 12:19:15 server id 1  end_log_pos 357   Query   thread_id=3     exec_time=0     error_code=0
 SET TIMESTAMP=1388027955/*!*/;
 insert into test(a) values(1)
 /*!*/

下記のようにSQLテキストファイルに変換して保存することができます。

 mysqlbinlog mysql-bin.000001 > FILE_NAME

また、オプションで開始・終了日時や位置を指定することができます。

開始日時を指定する

 mysqlbinlog --start-datetime="2013-12-25 11:25:56" mysql-bin.000001

終了日時を指定する

 mysqlbinlog --stop-datetime="2013-12-31 11:25:56" mysql-bin.000001

データベースを指定する

 mysqlbinlog --database=DB_NAME mysql-bin.000001

参考
http://dev.mysql.com/doc/refman/5.1/ja/mysqlbinlog.html

MySQL データを外部ファイルに出力する

MySQL

MySQLで、データを抽出して外部ファイルに保存する場合、次のようなSQLを書きます。
例は、Windowsで実行していて、test_tableというtableの中身をC:\Program Files\xampp\htdocs\test\data\に、data.csvという名前でCSV出力したい場合です。

 $sql="SELECT * INTO OUTFILE 
 'C:/Program Files/xampp/htdocs/test/data/data.csv'
 FIELDS TERMINATED BY',' FROM test_table 
 ";

こうやってデータを出力したい場合、WHERE節で条件を絞り込みたい時もあるかと思います。
もちろん、上記のSQLにWHERE節を加えればよいのです。

ところで同一のフィールドで、複数の値を参照したい場合、皆さんはどんな風にコードを書いてますか?
私は、PHPで次のようにしてみました。

 //$test_arrayが指定したいidの配列だとする
 $sql_array=implode(' or id = ',$test_array);
 $sql="SELECT * INTO OUTFILE 
 'C:/Program Files/xampp/htdocs/test/data/data.csv'
 FIELDS TERMINATED BY',' FROM test_table 
 WHERE id = $sql_array";