いまさら月次集計や年毎の集計など 集計をする際は、主にGROUP BYを多く用いる。 YEAR(), MONTH(), DAY(), DAYNAME(), EXTRACT()が便利。 WHERE で条件しぼるんじゃないらしい(ヲイ) 2010-05 2010-06 等で年月別の集計なら、 SELECT EXTRACT(YEAR_MONTH FROM `datetime`) as 'year_month' , SUM(`price`) as price FROM `hoge_table` GROUP BY EXTRACT(YEAR_MONTH FROM `datetime `); とか。(参照ペ […]
「SQL」の読み方について SQLは普通に 「エスキューエル」 と読むらしい。 http://ja.wikipedia.org/wiki/SQL 「シークェル」 と読む事もあるみたいだけど SQLの元となったデータベース言語が、IBM社が開発したRDBMSの実験実装である System R の操作言語「SEQUEL (Structured English Query Language)」であったことが由来である。 との事。 自分は勝手に 「スカル」 と読んでいて、ものすごく読みやすい読み方だと思っていたりする。 MySQLなら 「マイスカル」、PostgreSQLなら 「ポスグレスカル」 シー […]
2013-01-13追記 MySQL対応のPostfixはCentOS Plusリポジトリを使えばyumでupdate出来るみたい。こっちの方がいいね。 CentOS Plusリポジトリを有効にする # vi /etc/yum.repos.d/CentOS-Base.repo [centosplus] name=CentOS-$releasever - Plus mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=centosplus #baseurl=http://m […]
MySQLのDATETIME型へインデックスをつける場合注意が必要。 例えばこんなSQLではインデックスが使用されない。 SELECT * FROM table WHERE datetime LIKE '2009-05-17%' 検索結果は2009-05-17分全てが抽出されるが、フルスキャンがかかる。 この場合、以下のようなSQLが良い。 SELECT * FROM table WHERE date_time BETWEEN '2009-05-17' AND '2009-05-17' + INTERVAL 1 DAY 実行時間計測の例 行数:13,776行 データ:2,935KB インデック […]
接続時 my $dbh = DBI->connect('DBI:mysql:database=sandbox;host=localhost;mysql_read_default_file=/etc/mysql/my.cnf',qw/id password/,); または接続後に $dbh->{ mysql_enable_utf8 } = 1; この辺の記事http://www.geminium.com/chiba_blog/2009/02/
MySQL4.12が稼働しているサーバにMySQL5.0.67(Ttitonn)をインストールする(MySQL4.12はYUMでインストール済) my.cnf (MySQL4.12) [mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock # Default to using old password format for compatibility with mysql 3.x # clients (those using the mysqlclient10 compatibility package). old_pa […]
PERLでMySQLにデータを挿入する実験。 実験スクリプト INSERT を100万回繰り返す。 for(1..1000000){ $sql = <<"EOM"; INSERT INTO `table_name` (`col1`,`col2`,`col3`,`col4`) VALUES ('10','11','12','13'); EOM $sth = $dbh->do($sql)|| die $dbh->errstr; } 結果:途中でサーバエラー Server error! The server encountered an internal error and […]
$COUNT = $dbh->selectrow_array("SELECT COUNT(*) FROM `テーブル名` WHERE `カラム` = '条件'");
$sql = "INSERT INTO `db_01` ( data1, data2 ) VALUES ( $data1, $data2 )"; $sth = $dbh->prepare( "$sql" ); $sth->execute(); $id = $sth->{mysql_insertid}; これで$idに「自分が追加した最新のauto_increment番号」が代入される ただし下記のようにdoでは使えない。 $sql = "INSERT INTO `db_01` ( data1, data2 ) VALUES ( $data1, $data2 )"; $sth […]