トップページdb
1001コメント349KB

【この先一体】MySQL 総合 Part15【どうなるの】

レス数が1000を超えています。これ以上書き込みはできません。
0001NAME IS NULL2009/04/21(火) 14:21:05ID:???
オラクル社製(予定)RDBMS、MySQL の総合スレです。
MySQL 総合 Part15 http://pc11.2ch.net/test/read.cgi/db/1227475230/
[関連スレと過去ログ]
http://find.2ch.net/index.php?STR=MySQL
http://makimo.to/cgi-bin/search/search.cgi?D=db&q=MySQL&sf=0&link2ch=on

[MySQL Developer Zone] http://dev.mysql.com/
[MySQL 日本語リファレンスマニュアル] http://dev.mysql.com/doc/refman/5.1/ja/index.html
[MySQL Internals Manual] http://dev.mysql.com/doc/internals/en/

[MyNA] http://www.mysql.gr.jp/
[MLja] http://lists.mysql.com/mysql-ja

ここで質問をする前に、MyNAでのFAQを最初に確認しましょう。
http://www.mysql.gr.jp/frame/modules/bwiki/?FAQ
MyNAでの「心得の条」
http://www.mysql.gr.jp/frame/modules/bwiki/index.php?%BB%A8%B3%D8%2F%BF%B4%C6%C0

・関連ツール及びユーティリティ
・関連書籍
>>2
0002NAME IS NULL2009/04/21(火) 14:21:36ID:???
【関連ツール及びユーティリティ】

[phpMyAdmin] http://www.phpmyadmin.net/
[phpMyBackupPro] http://www.phpmybackuppro.net/
[MySQLCC] http://www.mysql.com/products/mysqlcc/
[MySQL-Front] http://www.mysqlfront.de/
[mytop] http://jeremy.zawodny.com/mysql/mytop/
[Common SQL Environment] http://www.hi-ho.ne.jp/tsumiki/cse_1.html

MySQL ABでの各種GUIツールはMySQL GUI Toolsとして統合されています
(WorkbenchはGUI Toolsから独立しました。)
http://dev.mysql.com/downloads/gui-tools/5.0.html
・MySQL Administrator
・MySQL Query Browser
・MySQL Migration Toolkit

http://dev.mysql.com/downloads/gui-tools/5.0.html#Workbench
・MySQL Workbench

【関連書籍】

[MySQL Books]
http://dev.mysql.com/books/
http://www.amazon.co.jp/exec/obidos/search-handle-url/ix=books-jp&fqp=keywords%01MySQL
http://www.amazon.co.jp/exec/obidos/search-handle-url/ix=books-us&fqp=keywords%01MySQL
0003NAME IS NULL2009/04/21(火) 14:22:11ID:???
パート16じゃぼけえ!


mysqlの歴史は15で終わりじゃ・・・。
0004NAME IS NULL2009/04/21(火) 16:04:44ID:TwIH4wEs
>>1


mySQLがOracleになっちゃった。泣

★ネガティブな考え方
もうmySQLはOracleの体験版とか実験版みたいな位置づけなのか。
しかもそのうち有料になるかも。

★ポジティブな考え方
これでアホ企業のOracle絶対主義のバカ共もmySQLを見直すかも。
0005NAME IS NULL2009/04/21(火) 16:11:29ID:???
これで完全にポストグレは終わった
0006NAME IS NULL2009/04/21(火) 17:03:26ID:???
逆だろ。
これでMysqlは終わった。
もっとも今の性能で良いのなら良いんだろうけど
RDBはBDBM系程枯れていないからな。
開発リソースをじょじょに減らしていかれて、
終には挽回不能な差を付けるようにコントロールするのがOracleの戦術になるだろ。
0007NAME IS NULL2009/04/21(火) 17:12:04ID:???
オラクルのサン買収後の戦略を発表
ほとんどのフリー製品を有料化。
2009/04/21

サンを買収したオラクルは、買収後のサンのソフトウェア製品についての基本戦略を発表した。
これはSun が持つソフトウェア製品をオラクルデータベース製品体系に
組み込み、相乗効果による収益の拡大を狙うというものだ。
Java, Solaris はそれぞれ、OracleScript、OracleOS と名称を変更し、
今後オラクルデータベースに最適化、統合化されていく。
OpenSolaris は OracleOSLite として有料化する。
MySQL に関しては、OracleLite として有料化し、今後は、Oracle との下位互換性のための
更新のみを一年程度続けた後、開発を収束させる。
OracleLite 購入ユーザには、Oralce へのアップグレードを用意する。
これら有料化する製品に関しては、2009年7月までの猶予期間が設けられる。
現在のユーザは使用の停止か、製品版の購入のどちらかを選択することになる。
フリー版の使用は、商用私用を問わず、禁止されることになる。
「これらの戦略により、サンの収益体質を改善し、オラクルの製品体系を強化する。
 システムソフトウェアやデーターベースの無償提供は、ビジネスとして成立しないことが
 サンの失敗により証明された。しかしながら、サンの持つこれらの製品群は、
 ユーザにとって非常に有用なものであり多くの支持を集めている。
 我々は健全な販売戦略によってこれらの製品を市場に提供しつづけることにより、
 市場のニーズにより完全に応えていけるものと信じている。」
とオラクルのスポークスマンは昨晩夢をみた。
0008NAME IS NULL2009/04/21(火) 17:39:23ID:4/3o227t
前スレ>>971
>なんだかマシンが重くなるし
起動時は重いけどね(mallocとemの起動。特に後者)
#emは起動後手動でもいいんじゃない?

>GUIはよくわからんし
emだったら、前提知識無いと使えないと思う
admin以外は、SQLDeveloper でいいんじゃない?
0009NAME IS NULL2009/04/21(火) 17:41:38ID:4/3o227t
項目が多いから、試行錯誤だと 大変かなという意味で・・・
0010NAME IS NULL2009/04/21(火) 22:27:48ID:???
つーことはMYSQLが有料化されたら
MMORPGとか無料で提供していくのはきついのですね
0011NAME IS NULL2009/04/21(火) 23:15:07ID:???
ポスグレベンダーが儲かる
0012NAME IS NULL2009/04/21(火) 23:25:03ID:508JdpKb
さあ、Oracle Liteであなたもデータベースをはじめましょう!







みたいな
0013NAME IS NULL2009/04/21(火) 23:34:45ID:???
当たり前だが、MySQLはOracle有利な開発になるだろーね
それもMySQL自体は今のシェアを維持する形のね
生かさず殺さずって言った感じ?
0014NAME IS NULL2009/04/22(水) 00:35:05ID:???
MySQLとJavaが無料?
ネット系企業は改修の嵐ですかね?
>7 みたいな未来がくる??
0015NAME IS NULL2009/04/22(水) 02:37:19ID:???
MySQLとJavaはオープンソースだし、DrizzleやIcedTeaあるし、全然平気。
0016NAME IS NULL2009/04/22(水) 04:13:57ID:???
なんかどさくに紛れて(?)version5.4なるのが出てる(betaだけど)。
0017NAME IS NULL2009/04/22(水) 04:44:06ID:???
実際MySQLが使えなくなってPostgresに移行するとして、運用などで
困る事って具体的にどんな事があるのでしょうか?
(SQLの互換性に関してはとりあえず無視で。元々標準SQLからほど遠い
ところで好き勝手やっていたのはMySQLの方ですし)
0018NAME IS NULL2009/04/22(水) 05:06:31ID:???
この合併でデータベースの完全独占状態になるわけだけど独禁法は適用されないんですか?
0019NAME IS NULL2009/04/22(水) 06:01:19ID:wKTBWyJq
MSのWindows支配にくらべればまだまし。
0020NAME IS NULL2009/04/22(水) 07:22:18ID:bDgJ3bNf
AdobeのCS支配にくらべればまだまし
0021NAME IS NULL2009/04/22(水) 08:26:48ID:???
>>17
MyISAMべったりなアプリは移植に苦労するかも。
あとはMySQLのレプリケーションと同じことを他の製品でやろうとすると結構大変。
0022NAME IS NULL2009/04/22(水) 10:52:52ID:???
Oracleがうるさい競合製品のMySQLを生かし続ける理由はない
ttp://www.itmedia.co.jp/news/articles/0904/21/news072.html

MySQLはSunの下にいたときのように今後もフリーであり続けるかどうかはわからない
ttp://journal.mycom.co.jp/news/2009/04/21/052/

昔からOracleは嫌いだったが、これで益々嫌いになりそうだぜ
ふぅ・・・
0023NAME IS NULL2009/04/22(水) 13:32:21ID:???
>>21
MySQLのPostgreSQLに対する大きなアドバンテージはレプリケーションだけ
だからねぇ。

PostgreSQLにもpgpool等いろいろな実装は出てきてはいるけど、決定版がない。

しっかし、今回の件で、海外ではMySQLからの代替がないという感じで混乱して
いるのを見て、PostgreSQLやFirebirdの扱いの軽さには驚いた。
0024NAME IS NULL2009/04/22(水) 14:26:28ID:1zCLPW15
>>23
過去、いろんなところで書かれていた
・海外では Oracle VS. MySQL であること
・Postgres は日本以外では、あまり使われていない
を実感って感じでしょうか?

レプリケーションも大きいんだろうけど
myisam で相度を稼ぐことができないこと
MySQLの手抜きなSQLのコンバージョンの工数がでかそうなこと
MySQLのみ対象としたプロダクトが多いこと(それ以外しらねーよ みたいな)
も影響があるのかな と
0025NAME IS NULL2009/04/22(水) 16:49:29ID:???
オープンソースMySQLプロジェクトで役目を果たす用意がある」---Sunを離れた“MySQLの父”がOracleに提案
http://itpro.nikkeibp.co.jp/article/NEWS/20090422/328907/
0026NAME IS NULL2009/04/22(水) 17:13:25ID:???
OracleのSun買収で、MySQLの運命は?
ttp://www.itmedia.co.jp/news/articles/0904/22/news060.html
0027NAME IS NULL2009/04/22(水) 17:21:42ID:???
正直、MyISAMで済むのならSQLiteでもつかっていろって感じもするけど、
SQLiteのようなライブラリによるファイル操作ではなく、マネージメント
システムが動いてそこで排他処理をしてくれるというのが重要なんだろうなぁ。

とはいえ、LDAPやらなんやらのバックエンドにMySQLってわけがわからんし、
他のアプリでもとりあえずMySQL使っとけというのが多すぎ。

これを機に、なんでもかんでもMySQLという流れが変わってほしいもんだ。
0028NAME IS NULL2009/04/22(水) 20:29:19ID:???
何でもバークレイDB
0029NAME IS NULL2009/04/22(水) 23:25:54ID:???
>>23-24
なんで海外でPostgreSQLがあまり使われてないのかが分からないな−。
ほとんどの用途なら、MySQLでもPostgreSQLでも機能も性能も大差ないっしょ。

ただ単にPostgreSQLという選択肢があると言うことが
広く知られてないだけなんじゃないだろうか。

PostgreSQLのメイン開発者って確かカナダと日本だから、
欧米でアピールする機会が極端に少なかったのかもしれない。
0030NAME IS NULL2009/04/22(水) 23:58:09ID:???
>>29
大昔のPostgreSQLの性能の低さも影響しているのも知れない。
そして、ある程度差がつくとサポートベンダの有無が効いてきて、
海外での圧倒的な差になったんじゃないかな。

日本ではSRAがあったけど、海外でPostgreSQLの商用サポート
受けようと思ったら…
0031NAME IS NULL2009/04/23(木) 11:39:24ID:???
MySQLってソースフォージで開発されてる?
その場合、デュアルライセンスはどう処理されてるの?
ソースフォージってデュアルライセンスって選べるの?
0032NAME IS NULL2009/04/23(木) 12:28:14ID:???
MySQLはBazaar。
https://code.launchpad.net/mysql
ここから拾ったものはGPL。
0033NAME IS NULL2009/04/23(木) 17:18:20ID:???
postgreって実はシェアかなり少なかったんだね
0034NAME IS NULL2009/04/23(木) 17:27:58ID:???
firebirdってMySQLの代わりになりません?
0035NAME IS NULL2009/04/23(木) 17:44:21ID:cXNPfnaF
>>33
Windowsネイティブ版が遅かったというのもあるかもしれない
cygwin環境でのインストールの記事はあるにはあったけどね

>>34
@ITのDBセクション見てみれば?
小規模な組み込み用途が多いような印象を受けてる
innodbの代替のfalconの開発者はFirebirdの中核っぽい人じゃなかったっけ?
0036NAME IS NULL2009/04/23(木) 19:08:45ID:???
ポストグレは完全に散ったな
0037NAME IS NULL2009/04/23(木) 21:03:09ID:???
>>36

> ポストグレは完全に散ったな

何故そういう結論になるのかしりたい
0038NAME IS NULL2009/04/23(木) 21:33:24ID:nqF0XbwY
>>37
禿同。
案件に合うか、合わないかじゃねーの
0039NAME IS NULL2009/04/24(金) 03:02:07ID:???
ポスグレ厨が居る限り存続しうる!安泰じゃ!
0040NAME IS NULL2009/04/24(金) 03:14:11ID:???
PostgreSQLは8が出るのが遅すぎた。
不人気の理由は他にないような。
0041NAME IS NULL2009/04/24(金) 03:43:16ID:???
MySQLのような尖った特長がなかった。
0042NAME IS NULL2009/04/24(金) 03:48:44ID:???
MySQLの尖ったところってどこだろう。
0043NAME IS NULL2009/04/24(金) 03:56:51ID:???
36みたいなショックで発狂しちゃった人を触るなよ
0044342009/04/24(金) 11:02:51ID:???
>>35
なんか微妙すね。当面はMySQL使ってDrizzleが使えるようになったら乗り換えるかな。
0045NAME IS NULL2009/04/24(金) 12:40:50ID:N4I7I0BX
儚くもポストグレが完全に散った。
もう今から始める奴はポストグレを選ばない。

MYSQLがOracleになったからIT系専門学校ではMYSQLを教え、
書店にはMYSQL関連の参考書がさらに並ぶ。
そういう利用者がネットでMYSQLを語り
それを見た奴がMYSQLでデータベースを始める。
MYSQLとOracleに共通性が出れば就職にも有利。

完全にポストグレは蚊帳の外。
終わった。象は絶滅だ。
0046NAME IS NULL2009/04/24(金) 13:49:39ID:JUI0rWl8
>>45
多分DB触ったことがない奴が言ってもねーーーー
#触ったことがあるなら、そういう発言にはなりえないよ
#触っていってるなら、仕事やめたほうがいいよ
0047NAME IS NULL2009/04/24(金) 15:47:47ID:???
33=36=45はキチガイ荒らしでおそらく同一人物放置推奨。
そもそも、postgreとかポストグレとか言っている時点で…
0048NAME IS NULL2009/04/24(金) 16:49:53ID:???
両方使ってたし、二者択一ってわけでもないからなにがどうでもいいと思うがなー。

だがSQLserver貴様は別だ。オープン系メインでやってたら貴様の出る幕はないけんの。
0049NAME IS NULL2009/04/24(金) 17:45:26ID:???
>>46
激同
ただMySQLのシェアが更に広がるのは間違いない
0050NAME IS NULL2009/04/24(金) 18:41:40ID:???
>>49
そうかなぁ。日本国内ではPostgresが徐々に増えそうな気がする。
個人的には、MySQLはちょっと方言がきつくて、気に入らない。
海外ではMySQL以外では何が人気なんだろうね、Firebird?
0051NAME IS NULL2009/04/24(金) 19:02:16ID:???
今のうちにmysqlダウンロードしておいた方がいい?
いきなり有料になったりするんじゃね
0052NAME IS NULL2009/04/24(金) 21:19:15ID:???
mysqlのデータフォルダを丸ごと定期的に別のドライブにコピーしてバックアップしてます。
これを他のPCに移した場合、ちゃんと機能する場合とmysqlがエラーになり立ち上がらない場合があるのですが
これは本来よくない方法なのでしょうか?
たまたま自分の別のPCでも読み込めるだけで
本来は動かなくて当然で推奨されないことなのでしょうか。
dumpより楽なのでこの様なコピーをしているのですが。
0053NAME IS NULL2009/04/24(金) 21:20:19ID:???
お前は何を言ってるんだ
0054NAME IS NULL2009/04/24(金) 21:47:26ID:???
MySQLが飼い殺されるどさくさに紛れてperconaが主流になったりして。
0055NAME IS NULL2009/04/24(金) 21:55:44ID:???
>>52
Linux 上で使っているなら lvm mysql スナップショット
あたりでググれ。

Windows の場合は VSS Writer がないので VSS 対応のバックアップ
ソフトでバックアップを開始する直前直後にLinux の場合と同じことをす
れば出来るかもね。 まあ面倒なので素直に dump だな。
0056NAME IS NULL2009/04/24(金) 22:02:08ID:???
>>52
エキノコックスに罹ってるぞ
0057NAME IS NULL2009/04/25(土) 21:43:44ID:zIrsT6ri
文字だけしか入っていないレコードから
ランダムに一つ取り出すにはどうすればいい?
やっぱり数字用のカラムを作るべき?
0058NAME IS NULL2009/04/25(土) 21:57:58ID:???
order by rand() limit 0, 1
0059NAME IS NULL2009/04/25(土) 22:35:20ID:???
国際情勢に例えると

Oracle = アメリカ
MYSQL = 日本
ポストグレ = 北朝鮮

OracleとMYSQLの同盟により
ポストグレは完全に終わった
0060NAME IS NULL2009/04/26(日) 00:39:50ID:FjN1BGTg
>>59
なるほど。イエローモンキーと馬鹿にされているわけだ
Oracleのいいなりになるしかないから、その点では正しいなw
Postgresは危機感をあおってはいないが
昔は攻撃的だったのはMySQL側だったのだが(とMLで書いてた人がいたよ)
0061NAME IS NULL2009/04/26(日) 06:37:59ID:???
>>59
包茎くん乙。
お前にせめて自分が生きる悪臭公害と言われていることに気づけるぐらいの
知能があればよかったのにな。
0062NAME IS NULL2009/04/26(日) 06:42:37ID:???
どっちかというとMySQL飼い殺しor値上げにより
PostgreSQLキター じゃないの?
すくなくともうちの会社はそう。
0063NAME IS NULL2009/04/26(日) 08:29:57ID:FjN1BGTg
>>62
買収しようと思っていたコンペジターだから、これまでと同じ
というのはありえん気がする
free系使えるなら、Postgresな人だから、自分にはあまり関係ないが
0064MySQLの父2009/04/26(日) 13:05:30ID:???
暇なんでMySQLみたいだけど嫌Oracle民向きのRDBソフトつーのを作ってみるわ。
もちろんGPL2ライセンスな。少しまちなー。
0065NAME IS NULL2009/04/26(日) 18:22:44ID:???
ようするに象はイルカに負けたって事だろ?
0066NAME IS NULL2009/04/26(日) 21:28:00ID:???
ぶっちゃけポスグレの利点が分からないよな?
0067NAME IS NULL2009/04/27(月) 00:13:56ID:???
あつかましいのですが、どなたかツリー構造のサンプル作っていただけませんか?
親IDと子IDをどのように扱えばいいのか・・・
あぁ混乱します
0068NAME IS NULL2009/04/27(月) 00:32:32ID:???
ぐぐれば星の数ほど出てくるだろ
0069NAME IS NULL2009/04/27(月) 00:54:30ID:+QFX8mPI
BLOBのfieldにバイナリを入れた場合エラーになる原因として
●文字コードの違い
●データ量が大きすぎる
以外で何か考えられますか?
いつも決まって特定のファイルが入らないのですが、文字コードは合わせてるしデータ量も少ないのですが。
0070NAME IS NULL2009/04/27(月) 02:49:26ID:???
●エラー文を読む
0071NAME IS NULL2009/04/27(月) 06:31:00ID:4KD78JzF
>>64
後のSQL64の開発者ですねわかります
0072NAME IS NULL2009/04/27(月) 07:50:04ID:9YyqFg03
>>67
MySQLでWith〜 が使えるか探してみたら?
#ぱっとみ、なさなそうな感じだけど>マニュアル確認してくれいw
VBでリカーシブなコード書いて出したことはあるけど遅い(SQLのみに比べて)
ADO.NET使えるなら、DATAtableにつっこんで、リカーシブで探せば早いかな
#元データでかいと、ある意味嫌だけどw
joinで書いてるのは、階層数決め打ちだから案件によりけりだと思うよ
自分の場合は使えなかった
0073NAME IS NULL2009/04/27(月) 08:17:07ID:???
ライセンス形態はPostgresがいい
0074NAME IS NULL2009/04/27(月) 10:01:04ID:+QFX8mPI
いつからsunはOracleになるの?今年度中?
0075NAME IS NULL2009/04/27(月) 16:07:51ID:???
InnoDBのレコード累計をカウントするのを速くする改善をOracleスタッフに望む(切実)
0076NAME IS NULL2009/04/27(月) 18:09:26ID:???
そんなタダ働きするわけねーだろ
するとしても有料版だけだ
0077NAME IS NULL2009/04/27(月) 21:07:38ID:???
じゃあもうMySQLの進化は止まるってこと?
0078NAME IS NULL2009/04/27(月) 21:09:04ID:???
オラクルのサイトのラインナップ (歴史博物館) に飾られて…
0079NAME IS NULL2009/04/27(月) 22:29:08ID:???
INSERTとDELETEにトリガでも仕掛けたらいいんじゃないの
0080NAME IS NULL2009/04/27(月) 22:47:33ID:Up4sYX/B
1000万件くらいのレコードの入ってる簡単なデータベースがあって、
メンバID(Int)、メンバデータ1(double)、メンバデータ1(double)、メンバデータ2(double)、メンバデータ3(double)
というスキーマになってます。メンバIDをキーにして、
SELECT * FROM *** WHERE メンバID=12345;
みたいな処理をよくやるんですが、INDEXを作っても作らなくても所要時間が差がありません。
(2〜3秒くらい)
ここからもっと処理を速めようとすると、どうすればよいですか?

0081NAME IS NULL2009/04/27(月) 23:02:50ID:9YyqFg03
indexがきくのは、対象が5%位っていわれてなかったっけ?
1件だけだと、テーブルスキャンになってるんじゃないかなと・・・
#実行計画見てみたら mysql explain ぐぐれば見つかる
0082NAME IS NULL2009/04/27(月) 23:12:01ID:???
>>80
IDっていうくらいだから当然ユニークだよね?
あと、NOT NULL ならすこーし速くなる
あとはexplainの結果次第かな
0083NAME IS NULL2009/04/28(火) 00:23:48ID:aHnBfSXl
>>81-82
ありがとうです。
Index張ってExplainしてみました。
mysql> select * from shain_master where Code=8324;
<データ出力。省略>
2281 rows in set (2.65 sec)

mysql> explain select * from shain_master where Code=8324;
+----+-------------+--------------+------+---------------+------+---------+------+---------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+--------------+------+---------------+------+---------+------+---------+-------------+
| 1 | SIMPLE | shain_master | ALL | NULL | NULL | NULL | NULL | 8222579 | Using where |
+----+-------------+--------------+------+---------------+------+---------+------+---------+-------------+
1 row in set (0.00 sec)


mysql> create index Code_Index on shain_master (Code);
Query OK, 8222579 rows affected (3 min 1.96 sec)
Records: 8222579 Duplicates: 0 Warnings: 0

mysql> explain select * from shain_master where Code=8324;
+----+-------------+--------------+------+---------------+------+---------+------+---------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+--------------+------+---------------+------+---------+------+---------+-------------+
| 1 | SIMPLE | shain_master | ALL | Code_Index | NULL | NULL | NULL | 8222579 | Using where |
+----+-------------+--------------+------+---------------+------+---------+------+---------+-------------+
1 row in set (0.00 sec)

mysql> select * from shain_master where Code=8324;
<データ出力。省略>
2281 rows in set (2.47 sec)

結局2.65秒から2.47秒になったのですが、(7%ほど速くなった)
これ以上はできないと思いますか?

Code(メンバIDのことです)はユニークです(プライマリキーになってます)
NOT NULLについては、プライマリキーになってるなら、NOT NULLですよね?
アドバイス等もらえたら有難いです。
よろしくお願いします。
0084NAME IS NULL2009/04/28(火) 01:09:06ID:aHnBfSXl
すいません、Codeはユニークではありませんでした。
Codeとあと2つの数字をあわせて、ようやくプライマリーキーでした。
(なので、プライマリーキーは3個)
複合キーで試してみます。
失礼しました。
0085NAME IS NULL2009/04/28(火) 01:47:12ID:aHnBfSXl
3個の複合キーを張っても、単純な先のSelectはほとんど時間同じだったです。
ただ、サブクエリを含むSQLは速くなった。
3分まっても帰ってこなかったSQLが、1分以内で帰ってきたよ。

DBはデータのメンテが楽だから使ってるんだけど、SQLをどう書き換えたら性能が
どうかわるのか分かりにくい。
0086NAME IS NULL2009/04/28(火) 05:34:52ID:???
>>83 は何も改善されてないね。
analyze table shain_master;
をしてもう一度試してみて。

それでだめなら以下のようにINDEXを強制。
select * from shain_master force index (Code_Index);

あと >>85 のEXPLAIN結果と、
show create table shain_master\G
をみせてほしい
0087NAME IS NULL2009/04/28(火) 21:17:53ID:v5jCnHuN
ロックしてdumpしてる時はDBの更新ってできるのですか?
サーバーを止めずに50GB位をdumpしたいのですが。
0088NAME IS NULL2009/04/28(火) 22:02:41ID:???
ZFSのsnapshotを使ったら良いんじゃないの
0089NAME IS NULL2009/04/28(火) 22:21:24ID:???
スナップショットだけで実現できるわけないだろw
スナップショットは、コピーコマンドの代替に過ぎない。
DB側がきちんとオンラインバックアップの準備をしないと。
0090NAME IS NULL2009/04/28(火) 22:24:41ID:ZrsNSBAo
>>87
ロックしてるのに、どうして更新できるのかと・・・・
0091NAME IS NULL2009/04/29(水) 05:49:58ID:???
>>89
ファイルのスナップショットがとれても、メモリのスナップショットが取れる
わけではないからねぇ。

VMwareでメモリイメージをファイル化するようになっていて、それがZFSの上で
動いている場合なら話は別だけど。
0092NAME IS NULL2009/04/29(水) 10:02:54ID:???
ちょっとちょっと
0093NAME IS NULL2009/04/29(水) 12:30:00ID:???
アクセスが多いサーバーの場合MySQL一本でいくのと
他のDBソフトも入れてそれぞれで分担してさばくのとどっちが効率いい?
0094NAME IS NULL2009/04/29(水) 13:54:40ID:???
MySQLをたくさんいれればいいんじゃないの
0095NAME IS NULL2009/04/29(水) 14:50:05ID:???
>>89
>スナップショットは、コピーコマンドの代替に過ぎない。

厳密には違うよ。ZFSのスナップショットはアトミックに
データを複製出来るから、ストレージエンジンがデータ
ファイルの一貫性を保って書き込みしていれば問題無い。
これは>>91についても同じ。
0096NAME IS NULL2009/04/29(水) 14:51:18ID:???
マイエスキューエルなお兄さん達に質問があります。

MAX ALLOWED packetをPHPのスクリプト上で変更した場合の有効期限っていつまでですか?

大きなバイナリを入れる前にMAX ALLOWED packetをクエリを送り大きくしてるのですが
入れた後に再度小さく戻す必要があるのでしょうか?
0097NAME IS NULL2009/04/29(水) 15:00:53ID:???
>>95
スナップショット?ZFSってそんなこと出来るの
0098NAME IS NULL2009/04/29(水) 16:16:48ID:???
出来るよ。実際には即座にデータが複製される訳ではなく、
COWでそう見せているだけだけど、実用上は同じことです。
0099NAME IS NULL2009/04/29(水) 17:54:05ID:goBvMPts
すみません、お聞きしたいことがあります。
カタカナひらがなは同一視するけど、濁点と普通の文字は同一視しない照合順序って
ありませんか?

現在utf8_general_ciでひらがなとカタカナを同一視させることはできたのですが、
濁点と普通の文字が同一視されて困っています。(「が」=「か」等)
0100NAME IS NULL2009/04/29(水) 18:21:02ID:???
↑少し間違えました。
utf8_general_ci→utf8_unicode_ci
0101NAME IS NULL2009/04/29(水) 19:11:00ID:???
MySQLのインデックスについて質問させてください。

例として「name」「type」という2つのカラムにインデックスを張る場合、

(name, type)
のように2つセットでインデックスを張る場合と、

(name)
(type)

と2つに分けてインデックスを張る場合と、パフォーマンスに差は出てくるのでしょうか。
ちなみに検索は、「name」のみ、または「name」「type」2つセット、の2通りで検索します。

もしパフォーマンスがかわらないのであれば、今後仕様が変わっても「type」のみでも検索ができるので、
後者を選択したほうがよいと思っています。

よろしくお願いします。
0102NAME IS NULL2009/04/29(水) 20:23:50ID:???
>>95
はぁ?
データベースが論理的に一貫性保っていることと、データファイルが一貫性持っていることは別だろが。
そこになんらかの調停役をするものが必要だろ。
それについては、各DBによって仕様がまちまちだから、ZFS側だけで一貫性が保てるなんてことはあり得ない。
0103NAME IS NULL2009/04/29(水) 20:37:50ID:???
>>102
一貫性じゃなくて整合性だったな。クラッシュリカバリ出来る
ストレージエンジンなら>>95の通りだよ。例えば InnoDB を
使っているなら ZFS の恩恵をフルに享受出来る。Maria や
Falcon みたいな最近のストレージエンジンでも同じだと思う。
0104NAME IS NULL2009/04/29(水) 21:09:28ID:720E2UER
>>101
explain で実行計画確認した方がいいと思うよ
http://sdc.sun.co.jp/news/2009/04/feature01.html とか
まぁ mysql マルチカラムインデックス でさがしてみそ
0105NAME IS NULL2009/04/29(水) 21:11:44ID:???
マルチカラムインデックスだと、(a,b,c)にインデックス作ったら
bとcはインデックスにならないんだよね。
0106NAME IS NULL2009/04/30(木) 17:00:32ID:???
>>101
それぞれのシーンで有効なインデックスは、
「name」のみ・・・(name)または(name, type)
「name」「type」2つセット・・・(name, type)
「type」のみ・・・(type)

全てに対応したいなら、
(name, type)と(type)の2つのインデックスを付与。
0107NAME IS NULL2009/04/30(木) 22:54:00ID:???
Oracle検定があるんだからMySQL検定も作ってほしい
0108NAME IS NULL2009/04/30(木) 23:23:58ID:???
>>107
ありますよ。ちなみに自分も今度受けて来る予定です。

http://www-jp.mysql.com/certification/
0109NAME IS NULL2009/05/01(金) 14:11:46ID:???
>>106
最近はインデックスマージで、同時に複数のインデックスを使用可能。
0110sage2009/05/01(金) 14:27:19ID:8dcd/ec9
>>109

インデックスマージ便利ですね。

「name」「type」2つセット・・・(name, type)
「name」「type」2つセット・・・(type) (name)

は速度差はあるんだろうか?
0111NAME IS NULL2009/05/01(金) 15:57:15ID:???
インデックスマージは複合インデックスよりは遅いよ
01121102009/05/01(金) 16:10:08ID:???
>>111

おぉ、ありがとうございます。
じゃあ
 「name」のみ・「type」のみ・「name」「type」2つセット
のスピードアップには
 (type) (name) (name, type)
の3つインデックス用意するのがいいんですね。

名前にsageしてた Orz
0113NAME IS NULL2009/05/01(金) 16:24:13ID:???
(name, type)があれば
(name)はいらないよ
0114NAME IS NULL2009/05/02(土) 01:10:43ID:???
質問させて下さい

sqlファイルをsshを使ってphpmyadminへインポートしたいのですが、
どのようにコマンドを書いてあげればいいでしょうか?
アドバイスをお願いします
0115NAME IS NULL2009/05/02(土) 05:36:23ID:???
消えろ
0116NAME IS NULL2009/05/02(土) 11:47:30ID:sAcX2g2P
MYSQLに画像を1000枚位入れてブラウザに一覧表示にして
ダウンロードソフトのirvineで一気に1000枚落とそうとしたら
MYSQLが不安定になり接続できなくなりました

一応MYSQLは動いていまして再起動させたら元に戻りました。
こういう不具合は設定でなんとかできますか?
ちなみにローカルのPC内でのテストです。
0117NAME IS NULL2009/05/02(土) 14:04:33ID:BrjlIbgF
そのあたりは、チューニング本見ながら調べないといかんのじゃない?
#unix系なら、iostat,memstat,netstat とか見ながら、ボトルネック探すんだろうけどね
詳しい説明とかどう対処するかはパフォチュー本以外で説明してるのって中々ない気がする
0118NAME IS NULL2009/05/02(土) 15:10:05ID:1rG19lPd
超初心者的な質問で恐縮ですが、

MySQLには、Oracleのような表領域とか容量計算とかはあるのでしょうか?
あと、主キーを2項目設定しようとすると『ERROR 1068 (42000) Multiple primary key defined』と出るのですが、どうしたらよいのでしょうか?

0119NAME IS NULL2009/05/03(日) 09:15:04ID:???
Oracleと同じ仕組みはない
MyISAMなら1テーブル1ファイル
InnoDBなら全部まとめて1ファイルか、1テーブル1ファイル

主キーは1個しかないから主キーなんだぞ
これはOracleでも同じ
0120NAME IS NULL2009/05/03(日) 11:12:44ID:???
ファイルごとに別パーティションに置いたりすれば、
テーブル領域はかなり自由。
0121NAME IS NULL2009/05/03(日) 13:32:27ID:???
I/Oの最適化まで考えると、「全部まとめて1ファイル」「1テーブル1ファイル」のどっちも難しくなるな。
もっとも、ストレージまで含めると、表領域概念があっても複雑になるけど。
0122NAME IS NULL2009/05/03(日) 18:41:52ID:???
>>114
460 名前:名無しさん@お腹いっぱい。[sage] 投稿日:2009/04/30(木) 00:27:39
mysql [ENT]
で、mysqlのコンソールが実行できることをまず確認
できないならmysqlが入ってない

できるのにそのエラーが出るなら、<以降のファイルの指定
0123NAME IS NULL2009/05/03(日) 18:47:24ID:IRQUoHF0
もうMySQLは終りだから別のDB勉強したほうがいいよ
0124NAME IS NULL2009/05/04(月) 05:40:01ID:???
max_allowed_packetについて質問です。

今、ローカルの環境で、画像等のバイナリを格納するDBを組もうとしているのですが、
一定以上のサイズ(1MB以上)のデータをINSERTする時に、例によって
Got a packet bigger than 'max_allowed_packet' bytes
のエラーが出力されて、格納出来ません。

そこで、max_allowed_packetの値を大きくするのですが、ちょっとよく分からない現象に遭遇してます。

まず接続して、show variables like 'max_a%'で読むとデフォルトの1MB、
set (session) max_allowed_packet = 4194304 で4MBにセットして、show variables
でちゃんと4MBになっているのを確認し、バイナリのINSERTをかけても、
やはり’Got a packet・・’のエラーが出て、格納できず。(これは、php perlのスクリプト中からやってます。)

次に、接続中に set global max_allow・・・で同様に4MBにセット、show variables では1MBのまま(これは仕様どおり)、
一旦接続断してから再接続で、INSERTをかけるとINSERT成功。その後はGLOBAL設定が効いているので問題なく成功。
0125つづきです2009/05/04(月) 05:41:14ID:???
その次は、GLOBALが4MBの状態時に、スクリプト中で set session max_allow・・・=1048576(1MB) にセット、
show variablesで1MBを確認後、1MB以上の画像をINSERT実行で、成功してしまいます。

公式のマニュアルには、'globalは次回接続以後、sessionはその時点から、同じ変数に別の値をセットするか接続断まで'
と書いてありますが、globalのほうはその通りなんですが、sessionでmax_allowed_packetを変更しても、
その時点で効いてないようです。

今はローカル環境で試していますので、my.cnf(my.ini)での設定や、rootでグローバル権限を持っているので
なんとかなるのですが、じつはこれを外部のレンサバで動かすことを考えているので、
my.cnfやグローバル権限がない状態で、この変更は不可能なのでしょうか?

ちなみに試した環境は、
WinXpsp3 + 5.0.78 5.0.79
Linux/CentOS + 5.0.79 5.0.80
ファイルサイズ約1.5MBの画像ファイルで、いずれも同様の結果となります。
0126追記です2009/05/04(月) 07:51:55ID:???
その後、色々ググったりPHPのマニュアル漁ったりしたところ、
mysqli関数でmax_allowed_packet越えのINSERTが出来るようになりました。
しかし、残念ながら稼動予定のレンサバのphpは、mysqli関数が未サポートのようで使用出来ません。
(phpinfoでも出てこないし、実際connectだけ書いたスクリプトもエラーになってしまいます)

うーん、なんとかやる方法はないものか・・・。
0127NAME IS NULL2009/05/04(月) 08:27:28ID:7kTTuHSt
なんで企業はOracleを好むの?
高いのに。社長さんは自分でできないからサポートがあるOracleにしてるのかな?
ってゆうかそれバカじゃん。無知。IT無知。
データベースの操作くらい今時チンパンジーでもできるよね。
チンパンジー以下だね。間違いなく包茎。
Oracle利用者は包茎。
短小包茎。

そんなバカ共と、何でも自分で解決する努力家のMYSQLユーザーが同じに扱われたくないよ。
0128NAME IS NULL2009/05/04(月) 10:33:09ID:???
いちど72CPU144コアのUNIXサーバでMySQL動かしてみたらいいよ
このへんでまともに動くのはOracleとDB2だけ
0129NAME IS NULL2009/05/04(月) 11:29:01ID:L8iXHRu1
適材適所でいいんじゃね?
他を否定する奴って、実務経験ない奴なんだろうなぁ・・・
といつも思う
>>128
自分には縁がなさげな規模だw
0130NAME IS NULL2009/05/04(月) 13:51:26ID:???
>>128
PostgreSQLは試した?
8.1 8.2 でかなりマルチCPUへの対応を強化してるはずだけど。
12CPU以上でも性能伸びるってさ。
0131NAME IS NULL2009/05/04(月) 18:11:28ID:???
>そんなバカ共と、何でも自分で解決する努力家のMYSQLユーザーが同じに扱われたくないよ。

ぶっちゃけ、SybaseとかDB2とかHiRDBの方がMySQLより情報が少なくて
エンジニアがスゲー努力していると思うけど。
0132124ですが2009/05/05(火) 01:05:32ID:???
さらにその後色々調べて見ましたが、どうやらmax_allowed_packetを
sessionレベルで変更することは無理なようだと結論付けることにしました。
このあたりを参考にしました。
http://bugs.mysql.com/bug.php?id=22891
http://bugs.mysql.com/bug.php?id=14180

ちなみに、http://d.hatena.ne.jp/mir/20060201
ここによると、大きなサイズのクエリでも、max_allowed_packet以下のサイズに分割し、
何度も送信を繰り返すような実装があれば可能なようですが、
ここにある C/J や C APIを直接叩くような自前のコード以外には、
今のところphpのmysqli(拡張版のほう)関数以外には見つけられませんでした。

>>126での通り、その鯖ではmysqli関数が利用できませんし、
perl-DBIのほうにはそれらしいことが出来ない(?)ようなので、
現状、システムのmy.cnfの編集や、root等グローバル(スーパー)権限を持たない
ユーザーしか使えない環境では、サイズ制限を1MBまでにすることにします。

なにか他の方策や、「こうやれば出来る」みたいなことをご存知の方がおられましたら、
是非ともお教え頂きたいと思います。
0133NAME IS NULL2009/05/05(火) 01:27:34ID:???
一括で入れられないなら、テーブル構成変えて分割で入れたら?
0134NAME IS NULL2009/05/05(火) 01:42:40ID:VyNefM6q
DBの話じゃなくてシステムとして考えた場合、
画像データをDBにつっこむ意味ってあるの?

画像データはファイルのまま適当なディレクトリにつっこんで、
ファイル名と保管ディレクトリだけDBにINSERTしておくのが合理的な気がするが。
01351322009/05/05(火) 03:35:33ID:???
ご意見ありがとうございます。

実は、あまり言いたくはなかったのですが、ある知人からの紹介で依頼を受けることになってしまって、
(正規のWeb作成業者等より)格安で請けることになったものでした。
私自身は、3,4年前からテキストベースの検索エンジン的なサイト等をいくつか運営しているのですが、
実はバイナリ(BLOB)型のデータを扱うのは今回が初めてでした。

その依頼者さんの希望として、
・アップローダ的な機能がほしい
・そのバイナリをDBに格納したい
・その閲覧やダウンの可否を制御したい
・Web領域にはバイナリを直接置きたくない
・依頼者さんが借りているレン鯖上で(しかもいくつかの複数の業者で同様に)動作するようにしたい
のような要望がありまして、とりあえずそのように作成しているところです。

特に閲覧制御については、会員登録やパスワードの設定等もDBの別カラムに格納し、
それをもって制御したいとのことです。あと領域に関しては、Web領域とDB領域が別になってるようなので、
Web領域を食わなくてもいいというような見地もあるようです。

私自身は、もし自前で運営するなら、>>134さんのおっしゃるようなシステム構成にすると思います。
前にそのようなことを提案したんですが、どうもDB内に格納することにこだわっているようです。
あと、恐らくはその依頼者さんが、管理の面で、連番になったidとファイル名などの照合などが面倒なのと、
削除する時(Web領域にはFTPで接続するようですが)間違って消したり、上書きされたりすることを
懸念されているのでは、と邪推しております。

>>133
!、確かにその手はありかもしれません。(視界が狭くなってました)
その依頼者さんが、どうしてももっと大きいサイズがほしいと希望するなら、
その方法でやってみます。どうもありがとうございます。
0136NAME IS NULL2009/05/05(火) 07:13:32ID:???
BLOB型をマジで使ったことないけど、たとえばセッションが10000個くらいあって
ダウンするファイルが10MBだった場合、100GBくらいメモリ消費するイメージがあるんだけど。
0137NAME IS NULL2009/05/05(火) 12:17:38ID:VyNefM6q
DBに画像つっこむのは絶対アホだと思うが、
無理にやるならmy.cnfの設定変えればいいんじゃね?
SETでちまちまやるより。
まさかmy.cnfも変更できないなんて話はないよな
0138NAME IS NULL2009/05/05(火) 23:49:19ID:???
>>136
現実的に考えて、135が作るようなコンテンツでセッションが
一万いくなんてありえると思ってるの?
100すらありえないだろう。
0139NAME IS NULL2009/05/06(水) 15:41:53ID:???
>>129-131
凄く勉強になりました
0140NAME IS NULL2009/05/06(水) 17:04:58ID:???
買収で盛り上がってきたのに再び過疎になったね
0141NAME IS NULL2009/05/06(水) 17:19:25ID:???
何でデータベースは検索が速いのかが疑問なんですが
仕組みについてやさしく書かれているサイトは無いでしょうか?
0142NAME IS NULL2009/05/06(水) 17:28:14ID:???
>>141

まずはB-treeについて勉強したらいいよ。
0143NAME IS NULL2009/05/06(水) 17:37:32ID:dE2L58df
ちょっと古いけど「RDBMS解剖学」を立ち読みしてみる とか
0144NAME IS NULL2009/05/07(木) 15:23:38ID:DlYqT5Bu
innoDBよりISAMの方が検索速いってマジ?
0145NAME IS NULL2009/05/07(木) 16:40:58ID:???
検索だけならMyISAMは早い。
GoogleがMyISAMの改造版を使ってるという記事を読んだことがあるな。
0146NAME IS NULL2009/05/07(木) 16:44:48ID:Olr/5NnF
ところでさMySQLはオプソなんだから、
クローンプロジェクトで管理していってもかまわんのじゃない?
それともフリーなだけでオープンじゃなかったわけ。
0147NAME IS NULL2009/05/07(木) 17:05:29ID:3pzQ/ytL
forkはできるが、信頼できる組織か個人がやらないとダメだろう。
そこらの無名の人間がforkしても誰も使わないだろ。

MySQL創始者のmontyは会社はじめてるし、彼がやるならOKと思うが、innodbがOracleの物だからMyISAMしかダメなのはつらいかもな。もちろんforkしたらinnodbが使えないかどうかは知らんが
ユーザーからすればあまりに危険なんでforkしたやつではinnodb使う奴はそうそういないだろう。

Falconはどうもダメっぽい。っていうかinnodbのかわりになるほど完成度があがるとは思えん。

ま、なんだ
もともとinnodbがOracleに握られた段階でMySQLはキンタマつかまれてたわけで、その前のOracleによるMySQL買収交渉の時点でOracleの対MySQL戦略は決まってたはずだ。
つまりMySQLに先はない。forkに期待するのもいいが、別のDB使う検討をはじめるのが普通のエンジニアのリスク管理だと思うがな。
0148NAME IS NULL2009/05/07(木) 21:09:46ID:???
>>147
InnoDB も GPL だから、使いつづけることはできる。
0149NAME IS NULL2009/05/07(木) 23:48:45ID:3pzQ/ytL
>>148
それは知ってるが、forkしてOracleと対立しながらinnodb使い続けるのってリスキーだろ、て話し

0150NAME IS NULL2009/05/07(木) 23:57:52ID:???
以前まで動いていた、MySQLが動かなくなってしまったのですが、どうにも
解決しないので、どうかお力を貸してください。

OS:CentOS5
MySQL5

MySQLを開始しようとするとエラーがでてしまいます。

エラー内容:
mysqld failed. The error was:MySQL データベースを初期化中:
Neither host '自宅サーバーのホスト名' nor 'localhost' could be looked up with
/usr/bin/resolveip
Please configure the 'hostname' command to return a correct hostname.
if you want to solve this at a later stage , restart this script with the --force option
[失敗]

どうか御教示ください。お願いします。
0151NAME IS NULL2009/05/08(金) 00:01:37ID:???
エラーメッセージも読まないのか。
0152NAME IS NULL2009/05/08(金) 10:06:15ID:???
>>149
それが実際に問題になるなら、Innoもフォークすることになる。
GPLの最大の特徴は、誰も排他的権利を持ち得ないことなんだから。
0153NAME IS NULL2009/05/08(金) 14:38:43ID:???
でも、結局はInnoDBからforkせずにFalconをスクラッチから書いたわけだしなぁ。
0154NAME IS NULL2009/05/08(金) 21:15:35ID:23A0Mz+F
InnoDBってなんて読むの?
イノディービー?
もう一つはマイイザム?
0155NAME IS NULL2009/05/08(金) 21:16:23ID:???
好きなように読めばw
0156NAME IS NULL2009/05/08(金) 21:40:31ID:???
MySQLにしても、InnoDBにしても、厳密にはGPLとはちょっと違うじゃん
デュアルライセンスなんだし、Oracleなり、MySQL ABなりに御布施すればGPL免除でしょ?
MySQL Enterpriseなんて、登場した時から既にGPL制限の無いアプリだし
これからはMySQL Community ServerとMySQL Enterpriseの差が、
どんどん開いてゆくだろう事は想像に難くない

でも一番の問題は、昔はGPL汚染に躊躇してMySQLが採用されない事例を回避する為に
「MySQL ABに寄付してくれればGPL回避出来ますよ」的な意味合いのデュアルライセンスだったのに
今では、というかMySQL Enterpriseが出た辺りからだんだんと、「おまえ(Community Server)のものは
俺(MySQL Enterprise)のもの、俺のものは俺のもの」的なジャイアニズム全開なデュアルライセンス
に意味が変わったことだね

とはいえ>>147も触れてるとおり、MySQLは創始者自身がforkしたし、
InnoDBも去年forkしたExtraDBってのがあるにはある

先行きは明るくないとは思うけど、MySQLを捨てるのはまだ早いと思うよ
0157NAME IS NULL2009/05/08(金) 21:48:58ID:???
2chのサーバー会社にウイルス
http://tsushima.2ch.net/test/read.cgi/news/1241785943/

2009/05/08 20:23 maido3.com ホームページについてご報告いたします

maido3.com ホームページについてご報告いたします。

2009年5月7日、お客様のご指摘により http://www.maido3.com/
にアクセスするとセキュリティソフトによりサイトの閲覧が
遮断されるとのご指摘を頂きました。
ありがとうございました。

確認の結果、http://www.maido3.com/ 以下のHTMLファイルに
不正なJavaスクリプトが埋め込まれている事が確認されましたので、
急きょページの表示を停止しました。

その後の調査の結果、HTMLファイルが書き換えられたのは、
2009年5月4日午後3時30分ごろと思われます。

http://www.maido3.com/ にアクセスされたお客様は、
ご利用のパソコンの安全をご確認ください。

現在弊社では、新しいサーバーに maido3.com を移転しており、
新しいHTMLファイルにて順次ページの表示を再開しています。

全サービスのチェックおよびサービスの再開は2009年5月11日午後6時の予定です。
新しい情報が入りましたら改めてご連絡いたします。

http://www.maido3.cc/server/release/2009/200905082023.html
0158NAME IS NULL2009/05/09(土) 01:08:49ID:???
>>154
イノデービー
マイアイサム
0159NAME IS NULL2009/05/10(日) 01:13:28ID:???
>>154
いのちゃん
あいさむ
0160NAME IS NULL2009/05/10(日) 13:05:23ID:???
データはインサートできても
チンコはインサートできないんだなぁ

みつを
0161NAME IS NULL2009/05/11(月) 01:05:08ID:HP0cpXb+
バックアップについてちょっと聞きたいんだけどここでいいのかな?
サーバーAとBがあって、サーバーA(XP)は今まで使っていたサーバーで
サーバーB(Fedora)はバックアップ専用で立てたサーバー
サーバーAからSELECT * INTO OUTFILEしてデータを取り出して
サーバーBにSELECT * INTO OUTFILEするとバックアップ完了であってる?
0162NAME IS NULL2009/05/11(月) 03:01:24ID:???
no
0163NAME IS NULL2009/05/11(月) 11:11:14ID:???
>>161
レプリケーション使え。
0164NAME IS NULL2009/05/11(月) 14:29:49ID:GmKXaVZf
ハッカーを刺激してフリー版のMYSQLが一段と強くなると思う
gpg、ssl、appacheなどソフトはフリーのほうが優秀だよ。
それは当然であって、社内の限られた研究者が世界中のハッカーに
勝てるわけがないのね。数が違うから。
0165NAME IS NULL2009/05/11(月) 16:28:44ID:7jKYx7be
>>164
可能性としてはあるかもしれないけど、まぁないと思うよ
興味あることの実装と、それを安定して使えるようにする
というのは別物だし。
オプソの弱点のはそこだ ともいわれているしね
コアだった開発者がどこまで集まるかはじゃないかな
#アーキテクト含めて
0166NAME IS NULL2009/05/11(月) 17:57:18ID:???
>>164
そうだな、そうであればうれしいな。
でも、>>165の意見に賛同する部分が多いよ。

我侭なユーザーに怒らずに頑張れるのが金なんだよな。
MySQLも皆の為に頑張るよっていうすげぇ素晴らしい人
ばかりだったらSunすら買えなかっただろう。

2年くらい経ったらNetscape並の黒歴史入りかもな。
0167NAME IS NULL2009/05/11(月) 22:37:42ID:sWkB5gaT
>2年くらい経ったらNetscape並の黒歴史入りかもな。
Netscapeの血筋がthunderbirdとfirefoxをひっさげて
ものすごい復活劇になってるね。
0168NAME IS NULL2009/05/11(月) 23:07:13ID:???
>>167
そうなったらいいね。
firefox並に復活してきたらいいなぁ。
でも、そん時はMySQLって名ではないのだなぁ。

サーベルタイガーあたりの名前で復活してくれ。
0169NAME IS NULL2009/05/13(水) 02:02:16ID:LXnOWi0q
久々に仕事でLAMPのシステムを納めることになったんだが、
ライセンスはMySQL Enterpriseてのを買わなきゃいかんのか。
これって年毎に買わなければいけない?
教えてエロイ人。
0170NAME IS NULL2009/05/13(水) 02:24:57ID:???
なくてもいい
0171NAME IS NULL2009/05/13(水) 11:57:14ID:???
>>169
GPLにして再配布可能にしちまえ
01721692009/05/13(水) 12:14:37ID:oQtcNrJ7
>>170
そのへん詳しく書かれているソースとかあったら教えてもらえるとありがたいです。
ぐぐっていろんなとこ見ても、イマイチよくわからない・・・

>>171
仕事なのでムリっすねぇ。
0173NAME IS NULL2009/05/13(水) 15:32:31ID:???
仕事ならoracleでも使っとけ
0174NAME IS NULL2009/05/13(水) 15:46:12ID:???
ライセンスに悩むのならBSDLなPostgreSQLにすべきだろうな
0175NAME IS NULL2009/05/13(水) 19:50:01ID:raTYNme4
質問させてください。
複合インデックスを作成する際のキーの順番って関係ありますか?
またその場合はカーディナリティの高い順にするべきでしょうか?
よろしくお願いします
01761752009/05/13(水) 21:13:27ID:???
もしかしてスレ違いでしたか?
質疑高等スレで出直してきます。
0177NAME IS NULL2009/05/14(木) 03:43:58ID:0wBwjegy
MySQLでCREATE TABLEする際に、CONSTRAINT CHECK(条件);って効かないのですか?
主キー制約と外部キー制約は効いているのですが。
0178NAME IS NULL2009/05/14(木) 11:51:18ID:IkGVegOI
>>177
バージョンは?

って、MySQLはCHECK実装してないけどなw

こんな変なDB使ってるやつは馬鹿だぞ、別のDBにしとけ
0179NAME IS NULL2009/05/14(木) 13:47:39ID:???
外部キーよりチェックの方が使う機会多いと思うのにな。
0180NAME IS NULL2009/05/14(木) 14:05:21ID:pUvkUN/J
早くこのDB無くならないかなぁ
0181NAME IS NULL2009/05/14(木) 22:46:20ID:IkGVegOI
>>179
その外部キーだってInnoDBだけだからな
MyISAMでは使えない

0182NAME IS NULL2009/05/14(木) 23:48:28ID:???
>>180

それをわざわざこのスレに言いに来る意味があんのか?
俺としては、買収前にOracle社そのものがなくなって欲しかったわ。
Oracleを盲信してるやつらがうざい。
0183NAME IS NULL2009/05/15(金) 03:04:14ID:???
SUNの株主がOracleへの売り渡しに抵抗しているみたいだから、
もしかしたらSunの買収話は消えるかもよ

MySQLだけOracleに譲渡とかなw
0184NAME IS NULL2009/05/15(金) 03:19:34ID:???
>>182
hagedo
0185NAME IS NULL2009/05/15(金) 16:59:15ID:???
MyISAM+fulltextインデックスを使用して全文検索を行っているのですが、
レコードの量が増えるにつれInsertがどんどん、遅くなっていきます。
ある程度は、覚悟していたのですが、あまりにも遅く…。
今後もレコードは増え続けるのですが、どう対応してよいのやら…。

ある程度のところで、新しい全く同じレイアウトのテーブルを
作成し、そのテーブルにデータを追加していき、selectするときは、
既存のテーブルと元のテーブルをunion?

しかし、テーブルを分けてしまうと、重複レコードが…。

通常、こういった場合、どのように対応するのでしょうか?
ご教授していただけないでしょうか。
よろしくお願いします。m(_ _)m
0186NAME IS NULL2009/05/16(土) 14:47:22ID:???
http://www.atmarkit.co.jp/news/200905/14/mysql.html
よし、まだまだ大丈夫
0187NAME IS NULL2009/05/16(土) 15:28:04ID:???
更新はときどきまとめて行うことにして
1) fulltextインデックス削除
2) INSERT
3) fulltextインデックス作成
とか?
いろいろ制限はついてしまうけど。
0188NAME IS NULL2009/05/16(土) 16:03:01ID:???
単純に定期的に最適化してないってわけじゃなくて?
0189NAME IS NULL2009/05/16(土) 17:30:52ID:qEI7Vk1N
>>186
Falconがどうなったか思い出せ
0190NAME IS NULL2009/05/16(土) 21:15:26ID:zYBZo2FJ
>>189
firebirdの例もあるけどね
#使ったことはないけどw
0191NAME IS NULL2009/05/17(日) 00:32:30ID:???
>>186

MySQLの思いつきみたいな機能追加と変更はまともな技術者のなせる技ではない。
MySQLはmontyしかforkできないが、montyの技術力じゃ維持しつづけるのは無理。
よって終了
0192NAME IS NULL2009/05/17(日) 08:33:41ID:???
>>191
ばかだこいつwwww
0193NAME IS NULL2009/05/17(日) 12:57:48ID:???
前半は同意
0194NAME IS NULL2009/05/17(日) 13:38:57ID:???
10年くらい、今のバージョンのままでいいよ
0195NAME IS NULL2009/05/17(日) 14:22:37ID:???
機能追加は無しで、バグフィックス程度はね。
0196NAME IS NULL2009/05/17(日) 15:49:44ID:IAxxUei2
でもストアドは弱すぎない?
5.xの見てる感じだけど
0197NAME IS NULL2009/05/17(日) 16:43:23ID:???
MySQLを生かすも殺すもOracleの思いのままになった時点でMySQLは終了だ。
Oracleには期待するな。OracleがMySQLを生かそうとするならそれはローエンドのユーザから金をむしり取る場合だけだ。
無料という意味でのフリーウエアとしてはMySQLは終わったんだ。

モンティがforkするMariaSQLはだめだ。マイナーバージョンアップですらゴタゴタする思いつき開発しかできない奴に、
ここまでひろまってしまったプロダクトの舵取りさせたら混乱するだけ。
しかし、モンティに逆らって別プロジェクト立ち上げる人間も、それについていく人間もいないだろう。
強いてあげればGoogleくらいか。GoogleSQLとしてforkすれば移行する人間も多いだろう。しかしGoogleがMySQLを使い続けるだろうが、
それをオープンにしてメンテしつづける意味はまったくない。よってGoogleSQLはない。

つまりMySQLは終わったんだ。
0198NAME IS NULL2009/05/17(日) 17:19:54ID:IAxxUei2
>>197
IBMのwebsphereのfree版の方は買収した奴だと思った
他の流れるくらいならと、少しはメンテはあるかもしれんかなと
0199NAME IS NULL2009/05/17(日) 23:32:38ID:2v0ewY/l
トリガを使ってテーブルの更新をWEB画面に反映させることは可能でしょうか
0200NAME IS NULL2009/05/18(月) 03:08:12ID:???
>>199
トリガとWEBについて1から勉強しなおし
0201NAME IS NULL2009/05/18(月) 14:47:29ID:???
>>197
>モンティがforkするMariaSQLはだめだ。マイナーバージョンアップですらゴタゴタする思いつき開発しかできない奴に、
>ここまでひろまってしまったプロダクトの舵取りさせたら混乱するだけ。
こういう思い込みなところが多いから、お前の言うことは説得力に欠ける
0202NAME IS NULL2009/05/18(月) 15:19:28ID:???
>レコードの量が増えるにつれInsertがどんどん、遅くなっていきます。
インサートはオーバフローに一旦入るから遅いよ。
適当な件数でコミットすべし。
途中でしんだらバックアウトすべし、または手作業バックアウトすべし。
0203NAME IS NULL2009/05/19(火) 10:48:21ID:???
CentOS5 の mysql 5.0.45 を利用してます。

他のサーバから、/var/lib/mysql 以下のデータベース実体ファイルをコピーして来ました。
mysqlで、コピーして来たデータベースを use するところまでは問題無いのですが、
適当な検索文を走らせると

 mysql> select * from hogehoge where no = 123123;
 ERROR 1017 (HY000): Can't find file: './hogehoge/aaa.frm' (errno: 13)

というエラーが出てしまいます。
パスの指定などを行わなければ行けないのでしょうか?
0204NAME IS NULL2009/05/19(火) 11:41:59ID:???
203です。
mysqld_safe で起動すると読み込めますが、
service mysqld start から起動すると依然としてNGです。この差はなんなのでしょうか・・

パーミッションなどは問題無いようです。
0205NAME IS NULL2009/05/19(火) 11:43:39ID:???
問題無いと思っているところが問題なんだろうな。
0206NAME IS NULL2009/05/19(火) 11:51:50ID:xhLm6cZW
203です

コピーして来た物でないデータベースは、現在も問題無く認識できていて、
それと同じパーミッション・所有者としているので問題無いと思います。

0207NAME IS NULL2009/05/19(火) 12:39:29ID:???
mysql> select * from hogehoge where no = 123123;
 ERROR 1017 (HY000): Can't find file: './hogehoge/aaa.frm' (errno: 13)

hogehogeデータベースなのかhogehogeテーブルなのかわからん
エラーメッセージはそのままかこう
0208NAME IS NULL2009/05/19(火) 13:08:05ID:xhLm6cZW
紛らわしくて済みません。

 mysql> select * from hogehoge where no = 123123;
 ERROR 1017 (HY000): Can't find file: './test/aaa.frm' (errno: 13)

test : データベース  hogehoge : テーブル
です。
0209NAME IS NULL2009/05/19(火) 15:55:09ID:???
 mysql> select * from hogehoge where no = 123123;
 ERROR 1017 (HY000): Can't find file: './test/hogehoge.frm' (errno: 13)

ですね・・すみません。
0210NAME IS NULL2009/05/19(火) 16:46:49ID:???
my.iniを修正してサービスを再起動すると、エラーが出て起動できない
修正前のmy.iniに戻すとサービス起動できる

これは一体どういうことなんでしょう?
バージョンは5.1.34です
0211NAME IS NULL2009/05/19(火) 16:55:11ID:???
はい、次。
0212NAME IS NULL2009/05/20(水) 01:56:07ID:???
GPLのMySQLとPHPを使ってるんだけど、GPLだから何も問題ないよな。
0213NAME IS NULL2009/05/20(水) 18:29:03ID:???
>>212
GPLとPHPライセンスは互換性がないから基本アウトだけど、
FOSS License Exceptionのおかげでセーフ。

ttp://nippondanji.blogspot.com/2009/05/foss-license-exception.html
0214NAME IS NULL2009/05/20(水) 23:55:36ID:XwWNlez2
ちょっと相談に乗ってもらいたい。

WEBシステムでMySQL使ってて、
1日に1回、他システムからCSV形式でデータが送られてくる。
CSVは約10テーブル分。
WEBとは別のバックグラウンド処理で取り込んでる。
WEB側(PHP)からは、これらのテーブルに対する更新はない。
10テーブルのうち、delete&insertの全件入替えと、
replaceによる差分入れ替えが混在している。

こういう場合、テーブルのエンジンはMyISAMとInnoDBのどっちがよいだろうか?

02152142009/05/20(水) 23:58:19ID:???
ちょっと補足。
全件入替えのテーブルは、件数が多いもので約10万件です。
差分の場合、対象テーブルには多いもので数百万件のレコードがあり、
差分で入ってくるものは大体100件程度です。
0216NAME IS NULL2009/05/20(水) 23:59:47ID:???
>>214-215

どうも頭が高いな。

トランザクションが要るか要らないかでどちらのストレージエンジンを使うかを
判断すればいいと思うが。

0217NAME IS NULL2009/05/21(木) 13:27:56ID:???
>>212 >>213

PHPで書いたソースをどうするかが
キモになるかと思ってたんだが、違うのかな?
0218NAME IS NULL2009/05/21(木) 21:45:42ID:???
>>214
更新しないならMyISAMでいいと思うよ。
InnoDBが有利になるとしたら、主キーによる範囲検索を頻繁に行う場合ぐらいか?
0219NAME IS NULL2009/05/22(金) 06:21:53ID:???
つうか
もしも更新失敗したらとか考えないのかMySQL使ってる奴らは

バッチ処理の最中になんらかのトラブルがおこったらどうすんの
0220NAME IS NULL2009/05/22(金) 07:25:11ID:???
業務的な使い方でバッチ処理云々を言うなら、失敗したらやりなおしだろ。
0221NAME IS NULL2009/05/22(金) 10:02:38ID:???
>>214と同じような事をしているがISAMではタイミングによっては更新がされない等の問題が出たからInnoにしている
replaceを使っているならいざという時でもISAMで大丈夫かもしれないが…
確実な更新が必要だったらトランザクションがあるInnoが安心だと思う
0222NAME IS NULL2009/05/22(金) 11:55:17ID:???
最近、サーバーが重くなってプロセスを調べてみたら
mysql 2437 12.6 0.9 117408 20248 ? S May15 1354:21 /usr/sbin/mysqld --basedir=/ --data
こういうのがCPUを喰っていました。
mysqldのリロードや再起動を試みたのですが消えません。
これはなんなのでしょうか?
phpMyAdminのプロセスを見ても該当するのはないようです・・・。
0223NAME IS NULL2009/05/22(金) 13:25:50ID:???
???
MySQLサーバの本体でしょ?
あなたの作ったアプリケーションが遅いか
大人気でアクセスが多いんでしょう
0224NAME IS NULL2009/05/22(金) 13:29:06ID:???
いや、そうなんですけど、アクセスがほとんどないと思われる時間帯でも同じぐらいCPUを喰ってるんですよね・・・
0225NAME IS NULL2009/05/22(金) 13:37:03ID:???
>アクセスがほとんどないと思われる
いや実際にアクセスがあったのか確認するとか、
アクセス遮断しても同様なのかとか
0226NAME IS NULL2009/05/24(日) 10:31:57ID:???
220 :NAME IS NULL:2009/05/22(金) 07:25:11 ID:???
業務的な使い方でバッチ処理云々を言うなら、失敗したらやりなおしだろ。

馬鹿発見
ほんとにMySQLしか知らんやつらはw
業務系でDB使う意味っつか
DBが開発された意味すら分かってないんだなw
0227NAME IS NULL2009/05/24(日) 12:51:12ID:???
ホストで動いているDBとかは、バッチが失敗したら素でやり直してるな。

つか業務系とか単語出すヤツは現実に無職なヤツだろ。
0228NAME IS NULL2009/05/24(日) 21:20:24ID:???
MySQLってWEB系でしか
使われてないの?
0229NAME IS NULL2009/05/25(月) 17:02:11ID:???
MySQLを学習するに当たって、有用な参考書や、参考サイトがあったら、教えてください。
学校で、MySQLを学習するのですが、何分触るのが初めてなもので、どのように学習を進めていけばいいのかわかりません・・・。
0230NAME IS NULL2009/05/25(月) 20:39:00ID:+IuRrIp9
SQLのみなのか、管理面も含めてやるのかによって違うと思う
どんな教科書使う予定なのか まず書くことが先決だと思う
0231NAME IS NULL2009/05/26(火) 01:38:17ID:???
>>229
個人的なお薦めは公式サイトにあるマニュアルを読む事。
あれはよく出来ていると思う。

長く使うのならどうせいずれ何度も見る事になる物だし、
読んで損する事は無いと思うよ。
0232NAME IS NULL2009/05/26(火) 04:53:14ID:???
>>229
PHP + MySQL?
0233NAME IS NULL2009/05/26(火) 05:58:47ID:???
MySQL 5.1 MyISAM @レンタル鯖で、
i-mode用にデータを指定件数毎にページ分けして表示させようとしてまつ。
データテーブル: d_datas
設定テーブル: m_setting (code, par_page) primary key(code)

SELECT *
FROM d_datas
WHERE foo=xxx
ORDER BY order_key
LIMIT (SELECT par_page FROM m_setting WHERE code=1) * 何ページ目 , (SELECT par_page FROM m_setting WHERE code=1);
の様にサブクエリを使ってみたのですがエラーで動きませんでした。

何が悪いのかさっぱり分からんとです。 LIMITにはサブクエリは使えないとですか?
0234NAME IS NULL2009/05/26(火) 14:44:18ID:???
rollbackがないmyisamは怖くて使えない
0235NAME IS NULL2009/05/26(火) 20:50:50ID:???
>>233
サブクエリじゃなくてプレースホルダで埋め込め。
0236NAME IS NULL2009/05/27(水) 10:11:19ID:???
>>233
つーかmyisamにサブクエリって重いから使わない方がいいかと
0237NAME IS NULL2009/05/27(水) 11:28:13ID:???
MySQL6終了のお知らせが来たね
今後は5.4を発展させるそうでつ
Oracleに近づこうとする新機能は抹殺w
0238NAME IS NULL2009/05/28(木) 11:19:43ID:55S4kKZW
今DBにSJISとEUCで格納してますがこれをUTF-8にしたい
既に入っているデータの文字コードを全部一度に変換するSQL文ってある?
0239NAME IS NULL2009/05/28(木) 11:28:26ID:???
ダンプして入れる、でいいじゃない
0240NAME IS NULL2009/05/28(木) 13:00:25ID:55S4kKZW
>>239
それだとDBがたくさんありすぎて大変なので
SQL文だけでなんとか変換できませんか?
0241NAME IS NULL2009/05/28(木) 13:39:12ID:???
SQLでもしできても、そっちのが工数多いと思うが・・・
変換失敗したときのためにダンプしておくのは同じだし。
0242NAME IS NULL2009/05/28(木) 14:15:17ID:???
>>237
マジっすか?ソースどこ?
0243NAME IS NULL2009/05/28(木) 21:21:49ID:???
>>242
http://nippondanji.blogspot.com/2009/05/good-bye-mysql-60.html
0244NAME IS NULL2009/05/28(木) 21:25:30ID:???
>>238
ALTER TABLE tbl_name CONVERT TO CHARACTER SET charset_name;
0245NAME IS NULL2009/05/28(木) 22:44:02ID:z1ctR8/+
>>242
http://www.atmarkit.co.jp/fdb/rensai/dbwatch2009/dbwatch20095_02.html
02462382009/05/29(金) 00:50:27ID:Tc3W7H//
>>244
ありがとうございます。
これならPHPのループでテーブル名だけ入れ替えれば簡単に終わりそうです。

これ
ALTER TABLE じゃなくて
ALTER DATABASE とかでDB丸ごと変換できませんか?
0247NAME IS NULL2009/05/29(金) 02:51:06ID:wLSuWYoV
mysql5.0.45です。

update `regist` set `loginId`='hoge@hoge.com', `loginPass`='xxxx', `day1`='2009-05-28' where `uId`=3
というクエリをPHP5で実行したら、
#1054 - Unknown column 'day1' in 'field list'
と言われました、カラムday1は存在していて、型も問題ありません。

自分なりに調べたら、leftJOINをするときに起こりがちな問題ということですが、見ての通りjoinしてません
何が原因なのでしょうか。お手数おかけしますがアドバイスお願いします。
02482332009/05/29(金) 03:07:40ID:???
>>235 >>236
トン。
0249NAME IS NULL2009/05/29(金) 07:56:16ID:???
>247
そのday1っていう名前を予約語っぽくないものに変更してみたらどうなんの?
0250NAME IS NULL2009/05/29(金) 07:58:11ID:l0KxXPVG
`無しで"update〜3" じゃ駄目?
0251242 2009/05/29(金) 09:31:08ID:???
>>243 >>245
サンスコ
0252NAME IS NULL2009/05/29(金) 09:48:04ID:???
データベースをいくつか用意し、データを分散、必要なデータを適時読み取るってことできますか?
0253NAME IS NULL2009/05/29(金) 12:15:08ID:wLSuWYoV
>>249
ありがとうございます
日本語をまじえた名前に変えてみたんですが上手く行かないんです
なんでだろ… バージョンあげたら良いのかなぁ
0254NAME IS NULL2009/05/31(日) 16:02:55ID:???
primary keyとunique keyをはっているidを見たのですが、これってprimarykeyのみと比べて検索速度に違いは出ますか?
primarykeyはuniquekeyをかねると記憶していたので検証された方いらっしゃいましたらご教示ください。
0255NAME IS NULL2009/05/31(日) 19:18:49ID:???
気になるなら自分で試せばいいのに
02562542009/05/31(日) 21:26:17ID:???
試してみたいですが差を認識できるほど大規模な検証は時間がかかるので試したかたがいればとおもいました

一般的にはprimaryのみという認識であってますか?
0257NAME IS NULL2009/05/31(日) 22:15:24ID:???
INDEXなんてもし同じものに2つ以上ついていても
1つしか使われないんだから一緒だろう。

そもそも制約と索引の違いもわかってないのにそこを気にするのは間違ってるな。

0258NAME IS NULL2009/06/02(火) 16:33:55ID:kUrXdzVL
質問なのですが
シフトJISのwebページで半角の¥をデータベースに入れると取り出す時に全角のバックスラッシュになって表示されます。
ソとか表とかで終わる文も文字コードの関係で入りません。

ですのでwebページに他の文字コードを使えば解決する問題ですが
2chはシフトJISですよね。
データベースは何使ってるか分かりませんが
シフトJISでも実は問題なくできるという事だと思います。

で、こういう問題はどの様に対処するのが正しいのでしょうか?
どうすればシフトJISでソとか表とか半角の¥とか入りますか?
0259NAME IS NULL2009/06/02(火) 20:15:25ID:???
>>258
フォームで受け取る時、ウェブに表示するときに変換汁。
0260NAME IS NULL2009/06/02(火) 21:56:28ID:???
>>258
データベースの文字コードをシフトJISにする。
0261NAME IS NULL2009/06/02(火) 23:10:47ID:???
何で接続しているか知らんが、たとえば、JDBCとかだとユニコードに一旦変換されたりするんじゃね?
0262NAME IS NULL2009/06/03(水) 00:43:19ID:t6kRRUCU
>>237
もう俺は移行済み。むしろMySQLは早く無くなってほしいくらいw
02632582009/06/03(水) 02:13:29ID:maHUNQLQ
>>259-261
レスありがとうございます。

2chの場合を考えると、シフトJISで投稿されて、文末に「ソ」とかある文章でも投稿できてDBに入りますよね。
という事は、CGIスクリプトでDBに入れる前に別の文字コードに変換して入れてるのでしょうか?
それともDBやテーブルの文字コードのデフォルトをシフトJISにすれば
問題なく入るのでしょうか。
でもDBにinsertする直前にSET NAMES SJISのクエリを送れば
デフォルトでシフトJISなのと同じ事ではないのですか?
それでもinsertできません。
0264NAME IS NULL2009/06/03(水) 04:02:37ID:???
>>263
escapeだとか、prepareステートメントとか分かってる?

なんの言語つこてるか知らんけど、たいがいの言語のDB-driverには
それらの機能あるはずなんで、そこらへんちゃんと勉強しましょう。
0265NAME IS NULL2009/06/03(水) 12:32:56ID:maHUNQLQ
テーブルを作るときにデフォルトの文字コードをEUCに決めて
insertの時にset mame sjisとした場合
insertされる文字はEUCとsjisのどっちで保存されるんですか?
0266NAME IS NULL2009/06/03(水) 12:48:26ID:???
サーバ(DB)の文字コードとクライアントの文字コードの違いをよく考えよう
0267NAME IS NULL2009/06/03(水) 13:48:16ID:maHUNQLQ
ということは

set names sjis送ってもそれはクライアント側からsjisで受け取りますっていうだけで
保存はテーブルのデフォルトコードが採用されるって事?
0268NAME IS NULL2009/06/03(水) 14:15:28ID:???
ttp://www.y2sunlight.com/ground/?MySQL4.1%2F9.MySQL%A4%CE%BC%C2%B8%B3%2F3.%B4%C1%BB%FA%A4%CE%BB%C8%CD%D1
0269NAME IS NULL2009/06/03(水) 20:07:23ID:???
テーブルの文字コードっていったい何だと思っているのか
0270NAME IS NULL2009/06/04(木) 12:24:34ID:???
2chの掲示板がMySQLつかってるとは思えない
0271NAME IS NULL2009/06/04(木) 22:56:19ID:TuMdbt3U
character_set_connectionの意味が理解できないのでわかる方いましたら教えてください.

クライアントからサーバにinsertなどでデータを渡した後に,
データの文字コードはcharacter_set_clientからcharacter_set_connectionに
変換されるのでしょうか?
とすれば文字コードの自動変換とは,このことを言うんでしょうか?

また,character_set_connectionとcharacter_set_databaseが異なる場合,
ある文字コードで設定されたデータベースに文字コードの異なるデータが
入るということになるんでしょうか?
0272NAME IS NULL2009/06/05(金) 01:08:22ID:???
character_set_connectionは、
データベースにデータを格納しないSQLで使われるキャラクタセット。

mysql> set character_set_connection = cp932;
Query OK, 0 rows affected (0.00 sec)

mysql> select length('あ');
+---------------+
| length('あ') |
+---------------+
| 2 |
+---------------+
1 row in set (0.04 sec)

mysql> set character_set_connection = utf8;
Query OK, 0 rows affected (0.00 sec)

mysql> select length('あ');
+---------------+
| length('あ') |
+---------------+
| 3 |
+---------------+
1 row in set (0.00 sec)
0273NAME IS NULL2009/06/05(金) 01:14:08ID:???
> また,character_set_connectionとcharacter_set_databaseが異なる場合,
> ある文字コードで設定されたデータベースに文字コードの異なるデータが
> 入るということになるんでしょうか?

(1) character_set_database
(2) show create databaseで出てくるcharacter set
(3) show create tableで出てくるdefault charset
(4) show create tableで出てくるカラムごとに設定したcharset

まずこの(1)、(2)、(3)、(4)は個別に設定できるので注意。
(1)は(2)で上書きされる。
(2)は(3)で上書きされる。
(3)は(4)で上書きされる。

格納時はcharacter_set_connectionが何だろうと、
(4)で格納される。(4)が設定してなければ(3)で格納される。

一度テーブルを作ってから(1)や(2)を変更して再起動しても
すでに格納したデータは変わらない。
02742712009/06/05(金) 02:11:41ID:???
>>272-273
ありがとうございました!!リファレンスマニュアルに
「クライアントから送られたステートメントをcharacter_set_client からcharacter_set_connection に変換します(ただし_latin1 あるいは_utf8のようなイントロデューサのある文字列リテラルは除く).」
と書かれていて混乱していました.
>>272のバイト長の例がわかりやすかったです.

>>273は文字コードが(4)(設定されてなければ(3),(2),(1))に変換されて格納されるということですよね.
0275NAME IS NULL2009/06/05(金) 20:39:52ID:oLyVZQ1P
ダンプをしたりするのをコマンドプロンプトでやってるのですが
オプション指定とかいろいろ知識も必要で手間もかかるので
ダンプとかダンプしたデータを戻したりができるフリーソフトってないですか?
Windowsです。
0276NAME IS NULL2009/06/05(金) 21:41:50ID:???
>>258
2ちゃんねるはデーターベースは使ってない。
ファイルで管理している。
0277NAME IS NULL2009/06/06(土) 12:49:40ID:???
>>275
こんなん?
http://help.matsubarasystems.com/dbUtil/
0278NAME IS NULL2009/06/06(土) 16:58:59ID:9rrlV8Y0
2chってファイルで管理してたらサーバーがファイルだらけになるんじゃないの?
DB使わずにファイルで管理するメリットあるの?
0279NAME IS NULL2009/06/06(土) 17:11:43ID:???
ファイルだらけで何か問題?
ファイルシステムで済む事にDBを使うメリットは無いでしょ。
0280NAME IS NULL2009/06/06(土) 20:08:39ID:???
>>276
はいって何だよ。出来んのかよ。さっきから何度も。何がはいなんだよ。
出来もしねえ奴が軽々しくはいなんて言うんじゃねえよ。
わかってんのかよ。はいって言う事の責任の重さを。
社会勉強のつもりでやってんだったら辞めろおまえ。
0281NAME IS NULL2009/06/06(土) 20:16:08ID:???
>>280

なんだなんだ!?
0282NAME IS NULL2009/06/06(土) 23:04:36ID:???
2chの場合は明らかにファイルシステムの方が向いているだろ。

と言うか2chをデータベースで管理していると考えたり、例えてたり
する方が正直どうか?と思うが。
0283NAME IS NULL2009/06/07(日) 05:22:03ID:???
その明らかな理由を教えてください
0284NAME IS NULL2009/06/07(日) 06:18:01ID:???
1スレッド最大1000コメントで、順次アクセスと追記だけ。
コメント間のリンクの管理もやらない。
これのどこにDBが必要になるんだよ。
0285NAME IS NULL2009/06/07(日) 10:02:44ID:H5yYzBMm
書き込みが多い(激しい)スレだと、ファイルロックじゃ持たないでしょ?
昔から、カウンタなんかでよく出た話
#落ちてもたいしたデータじゃないと言えばそれまでw
スレ一覧の更新順に表記なんかは、DBの方が楽だという発想がないの?
0286NAME IS NULL2009/06/07(日) 10:46:50ID:???
>書き込みが多い(激しい)スレだと、ファイルロックじゃ持たないでしょ?

現に2chが持っている事実について

>スレ一覧の更新順に表記なんかは、DBの方が楽だという発想がないの?

現実にはファイルシステムの方が楽な点について


正直>>285みたいな発想できるほうがエンジニアとしては致命的だと思うが。
0287NAME IS NULL2009/06/07(日) 11:28:59ID:???
まあエラーが出たら書き込む側がリトライするし、その程度の信頼性でいいからな。
0288NAME IS NULL2009/06/07(日) 11:34:06ID:???
2chならむしろファイルシステムのが向いてるんじゃね
0289NAME IS NULL2009/06/07(日) 13:33:10ID:???
2chならむしろ存在しない方がいいわけで
0290NAME IS NULL2009/06/07(日) 19:03:15ID:???
>まあエラーが出たら書き込む側がリトライするし、その程度の信頼性でいいからな。

MySQLスレでこんな発言を聞くと凄くマヌケに感じる。
RDBMSを使ってトランザクション制御しようが、2chの仕様の「追記オンリー、1スレッド1000コメント」
の前にはRDBMS使う必然がないだろ。

つか、RDBMSで最新50取得とか次100とか全部読むをSQLを発行して結果セット取得しながら
HTMLに変換とかやるくらいなら、ファイルシステムを読みながら変換したほうが効率いい。
0291NAME IS NULL2009/06/07(日) 19:33:05ID:???
RDBMS覚えたてだと何でもDBに突っ込みたくなる物さ
わざわざDBを使って同期書き込みしたら、それこそ持たないと思うけどね
0292NAME IS NULL2009/06/07(日) 22:57:18ID:???
>>285
中の人じゃないので「今」の仕様は知らないけど。
数年前は mmap() してた。
(だからdatサイズ制限とか{ある|あった})
最近はRAMDISK上に置いてるので、鯖落ちするとdatは
電子の藻屑になるケースが多い。
※↑は書き込みの多い実況系の設定
※普通の板はファイルキャッシュで間に合うらしい
0293NAME IS NULL2009/06/08(月) 08:33:58ID:???
2chはRDBMSの方が向いていると主張するヤツは試しに
実況鯖とかをMySQLで実装してみればいいんじゃね。

おそらく、マッハで鯖が落ちる。
0294NAME IS NULL2009/06/08(月) 10:48:41ID:???
>>290
一斉に書き込むとタイムアウトするし、たまに1000超えてるときあるだろ?
銀行の預金じゃないんだからその程度でいいんだよ。
0295NAME IS NULL2009/06/08(月) 10:54:08ID:???
>>293がしょぼいプログラムを書くから落ちるんだよ。
0296NAME IS NULL2009/06/08(月) 19:34:29ID:GzH14Amh
カウンターの数字を
ファイルに書き込むのとデータベースに書き込むのは
どっちが速いですか?
0297NAME IS NULL2009/06/08(月) 19:57:45ID:???
>>296
・カウンターってウェブページに表示するアクセスカウンターの事?
・データベースはプレーンな InnoDB を使うと考えて良いの?
・ファイルシステムは何を使っても良いの?
・どんなサイトで、可用性はどの程度まで担保すれば良いの?
・サーバの実装は単発の CGI なの? それとも永続的なプロセス?

プロセスのメモリ上に置いておいてどこにも書き出さないのが一番速いよ。
0298NAME IS NULL2009/06/08(月) 22:00:42ID:???
でサーバーのプロセスに障害が発生するとカウンターが飛ぶワケだな。

ロックを判断しながらOSのファイルシステムに読み書きするのと、
RDBMSでトランザクション使いながら読み書きするのとだと、
当然だけど前者の方が速い。
0299NAME IS NULL2009/06/08(月) 22:57:53ID:???
耐障害性能の要件が無いからそれで十分。

プロセス障害が気になるならマルチプロセスにしてデータを共有しておけ。
それでも心配なら 10 分に一回 tmpfs に書き込んでおけ。
まだ不安なら 1 時間に一回 tmpfs からローカルディスクにコピーしろ。
どうしても安心出来ないなら 1 日に一回リモートマシンにバックアップしろ。
0300NAME IS NULL2009/06/08(月) 23:31:51ID:zsXNZrVF
MySQLの応答が突然遅くなりました。
MySQLとやりとりするプロセスが通常数秒で終了するところ何十分もかかっています。
mysqlクライアントのログインに数十秒かかります。
topで見てもmysqldのCPU使用率、メモリ使用率も高くありません。
show processlistでも長時間かかっているQueryはありません。
どのような原因が考えられるでしょうか?
0301NAME IS NULL2009/06/08(月) 23:40:45ID:???
>>300
それだけじゃ何とも…

単純な SELECT 文でも時間が掛かるの?
telnet や ssh は遅くなってない?
ローカルホストから接続しても遅いの?
ファイルシステムはいっぱいになってない?
I/O はきちんと処理出来てる?
mysqld 以外に何かプロセスが動いてない?
応答が遅くなる前に何か操作しなかった?
OS は Linux 系?
etc.
0302NAME IS NULL2009/06/09(火) 00:01:42ID:I15GJ2dD
>>301
申し訳ないです。

1件のSELECTとINSERTをしてみましたがいつもは一瞬のところが数秒かかります。
sshでmysqldが動いているホストにログインしてmysqlクライアントで操作していますが
mysql以外のコマンドは全く遅くなっていません。
ファイルシステムの空きは十分ありIOに問題はありません。
mysqld以外にもプロセスは動いていますがtopで確認しても負荷の高いものはありません。
突然と書きましたが、応答が遅くなる前に大量の更新処理をしていました。
0303NAME IS NULL2009/06/09(火) 00:17:37ID:???
MySQL単体の問題みたいだけど、エラーも出ない、ログイン時間が掛かる
というのは不思議ですね…
0304NAME IS NULL2009/06/09(火) 08:04:23ID:???
DNSで名前がひけなくなるとそうなるかなー
skip-name-resolveとか
0305NAME IS NULL2009/06/09(火) 10:08:10ID:???
>>302
エラーログに何も出ていないなら、テーブルスペースフルとかでもないんだよね。
単純に件数が増えて遅くなっているならexplainとかを使ってクエリの中身とか
インデックスの張り方を工夫してみると良いと思う。ファイルソートになってる
とか、インデックスを使えてない可能性もあるから。
0306NAME IS NULL2009/06/09(火) 13:00:57ID:???
>>303-305
アドバイスありがとうございます。
explainなど試してみます。
0307NAME IS NULL2009/06/09(火) 13:58:46ID:???
MySQL 5 を使い始めました。

PostgreSQL には vacuum がありますが、
MySQL には同様のものはありますか?
0308NAME IS NULL2009/06/09(火) 14:28:52ID:???
そんなものはいらないない。
03093072009/06/09(火) 14:36:49ID:???
>>308
ありがと。すばらしい。
0310NAME IS NULL2009/06/09(火) 19:53:16ID:???
あれ? 2chはファイルシステム有利とか言ってた約1名は逃げた?

2chがDB使ってないのは、元々の仕様でそうなっていたからだろ?
要するにDB管理の掲示板じゃなかったから。

DB版掲示板の無料レンタルなんて当時ほぼ無いだろうが
スレ内検索なんかにはDBの方が有利だな。CPUに負荷もかからんし。
0311NAME IS NULL2009/06/09(火) 20:22:04ID:???
それで思い出したけど、カウンタの質問してた人は質問投げっ放しか。
疑問は解けたのかな。
0312NAME IS NULL2009/06/09(火) 20:46:27ID:???
>>310
スレ内検索…
0313NAME IS NULL2009/06/09(火) 21:13:50ID:???
ってゆうか2ちゃんってひろゆきが作ったんじゃないの?
ひろゆきプログラマー?
0314NAME IS NULL2009/06/09(火) 21:27:22ID:???
お手軽ででかいシステムだとファイルシステムがいい
金かけまくってとことん突きつめるとDBになるがコストパフォーマンスが…
0315NAME IS NULL2009/06/09(火) 21:27:54ID:???
>スレ内検索なんかにはDBの方が有利だな。CPUに負荷もかからんし。

真性のヴァカ発見

つかRDBMS覚えたて厨房はさっさと2chをMySQLで構築してみりゃいいじゃねーか。
0316NAME IS NULL2009/06/09(火) 21:30:04ID:???
>>310
本気でそう思っているなら運営板にでもいって鯖管理でもやらせてもらえば。

UNIX板あたりの住人に「バカ発見」と言われるのがオチだろうけど。
0317NAME IS NULL2009/06/09(火) 21:41:17ID:???
DBに入れると魔法の力で計算量が激減すると思ってるのかもね。
元々の仕様がなんでそうなったのかとか、検索用のインデックスを
張るコストとか、深く考えてないんじゃないかな。
0318NAME IS NULL2009/06/09(火) 21:44:30ID:???
その理由は?
0319NAME IS NULL2009/06/09(火) 21:57:24ID:???
>>314
RDBMS相当の機能を自前で実装しようとすると、もっとお金が掛かるよ〜

2chの書き込みをわざわざSQLを使って格納するのは無駄だし、ACID特性も
必要無いし、RDBMSを使う意味は無いよね。
0320NAME IS NULL2009/06/09(火) 21:59:23ID:???
mixiはデータベース管理だお
0321NAME IS NULL2009/06/09(火) 22:01:49ID:???
2chはファイルシステム管理だお

技術要件が違うんだから適材適所
0322NAME IS NULL2009/06/09(火) 22:35:10ID:???
ファイルシステム管理とか変だろ。
ただのベタファイルだろ。
0323NAME IS NULL2009/06/09(火) 23:12:57ID:???
たいていのブログもDBじゃね?
ファイルで管理とか初心者すぎだろ
0324NAME IS NULL2009/06/09(火) 23:13:14ID:???
そのベタファイルをファイルシステムで管理してるんだよ。
ディレクトリとかキャッシュとかタイムスタンプとかアクセス権減とか、
その他のメタデータとか、実装をきちんと理解していれば変ではない。
0325NAME IS NULL2009/06/09(火) 23:42:44ID:???
ファイルでの管理の問題点は、ファイル内を検索する速度の速い遅いではなく
同じディレクトリ内に大量のファイルを置くとそのファイルを探すのに時間がかかる事。
0326NAME IS NULL2009/06/09(火) 23:46:52ID:???
>>319
?2chでもACID特性は重要だろ。
でなきゃ同時に書き込みしたらレスが混じるとか、行数制限を越えた
書き込みをした時にレスが半分だけ書かれるなどということが
起きかねない。
0327NAME IS NULL2009/06/10(水) 00:02:11ID:???
>>325
板毎にディレクトリは分かれてると思うけど、読み書き可能なスレッドだけ
なら大量というほどの事は無いでしょ。ファイル名のキャッシュもあるし。
もしファイル数が問題なら、ある程度のスレッド数毎にディレクトリを
分ければいいだけだし。

>>326
程度の問題だけど、2chはレスを書き込む度にいちいちfsync()しないと
いけないサイトではないでしょ。永続性は限定的で十分。
0328NAME IS NULL2009/06/10(水) 00:05:35ID:???
楽観的ロックという考え方もあるしな。
0329NAME IS NULL2009/06/10(水) 00:32:16ID:???
あれ?>>310は(ry
0330NAME IS NULL2009/06/10(水) 01:00:58ID:???
>>327
なぜその文脈でfsyncだの永続性だのといった単語が出てくる?
0331NAME IS NULL2009/06/10(水) 05:22:08ID:???
>>319
だから、同等の機能はそもそもアキラメル
0332NAME IS NULL2009/06/10(水) 05:23:18ID:???
ちなみにとことん突きつめると全データオンメモリとか
そんなもんw
0333NAME IS NULL2009/06/10(水) 11:28:53ID:???
>>327
だからファイルで管理する場合ディレクトリを分けなきゃいけないって事でしょ
0334NAME IS NULL2009/06/10(水) 11:29:40ID:???
スレ内検索は、全文検索だから
転地インデックスにするか、grepみたいに全部見るしかないんじゃね?
0335NAME IS NULL2009/06/10(水) 12:27:47ID:???
>>330
理解出来なかったのならACIDのDについて調べてみよう。

>>333
2chのスレ数なら>>325の問題はそもそも気にしなくて良いという事。
0336NAME IS NULL2009/06/10(水) 13:59:16ID:???
そういえば「したらば」もデータベースって聞いた事あるよ。
0337NAME IS NULL2009/06/10(水) 14:36:36ID:???
掲示板にDBを使う主な理由はこのどちらかだけど、

・データを連携させて高度な機能を実現したい
・性能を多少犠牲にしても、データの管理を丸投げしたい

「2ch」はどちらにも当て嵌まらないんだよね。
0338NAME IS NULL2009/06/10(水) 15:36:27ID:???
>>336
何処で聞いたんだ?したらばも2chとほぼ同じ仕掛けだったと思うが。
まあ、今話しているのはスレッドの管理のことで、
板自体の管理にDBを使ってる可能性は否定しない。
2chブラウザの仕組みを知ってるならスレッドの管理にDBを使ってないのは明白だろ。
0339NAME IS NULL2009/06/10(水) 15:50:01ID:???
2chがどうとか言う話になってるから便乗して質問したいのだが
sennaってどうなの?
仕組みがよく分からないのだが、効率よく分かち書きしてくれるって事?
0340NAME IS NULL2009/06/10(水) 16:29:18ID:???
N-GRAMかMeCabつかった分かち書きだから、Sennaの肝は転置インデックスでの検索でしょう
0341NAME IS NULL2009/06/10(水) 21:03:54ID:???
2ちゃんがデータベースだろうが何だろうがかまわないが
FOX★がハゲすぎてるのが気になる
0342NAME IS NULL2009/06/11(木) 15:32:27ID:???
InnoDBってどうやって読むのでしょうか?
インノデービーで合ってます?

MyISAMはマイアイサムで合ってますよね?
0343NAME IS NULL2009/06/11(木) 15:59:04ID:???
マィイサム
0344NAME IS NULL2009/06/11(木) 15:59:57ID:???
猪野出武威
0345NAME IS NULL2009/06/11(木) 16:02:49ID:???
えー、イノデブイとマイイサムなんですか‥‥。
0346NAME IS NULL2009/06/11(木) 22:13:18ID:???
イノデービーとマイイザム
0347NAME IS NULL2009/06/12(金) 01:01:19ID:???
http://www.youtube.com/watch?v=RpC1BMOZeAs

0:37 で『インノディービー』って言ってるね。
日本では『イノデービー』と呼んでる人が多いと思う。
0348NAME IS NULL2009/06/12(金) 12:08:04ID:???
mysql+phpで、例えばmysqlに
A123A456A789
って文字が格納されてるローがあって、
これからA456てのを削除して、A123A789を残したいってときには、
まずselectして、そこのローをみて、str_replaceしてupdate set
する方法しかないかな?
sql文だけで便利なものありませんか
0349NAME IS NULL2009/06/12(金) 12:11:46ID:???
と思って調べたらREPLACE関数ってのがあった
お騒がせしました
0350NAME IS NULL2009/06/14(日) 08:31:28ID:???
解決できずモヤモヤしてます。
初心者すぎてめっちゃ恥ずかしいですが、よろしくお願いします。
バージョンは 5.1.22-rc です。

TESTテーブルにある、SUUJIというカラムの構造を変更する文を書いてみました。

ALTER TABLE `TEST` CHANGE `SUUJI` `SUUJI` INT( 4 )

INT型は4byte必要と知ったので、INT(4) としてはみたものの、INT(1)でもINT(5)でもエラーが出ません。
INT(1)にしたあと、試しに数字を保存(999999.....と大きめな数を入力)してみたのですが
通常の最大値2147483647まで保存可能なようです。
INT( xx ) の指定には意味があるのでしょうか。そして、本来どう指定するのが正しいのでしょうか?
0351NAME IS NULL2009/06/14(日) 11:13:51ID:???
そりゃおめぇ、()の中はいくつの箱を用意するかの指定だからw
0352NAME IS NULL2009/06/14(日) 11:20:15ID:???
つまり、そのデータをいじったり、保管したりするには、メモリ及びディスク上に、INTであれば、(非圧縮で)4×n byte分のスペースが必要になるってことだ。
0353NAME IS NULL2009/06/14(日) 13:54:59ID:???
>>350
>本来どう指定するのが正しいのでしょうか?

最終的に何を実現したいのかな?

INT(4) は、表示する時に最低 4 桁出力するという意味です。
指定しているのは表示する桁数であって、格納するデータのサイズ
ではありません。格納するデータのサイズを指定したい場合は、
そのサイズに合わせて TINYINT, SMALLINT, MEDIUMINT, INT,
BIGINT を使い分けます。BIGINT を使うと 8bytes までの数字を
扱うことが出来ます。

http://dev.mysql.com/doc/refman/5.1/ja/numeric-types.html
0354NAME IS NULL2009/06/15(月) 00:03:12ID:???
>>353 みなさま
表示幅の設定だったとは。根本的に間違ってたんですね。
自分の場合は小さい数字をPHPで取り出す目的だったので
あまり意識しなくてもよさそうです。
ありがとうございました!
0355NAME IS NULL2009/06/15(月) 17:22:54ID:???
サーバに多数のコネクションを張ってupdateかけるデーモン書いたら
lock wait timeout exceededって怒られるようになりました。
ググったら
"他のスレッドが保持しているロックをinnodb_lock_wait_timeout秒間待っても獲得出来なかった場合に発生する。 "
と出てきました。
ここの"スレッドが保持しているロック"というのを調べる方法はないでしょうか?
webサービスなので今のところタイムアウトの秒数を増やすといった解決方法は考えていません。
また、もし似たような場面に遭遇したといったことがあればヒントをいただけませんか?

対象となるテーブルはInnoDB、テーブルのロックは見たところ無いように見えてしまっています。
0356NAME IS NULL2009/06/15(月) 19:32:08ID:???
show engine innodb statusで、待たされている様子はわかる
誰がどのロックをつかんでいるかは
MySQL 5.1+InnoDB Pluginを入れるとわかる
かなり難しいけどね
0357NAME IS NULL2009/06/15(月) 23:19:48ID:2p3b4L8V
dumpする時ロックをかけるけど、webサーバーだとそんな事してる余裕無い
そうするとwebサーバーってそもそもdumpしないのか?RAIDだけ?
0358NAME IS NULL2009/06/15(月) 23:27:05ID:???
>>357
バックアップの話なら、サイトによって様々でしょ。
例えばレプリケーションしてその先でダンプするとか、
ボリューム管理ソフトやストレージのスナップショット
機能を使うとか、色々。
0359NAME IS NULL2009/06/16(火) 01:44:07ID:???
WinXPにApacheとMySQL5.1.35を入れてphpMyAdmin起動して、
テーブル作成するため参考書CDに入ってたダンプと思われるtxtインポートしたら
--で始まるコメントの行がSyntax Errorになりますた。
試行錯誤の末、コメント行を全部消して食わせたらちゃんと食ってくれました。
最近のバージョンではコメントの書き方が変わってたりするんでしょうか?
0360NAME IS NULL2009/06/16(火) 01:50:48ID:???
追記
--のコメント行が全部エラーになっているのではないようで、
一行だけ
------------------------------------------
みたいになっている行があって、その行を消すとインポートできました。
そういう行があるとエラーになるようになったのでしょうか?
03613552009/06/16(火) 08:02:31ID:???
>>356
情報ありがとうございます、難航しそうでがーんですがちょっと調べてきます。

>>359
普通のsqlも----------を突っ込んだらコメントに扱ってくれなかったよ。
今まで気にしてなかったけど--の後にスペースが必要なのかな。
0362NAME IS NULL2009/06/16(火) 12:25:54ID:r17qwjCX
MySQL3.23で質問です。

掲示板の書き込みで、スレ用のテーブル「thre」、レス用のテーブル「res」があります。
resには、所属スレIDを表す「tid」、投稿日封tを表す「d」がDATETIME型で入っています。

ここで、最新のレス書き込みから30日以上放置されてしまったスレ(thre)を取得したいと思っています。
スレは重複がないように取り出したいです。
30日以上放置されたレスは

3456000 < UNIX_TIMESTAMP() - UNIX_TIMESTAMP(res.d)

という条件で取得可能かと思いますが、1つのクエリでスレ(thre)のリストを取得するにはどう書けば良いのでしょうか?
サブクエリが使えないので、MAX()が絞込み条件に使えず困っています。
0363NAME IS NULL2009/06/16(火) 18:24:59ID:FL2y7ITV
複数のテーブルからの検索で質問です。ググってみましたがJOINとちょっと違うような
気がするので、ここで質問させて頂きます。

以下の構成が同じ2つのテーブルがあるとします。

hoge
id name
1 one
2 two
3 three

moge
id name
4 fore
5 five

で、それそれ nameがtwoのid値を取得したい場合

select id,name from hoge where name='two'
select id.name from moge where name='two'

と2回検索しているものを1回にまとめるにはどするのでしょうか?

select id from hoge join moge where name='two'

だとエラーになりました。
0364NAME IS NULL2009/06/16(火) 22:41:56ID:???
select id,name from hoge where name='two'
union all
select id,name from moge where name='two'
0365NAME IS NULL2009/06/17(水) 16:48:50ID:dEbjvI4y
最近mysql始めまして、テーブルとか大きい表を表示するとき
http://2php.jp/mysql/show.htmlのSHOW TABLE STATUSのように
表がくずれてしまうのですが、これを見やすくする方法はあるのでしょうか?
0366NAME IS NULL2009/06/17(水) 17:19:28ID:???
show table status\G
縦型表示。
0367NAME IS NULL2009/06/18(木) 00:30:58ID:JwU+upJr
MySQLタイムマシンの開発はどうなった?
03683562009/06/18(木) 14:45:22ID:???
>>355 >>361
ロックの調査方法
http://d.hatena.ne.jp/sh2/20090618
0369NAME IS NULL2009/06/18(木) 19:14:27ID:???
>>368
wow わざわざすんません。右も左もわかってませんのでいろいろ漁って勉強させてもらいます!

ちなみに先の問題はレプリケーションの遊びしてた鯖でロックするようなselect出させるようにしてひとまず回避しました。
0370NAME IS NULL2009/06/18(木) 21:23:14ID:JwU+upJr
一つのテーブルからselectじゃなくて、そのDBの全てのテーブルからselectするのはできますか?
今はPHPで全テーブル名取得→ループで各テーブルをselectしてます。
これをSQL文だけでやってみたいです。
0371NAME IS NULL2009/06/19(金) 01:09:06ID:???
中カテゴリ、小カテゴリの一覧が入ったテーブルがあります。
ここから、中カテゴリが変わるまでitemのみを出すSQLを作りたいのですが、
PHPやPerlの中であえて行わずにMySQL用のクエリだけで実現できるのでしょうか?

識者の方、教えて頂けますと幸いです。

テーブル例)
|category|item|(列名)
|果物|りんご|
|果物|スイカ|
|動物|うし|
|草花|あじさい|
|草花|つばき|
|草花|ひまわり|

出力例)
・果物
りんご
スイカ
・動物
うし
・草花
あじさい
つばき
ひまわり
03723562009/06/19(金) 02:09:19ID:???
mysql> set @job = '';
Query OK, 0 rows affected (0.00 sec)

mysql> select concat(if (@job = job, '', @job := job), ',', ename) from emp orde
r by job, ename;
+------------------------------------------------------+
| concat(if (@job = job, '', @job := job), ',', ename) |
+------------------------------------------------------+
| analyst,ford |
| ,scott |
| clerk,adams |
| ,james |
| ,miller |
| ,smith |
| manager,blake |
| ,clark |
| ,jones |
| president,king |
| salesman,allen |
| ,martin |
| ,turner |
| ,ward |
+------------------------------------------------------+
14 rows in set (0.00 sec)

PHPやPerlでやったほうがいいと思います!
0373NAME IS NULL2009/06/19(金) 02:09:59ID:???
名前消し忘れた
0374NAME IS NULL2009/06/19(金) 02:21:47ID:???
>>370
1つのselectにするなら全テーブルが同じカラム構成じゃないといけない。
で、あらかじめテーブル一覧がわかってたらビューを作ればできるかも

create view v as
select * from t1
union
select * from t2

0375NAME IS NULL2009/06/19(金) 16:27:37ID:???
で、mySQLで掲示板作るとローパフォーマンスだとか主張していたヴァカはどうした?
0376NAME IS NULL2009/06/19(金) 16:35:35ID:???
そんなのお前だけじゃね?
0377NAME IS NULL2009/06/19(金) 17:54:46ID:ig7lHck0
最近MySQLを触り始めたばかりの初心者です。
mysqlimportを使ってDBのバックアップとデータ移行を行いたいと思います。

マニュアルによればタブ区切りテキストを読み込むことができるそうですが、
このmysqlimportで読み込める形式を出力するには、どのような方法が簡単でしょうか?



とりあえず、自分が試したのは以下の通りです。

(1) mysqldump --no-data でテーブル構造をテキストに出力
(2) テーブル構造を移行先DBに読み込ませる
(3) mysql -D database_name -B -N -e 'SELECT * FROM table_name;' でTSVテキストを出力
(4) mysqlimportでTSVを読み込み

しかしこの方法では、
(4)の際に一部レコード(1万件以上)がスキップされるなど、上手くいきませんでした。

なお、元のDBはMySQL3.23、移行先のDBは5.0です。
0378NAME IS NULL2009/06/19(金) 19:59:46ID:???
>>377
それはダメだ。
03793772009/06/19(金) 20:20:43ID:???
最初はmysqldumpでクエリ生成しようかと思ったんですが、
文字化けやら文法エラーに悩まされ、他の方法でもいけるかな?と。

>>378
ではどんな方法が良いでしょうか。
0380NAME IS NULL2009/06/19(金) 22:15:30ID:???
MySQL Migration Toolkitはどうだろう
0381NAME IS NULL2009/06/19(金) 23:16:53ID:???
>>377
dump時に出力後の文字コードを指定できる。
そのdumpした物をそのまま新しいDBに入れればいいだけ。

文字コードがおかしいから文法エラーになってるものだと思われるので
文字コードが正しければ解決。
0382NAME IS NULL2009/06/19(金) 23:34:06ID:???
>380
こんなものがあるんですね。GUIっぽいですが。
使えそうか調べてみます。

>381
--default-character-set ですか?
dumpするときに色々試してみたんですが、何度やっても出来なくて、諦めちゃってました。
0383NAME IS NULL2009/06/20(土) 12:21:45ID:???
非力なポストグレが終わりそうなのでmysqlへ移行を考えています。
SQL文の違いはあまりなくすぐに移行できるでしょうか?
0384NAME IS NULL2009/06/20(土) 12:40:24ID:???
ポスグレ終わりなん?
MySQLの勉強が終わったらポスグレを勉強しようと思ってたのに…

移行する時の注意ですが、MySQLもそれなりに個性の強いRDBMSだと思います。
SQL モードやストレージエンジンの違いは注意が必要だと思います。
ドキュメントもそこそこありますし、見通しは良いので、別の RDBMS を
使っていた経験があるなら、そんなに難しい事は無いと思います。
0385NAME IS NULL2009/06/20(土) 12:51:57ID:???
いま面倒みているシステムでPostgreSQLの調子が悪いって話じゃないの?
PostgreSQL自体はもうすぐ8.4も出るし、いたって堅調。
SQLの文法はかなり違うからすぐには移行できないよ。
0386NAME IS NULL2009/06/20(土) 12:57:41ID:???
システム移行の話ですか。それなら大変ですね…
ストアドとかサブクエリーとかバックアップとか
いろいろ悩ましいでしょうね。
0387NAME IS NULL2009/06/20(土) 16:58:14ID:???
どっちかっつーとMySQLが終わるかもしれないって感じだけどな。
0388NAME IS NULL2009/06/20(土) 17:15:31ID:???
終らくるの?
0389NAME IS NULL2009/06/20(土) 17:34:33ID:???
PostgreSQLもMySQLも直ぐに無くなったりはしないと思うが。
0390NAME IS NULL2009/06/20(土) 22:38:09ID:Uihx1bYm
サーバーPC一台でドライブ別にレプリケーションできないんですか?
MYSQLのデータだけを常にCドライブとDドライブに書き込みたい。
0391NAME IS NULL2009/06/20(土) 22:45:10ID:???
>>390

できるけど?
0392NAME IS NULL2009/06/22(月) 18:21:45ID:???
↑アホ
0393NAME IS NULL2009/06/22(月) 19:16:47ID:???
>>392

何が? 必要十分な回答だろう。
03943712009/06/23(火) 00:22:31ID:???
>>372 さん、ありがとうございます!
これでテストしてみようと思います。
0395NAME IS NULL2009/06/23(火) 08:54:26ID:???
order BY RAND()がクソ遅いんだが
他に方法ないんか?
0396NAME IS NULL2009/06/23(火) 14:01:55ID:???
最終的には実測してくれとしか言えないが
データを受け取ったプログラム側で調整することも視野に入れてみてはどうか。


ランダムで全レコードの中から1つだけ抽出する…という処理なら、
先にランダムな値を決めておいて、

 SELECT * FROM table_name WHERE id = $random_id ;

みたいな感じにするとか。
0397NAME IS NULL2009/06/25(木) 12:17:44ID:Qv13kLE3
MySQLをアクセスできる状態のままdumpすることはできるのでしょうか?
サーバを2台用意できないのでレプリケーションはできません

稼働したままバックアップ取るなら最低でもロックをして、
一時的にでもリードできないようにする必要はありますか?
0398NAME IS NULL2009/06/25(木) 13:29:30ID:???
>>397
>MySQLをアクセスできる状態のままdumpすることはできるのでしょうか?

出来るけど、お金を掛けずに整合性を保ってダンプしたいなら
ロックをする必要があります。
お金があるなら InnoDB Hot Backup を使うという手も。

>サーバを2台用意できないのでレプリケーションはできません

レプリケーションはサーバ一台でも出来る筈。
マスターとスレーブでポートを分ければ良いだけじゃない?

>稼働したままバックアップ取るなら最低でもロックをして、
>一時的にでもリードできないようにする必要はありますか?

InnoDB みたいなクラッシュリカバリを備えているストレージ
エンジンならディスクの側でスナップショットを取るという
方法もあります。これは使っている OS やストレージに依ります。

間違えてたらごめんね。
0399NAME IS NULL2009/06/26(金) 11:38:19ID:6Q9NAgpu
オウム手配犯3人写真 
平田 信(44歳)
http://www.keishicho.metro.tokyo.jp/jiken/tehai/image/hirata001.jpg
高橋克也(51歳)
http://www.keishicho.metro.tokyo.jp/jiken/tehai/image/takahashi001.jpg
菊地直子(37歳)
http://www.keishicho.metro.tokyo.jp/jiken/tehai/image/kikuchi001.jpg
0400NAME IS NULL2009/06/26(金) 12:20:09ID:???
InnoDBしかつかってないシステムなら
mysqldump --single-transactionで
オンラインバックアップ取れる
0401NAME IS NULL2009/06/26(金) 23:02:37ID:???
最近必要に迫られDBをいじっています。
で、使用しているのはwindows版のmysql4.2です。

現在100万レコードでTELNO char(11)にNORMAL インデックスを張っています。
この中から連続する6桁の数字で終るデータを探すとき

(A) TELNO Like '%000000' or TELNO Like '%111111' or 〜略〜 TELNO Like '%999999'
(B) REGEXP (000000$|111111$|〜略〜|999999$)

(A)の方がかなり早いようなんですが、チューニングが悪いんでしょうか?
それとも正規表現は処理速度が遅いんでしょうか?
0402NAME IS NULL2009/06/26(金) 23:10:13ID:???
>>399
こんなのが公表されてんだ、あいつらにとっちゃ好都合なもんだよな。探す媒体を増やすのは分かるが、どうなんかねえ
0403NAME IS NULL2009/06/27(土) 00:58:12ID:mPR9r3bl
パフォーマンスが悪くなってshow processlistしてみたら
数十秒かかってるLockedなプロセス(INSERT文、UPDATE文)がいくつもあるんですが
どのような原因が考えられr、どう対処したらよいでしょうか?
なるべくKILLはしたくないです
0404NAME IS NULL2009/06/27(土) 09:11:35ID:???
>>401
インデックスが効くのは完全一致か前方一致検索だけ。
つまり LIKE '000000%' ならインデックスが効くけど
LIKE '%000000' はインデックスが効かない。
末尾6桁だけからなる新しいカラムを追加しよう。

>>403
UPDATE文が効率が悪くなっている可能性がある。
UPDATE文をSELECT文に書き換えてEXPLAINを取ってみる。
04054032009/06/27(土) 12:59:01ID:mPR9r3bl
>>404
EXPLAINしてみました。
UPDATEは単純で対象は1テーブルのいつも同じカラムで
タプルの特定はPRIMARY KEYしか使っていないのですが
急に効率がわるくなることはあるのでしょうか?

ただしレコード数は数千万と大きいです。
0406NAME IS NULL2009/06/27(土) 16:37:33ID:???
>>403
全然つかっていないのに無意味にINDEX張っているとかいう可能性は?
0407NAME IS NULL2009/06/27(土) 17:04:43ID:???
>>403
KILLより再起動が基本だね。
04084032009/06/27(土) 17:33:08ID:mPR9r3bl
インデックスはカラムA B C D Eに対して
PRIMARY A B C
INDEX1 A D
INDEX2 A E
という感じで必要で張っています。

考えてみたら、普段はほとんどINSERTしかしてないところを
パフォーマンスが落ちる前に大量のUPDATEを開始したので
それが原因かもしれません。
0409NAME IS NULL2009/06/28(日) 13:14:47ID:6HSkCWFH
my.iniでdataのdirを複数記述してみたけどエラーはでませんでした。
でも後に記述した方にしか書き込まれていません。
複数のドライブに並列に書き込ませたいのですがそれはMYSQLだけでできますか?
0410NAME IS NULL2009/06/28(日) 13:30:52ID:???
>>409
ヒント: パーティション
0411NAME IS NULL2009/06/28(日) 15:37:55ID:6HSkCWFH
>>410
パーティションしてます。
一つのドライブをCとDに分けても
別々のドライブCとEに指定しても
並列して書き込めませんでした。
エラーが出ないならできるのかと思ったのですが。
04124012009/06/29(月) 22:12:20ID:???
>>404
週末留守にしていたので大変遅れました。
後方一致ってインデックス効かないんですね。
別切り出ししてやってみたいと思います。
0413NAME IS NULL2009/06/30(火) 00:27:55ID:???
>>403
Locked じゃなくて、長時間かかっているクエリが原因
0414NAME IS NULL2009/06/30(火) 17:49:30ID:???
datadirは一つだけど、その中のサブディレクトリを
別のドライブに移動することができるよ
0415NAME IS NULL2009/06/30(火) 22:54:48ID:???
MySQLの本いろいろ見たんですが、解らん事あるのでお知恵をください。

データをインポートする場合です。
csv形式固定長で1レコード毎に改行コードが入る場合はすんなり行くのですが、これ
が、未改行の場合のインポートの仕方が解らないのです。

別会社のシステムで吐き出すため、改行入れてくれとも言えず、仕方ないので自前で
改行挿入するプログラムを噛ませて取り込んでいるのですが、そのまま出来ないもの
かと思いまして。

こう定義すれば出来るとか、それは出来ないとか教えてもらえれば幸いです。
0416NAME IS NULL2009/07/01(水) 00:46:51ID:???
>>415
レコードの区切り文字が改行コードでない?
じゃあレコードは何で区切られてるの?
0417NAME IS NULL2009/07/01(水) 02:30:31ID:???
だからカラム数で区切られてないんじゃないの?
0418NAME IS NULL2009/07/01(水) 02:52:57ID:???
なんで、だからなのかな。
汎用機からエクスポートされたデータでパディング付きの固定レコード長だったり、
単に LF 以外の文字を改行マークとしている事を改行コードが無いと言ってるだけかもよ。

後者なら LINES TERMINATED BY で済むかもしれないけど、前者なら…
0419NAME IS NULL2009/07/01(水) 10:52:22ID:nypSdZ/x
唐突にすみません。
MySQLで質問です。
ありがちなLAMP構成でMySQLは4.1.22、MASTER-SLAVEで構成されてます。
PHPからスレーブにSELECT文を投げつけたんですが、あるプロセス一つだけ
消せずに困ってます。
プロセスリストを見ると、件のプロセスはpreparingのまま動いていないようで
それ自体をKILLしてもまた新たにプロセスが再開され、またpreparingで止まって
しまいます。
この場合、プロセス自体を完全に停止させる方法ってあるんでしょうか?
0420NAME IS NULL2009/07/01(水) 19:37:11ID:x7PEdshB
MySQLはindexを同時に1つしか使わないと聞いたのですが、たとえば
「where a=? && b=?」
なら index(a,b) でいいと思うのですが、

「where (a=?||b=?)」
といった場合にindexを効率的に付けるにはどのようにしたらよいのでしょうか?

index(a), index(b) とするのがいいのでしょうか?

よろしくお願いします。
04214152009/07/01(水) 23:11:09ID:???
>>416-418
舌足らずで申し訳ないです。
例えば、以下のような感じです。

項目A char(10)
項目B char(15)
項目C char(05)
項目D char(40)

だとすると

ホスト出力ファイルは全ての項目が固定長で
項目A,項目B,項目C,項目D,項目A,項目B,項目C,項目D,〜略〜項目A,項目B,項目C,項目D[EOF]

コレを自前で
項目A,項目B,項目C,項目D\n
項目A,項目B,項目C,項目D\n
項目A,項目B,項目C,項目D\n

と変換して取り込んでいるんです。
これでイメージつかめますか?
0422NAME IS NULL2009/07/02(木) 11:33:43ID:???
>>420
うまくいけばindex mergeするかもしれないけど
aとbにそれぞれindexつけて
select ... where a = ?
union
select ... where b = ?
とするのはどう。
OracleでもPostgreSQLでもこの手のクエリは苦手
0423NAME IS NULL2009/07/02(木) 18:54:37ID:R3n1Iv0v
質問です。
MySQLのストアドプロシージャで
下記のようなクエリを実行しようと思っております。

 DECLARE _tblName VARCHAR(12);
 SET _tblName = "testtbl";
 SELECT `hoge` INTO @res FROM _tblName WHERE `hogeid` = 1;
 INSERT INTO `resulttbl`(res) VALUES (@res);
 
このようにした場合、ストアド自体はCREATEされるのですが
_tblName自体をテーブルの名前として認識してしまい、
実行時に「_tblNameというテーブルが無い」というエラーで停止します。

 SET @tblName = "testtbl";
 SELECT `hoge` INTO @res FROM @tblName WHERE `hogeid` = 1;
 INSERT INTO `resulttbl`(res) VALUES (@res);
 
このようにした場合
「' WHERE `hogeid` = 1; ' の周辺でsyntax error」のエラーが出て
ストアド自体がCREATEできません。

要は変数にテーブル名を定義し、それをクエリで使いたいということなのですが
他に何か方法はありますでしょうか?
0424NAME IS NULL2009/07/02(木) 23:59:25ID:zf5eYLXR
>>422
ありがとうございます。なかなか難しいですね。
unionという手もあるんですね。有難う御座います。試してみます。
0425NAME IS NULL2009/07/03(金) 08:58:52ID:bnHp31se
>>422

PostgreSQLはbitmap scanが実装されたんでORでも速い。

試してみ。MySQLよりRDBとしてかなり良いぞ。

0426NAME IS NULL2009/07/04(土) 23:14:23ID:???
MySQL4.1-->5.0にして戸惑ったんで質問です。
テーブルaにカラム1〜9があると仮定します。
MySQL4.1では、カラム1〜7のみデータをinport出来ていたのですが、
5.0だとカラム8〜9も追加したカラム1〜9からなるデータでないとinport
できませんでした。
仕様変わったんですか?
まぁ正確なデータを作成していないのが悪いんですが、ファイル作成
プログラム作り直したりと、かなり不便ですねぇ。
0427NAME IS NULL2009/07/05(日) 16:22:01ID:???
>>426
カラム名を1..7だけ指定してimportすれば済む話じゃね?
0428NAME IS NULL2009/07/05(日) 22:17:09ID:???
>>426
カラム名指定でインポートなんて出来るんですか(知らんかったです
web徘徊してやり方覚えてきます。
0429NAME IS NULL2009/07/05(日) 22:18:01ID:???
レス番、間違った。
>>427だった、自分にresしてどうするw
0430NAME IS NULL2009/07/06(月) 17:02:45ID:???
キーがユニークキーがひとつのとき、
fld1 char(10) uniqueと書くのと、
primary key(fld1)と書くので
何か性能面等で違いは出ますか?
0431NAME IS NULL2009/07/08(水) 06:19:53ID:???
>>430
InnoDBならPrimary Keyの方が速い

これを読もう
http://www.mysqlconf.com/mysql2009/public/schedule/detail/6661
0432NAME IS NULL2009/07/08(水) 21:59:33ID:???
上でカラム指定インポートの質問したものですが、追加でまた御教示ください。
邪道かもしれませんが、各カラムが日本語名となっております。
上記のインポートの際、
LOAD DATA INFILE "sample.txt" INTO TABLE sample_table (`カラム1`,`カラム2`,〜略〜,`カラム7`)
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n';
としてもエラーになります。
カラム指定の場合、日本語表記カラムはNGなんでしょうか?
0433NAME IS NULL2009/07/09(木) 20:58:06ID:???
my.cnfでメモリ周りのチューニングを行おうと思ってます。
現在InnoDBのみ利用しています。
この場合key_buffer_sizeの項目はInnoDBでは全く利用していないということで最小値に設定してまってもいいのでしょうか。
他の部分で少しでも利用分を増やしたいと思っています。
よろしくお願いします。
0434NAME IS NULL2009/07/09(木) 21:20:59ID:???
>>432
エラー内容とか、テーブルのカラムのデータ型とか書いた方がいいと思うよ。
「エラーになった」だけじゃ情報不足かと。
0435NAME IS NULL2009/07/10(金) 06:44:47ID:???
>>433
クエリで内部的にMyISAMのテーブルを作ることがある
1MBぐらいは残しておいたほうがいいよ
0436NAME IS NULL2009/07/10(金) 09:16:01ID:???
ある意味どうでもいい事かもしれませんが、ユニークな項目としてauto incrementを使う事ってあるのでしょうか?
個人的にauto incrementは好きではないのですが・・・。
0437NAME IS NULL2009/07/10(金) 19:41:26ID:???
>>436
>auto incrementは好きではない
気持ちはわかる。
勝手に数字をふられるのが嫌なんだろ。
オレも最初はそうだった。

しかし、今では望んで使う。
レコード固有の一意な識別子としては
とても便利だからだ。

理由や理想じゃない。
我慢してちょっと使ってみろ。
0438NAME IS NULL2009/07/10(金) 20:02:57ID:???
明示的に nextval か auto increment か、という話じゃないのけ?
俺はinsertした後に「さっきの値」を取得するという操作がなんとなく
気に入らない。
0439NAME IS NULL2009/07/10(金) 20:05:48ID:???
sequenceも欲しい
0440NAME IS NULL2009/07/10(金) 22:18:33ID:???
>>435
ありがとうございます!
予期せぬときに影響出そうですね。
多少多めに残しておくことにします。
0441NAME IS NULL2009/07/10(金) 22:43:40ID:???
ようじょ
0442NAME IS NULL2009/07/10(金) 23:14:05ID:???
>>434
内容無さ杉ですね、すみません。
以下のようなテストをしてみました。

使用DBはwindows版の5.0.83-community-nt MySQL Community Editionです。

「test_001」dbに、以下のコマンドでテーブルを作成。

CREATE TABLE `test_tbl` (
`基準日` int(8) NOT NULL default '0',
`業営所コード` int(3) NOT NULL default '0',
`営業所名` varchar(10) default NULL,
PRIMARY KEY (`基準日`,`業営所コード`)
) ENGINE=InnoDB DEFAULT CHARSET=sjis;

dドライブ直下に、以下の内容のtest.csv(基準日、営業所コードのみであり、営業所名はないデータで3レコード)を作成。

20080601,101
20080602,102
20080603,101

以下のコマンドにてインポート処理実施

LOAD DATA INFILE 'd:/test.csv' INTO TABLE test_tbl (`基準日`,`営業所コード`)
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\r\n';

で以下のエラーが発生。

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'FIELDS TERMINATED BY ',' LINES TERMINATED BY '\r\n'' at line 2

という具合です。
MySQLのHPを見るとSQL文は良い様に思えるのですが、どこか間違っているのでしょうか?

0443NAME IS NULL2009/07/11(土) 06:18:03ID:???
>>442
テーブルのカラム名が"業営所コード"になってるのはタイプミス?

CSVインポートのSQLは"営業所コード"になってるみたいだけど。
04444432009/07/11(土) 06:49:21ID:???
>>442
以下のSQLで行けましたよ。ちなみに環境はwindowsの5.0.82。

LOAD DATA INFILE 'D:/test.csv'
INTO TABLE test_tbl
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\r\n'
(`基準日`,`営業所コード`)
0445NAME IS NULL2009/07/11(土) 09:26:20ID:???
どうタイプミスをしたら業営所になるんだろ(*´д`*)
0446NAME IS NULL2009/07/11(土) 09:35:36ID:???
>>445
そこかよw
04474422009/07/11(土) 22:54:02ID:???
大変申し訳ないです、全く気付きませんでした。
月曜会社行ったら確認してみます(大汗
0448NAME IS NULL2009/07/13(月) 12:39:24ID:5irjkhq8
REPAIR TABLE してる間に更新していいの?
0449NAME IS NULL2009/07/13(月) 12:57:25ID:???
writeロックかかってるから、待たされるだけだろ。
04504422009/07/13(月) 22:21:37ID:???
無事やりたい事が出来ました。
カラム指定って一番最後でないと駄目みたいですね、>>443さんありがとう。

あ、カラム名が"業営所コード"って具合になってた原因は、navicat for mysql使ってるんですが、
これでテーブル定義すると結構な確立でなるんですよね。
普段はエディタでゴリゴリ書いちゃうんであまり気にしてませんでした(汗
0451NAME IS NULL2009/07/13(月) 23:54:48ID:pM3FPDeT
MySQLの文字コードの事なんですが『\(全角のバックスラッシュ)』の表示が正しくできません。

EUCのサイトのフォームからMySQLに入れ、
これをEUCで取り出すと半角の\になってしまいます。
MySQLのデフォルト文字コードはUTF8で、UTF8で取り出しても同様です。
ただコマンドプロンプト上でSJISで取り出した時はちゃんとバックスラッシュになるので、これをEUCでバックスラッシュにできないですか?

入出力時はちゃんとset names ujisは使ってますし、入れるときもエスケープ処理してます。
0452NAME IS NULL2009/07/14(火) 00:43:12ID:L0cdOLHt
すみません、他愛無い質問なんですが
日記のプログラムを書くとして、画像のアップロードも各日ごとに1つファイルをアップできるとします
そのとき、登録情報を入れるテーブルに fileUpload みたいなカラムを作って
ファイルのアップがあれば1入れる、みたいにした方が良いでしょうか?
現状はスクリプト側で file_exists($file) みたいにして格納済みファイルのパスを確認してますが、、
汎用性を考えたら専用のカラムに明示した方が良いんでしょうか
0453NAME IS NULL2009/07/14(火) 06:57:35ID:???
>>451-452
ここの住人はプログラムに関してはド素人なので他で聞いた方がいいと思います。
0454NAME IS NULL2009/07/14(火) 08:30:37ID:???
アップロードファイルのテーブルを作って、
日記のID, パスとかにすれば、
1日1ファイルじゃなくても大丈夫だぞ。

そのテーブルに、特定の日記に紐付くレコードがあれば
アップロードされたファイルがあるってことになる。
0455NAME IS NULL2009/07/14(火) 10:54:56ID:L0cdOLHt
>>454
その場合、
日記の本文を登録するテーブルへのinsert処理と
uploadファイルの情報を専用のテーブルに登録する処理をトランザクションで
まとめて実行する、って考えで良いですか?
本文の登録のmysql_insert_id();を途中で取得して、画像情報テーブルに紐付け要素として
入れる感じ?
0456NAME IS NULL2009/07/14(火) 12:07:15ID:???
>>453
マジで?プログラム使わずにMySQLだけだと出来る事が限られない?
0457NAME IS NULL2009/07/14(火) 13:17:51ID:???
>>456
データ出し入れするだけなら初級程度のプログラムで十分ですから。
0458NAME IS NULL2009/07/14(火) 14:51:58ID:???
MySQLが5.1になったらしいからインストールしてみたらイルカの写真が入ってただけだったわ。
04594512009/07/14(火) 15:29:51ID:Luc8mMqT
解決しました。
テーブルのコードをutf8からEUCに変更しただけで\が\にならなくなりました。
つまりクライアント側の文字コードとDBの文字コードは同じにしなければいけないってことだと思うのですが
ネット上だと必ずしもDB側のコードと同じコードでPOSTされるわけではないので困ります。

■以前の流れ■
EUCでPOST→set names ujis→utf8のDBに格納
クエリ(select)→set names ujis→EUCでprint

↑これだと\が\になる(他の文字は問題ない)

utf8で保存すると平仮名で検索してカタカナも表示できたり便利だったのですが、やっぱり全てのテーブルをEUCにするのが一番良いのでしょうか?
他に解決方法があれば教えて下さい。
04604512009/07/14(火) 16:40:28ID:???
さらに実験してみました。

UTF8のページでpost → set names utf8 → UTF8のDBに格納
select → set names utf8 → UTF8のページでprint

↑上記においても\が\に変換される事はありませんでした。
文字コードが同じだから当然といえば当然ですが、
SJISとutf8、SJISとujisとの変換も問題ありませんでした。

よってこれはutf8とEUCの間における変換のバグなのでは?
バグでないとしても利便性が悪いので改善してほしいです。
この様な要望はどこに出せばいいのでしょうか?

参考までに
UTF8のページでpost → set names utf8 → UTF8のDBに格納
select → set names ujis → EUCのページでprint
だと\は?になりました。

それ以外の文字は全く問題ありませんので普段DBに\を入れない人は気が付かないのではないですか?
試しに自分のDBに\をぶち込んでみて下さい。

※使用したDBは5.0と5.1です。
0461NAME IS NULL2009/07/14(火) 18:18:44ID:???
相変わらずバグだらけだなww
遠慮無くポスグレ使えよ
0462NAME IS NULL2009/07/14(火) 19:01:33ID:???
確かにポストグレはバグ少ないよな
0463NAME IS NULL2009/07/14(火) 19:26:41ID:???
なんで PostgreSQL 人気がないのか分からない。
速度も MySQL に勝つくらいになったし、いい本もあるし。
0464NAME IS NULL2009/07/14(火) 20:35:58ID:???
っていうかポストグレだってきっと潜在バグあるだろーか。
mysqlだけが悪いように書くなや。
0465NAME IS NULL2009/07/14(火) 21:00:15ID:???
お金払えばサポートしてくれるよw
0466NAME IS NULL2009/07/14(火) 21:00:33ID:???
わかったからウンコグレ厨は氏ねよ。
0467NAME IS NULL2009/07/14(火) 21:10:18ID:???
>>453
文字コードの話をプログラミングだと思い込むようなド素人はそんなにいないから安心しれ。
0468NAME IS NULL2009/07/14(火) 21:45:55ID:???
これWindowsの話だよね?
俺もさっきやってみたら確かに同じ現象が出たw
バグかどうか知らんがユーザーの会のQ&Aにも無い事象だから
今まで誰も気が付かなかったんだろうねw
多分MySQL側がWindowsに配慮して文字コードを変える時にわざわざ\にしてるんだと思うけど。
0469NAME IS NULL2009/07/14(火) 22:49:18ID:???
MYSQL撃沈決定!
0470NAME IS NULL2009/07/14(火) 23:16:59ID:f5HzR+ae
神様お助けを。。

トップページを表示する際に、mysqlを使用してユーザー情報の「挿入」「更新」
をしているんだけど、アクセス数がふえるとタイムアウトしてしまう。

MySQLのログを調べたところ、
+--------+----------------------+-----------------+-------------+---------+------+----------+--------------------------------------------------------------------------------------------------------------
| Id | User | Host | db | Command | Time | State | Info
+--------+----------------------+-----------------+-------------+---------+------+----------+--------------------------------------------------------------------------------------------------------------
| 256912 | ****** | localhost | *********** | Query | 33 | Locked | insert into **** ....
| 256913 | ****** | localhost | *********** | Query | 33 | Locked | update .....

のような感じで、どうやらSQL文がロックされていることが原因。

しかし、
$query="LOCK TABLES ほにゃらら WRITE";
mysql_query($query,$dh);
とかいう記述で、データベースをロックはしていない。

だれか解決策をお願いします。
神様
0471NAME IS NULL2009/07/14(火) 23:17:54ID:???
↑アホ
0472NAME IS NULL2009/07/14(火) 23:25:10ID:???
リファレンスより
> LOCK TABLES は、現在のスレッドに対してベース テーブル (ビュー以外) をロックします。
0473NAME IS NULL2009/07/14(火) 23:32:18ID:???
↑アホ死ね
0474NAME IS NULL2009/07/14(火) 23:33:36ID:f5HzR+ae
>>471
アホ何でここで聞いてます。
解決策がわかるのなら、教えていただけると非常にうれしい。

>>472
ありがとう。
LOCK TABLES は使用してません。

どなたか分かりやすく教えて下さると非常に助かるm(_ _)m
0475NAME IS NULL2009/07/14(火) 23:34:18ID:f5HzR+ae
>>473
死なす前にアドバイスを。。。
0476NAME IS NULL2009/07/14(火) 23:51:35ID:???
↑氏ねボケ
0477NAME IS NULL2009/07/15(水) 00:02:05ID:kLERGQuj
>>476
氏んでほしいんですね。


神様お助けを。。

トップページを表示する際に、mysqlを使用してユーザー情報の「挿入」「更新」
をしているんだけど、アクセス数がふえるとタイムアウトしてしまう。

MySQLのログを調べたところ、
+--------+----------------------+-----------------+-------------+---------+------+----------+--------------------------------------------------------------------------------------------------------------
| Id | User | Host | db | Command | Time | State | Info
+--------+----------------------+-----------------+-------------+---------+------+----------+--------------------------------------------------------------------------------------------------------------
| 256912 | ****** | localhost | *********** | Query | 33 | Locked | insert into **** ....
| 256913 | ****** | localhost | *********** | Query | 33 | Locked | update .....

のような感じで、どうやらSQL文がロックされていることが原因。

しかし、
$query="LOCK TABLES ほにゃらら WRITE";
mysql_query($query,$dh);
とかいう記述で、データベースをロックはしていない。

だれか解決策をお願いします。
神様

連投すいません。
0478NAME IS NULL2009/07/15(水) 00:32:10ID:???
>>451
その場合EUC-JPとしてujisじゃなくてeucjpmsを使う。
MySQLとしては4年前に対策済み。

このへんの記事をどうぞ。
http://www.mysql.gr.jp/mysqlml/mysql/msg/12442
0479NAME IS NULL2009/07/15(水) 00:37:14ID:???
>>477
情報小出しがよくない。
・対象のテーブルについてshow create table XXX\G
・例示しているshow processlist;を省略しないで全部書く
・my.cnfもさらす
話はそれから。
0480NAME IS NULL2009/07/15(水) 00:38:44ID:???
だからポスグレ使えばいいじゃん。こんなクソみたいなDBにいつまでもしがみつくなって。
0481NAME IS NULL2009/07/15(水) 01:10:17ID:DEAJvIl0
バカ共晒し上げ
0482NAME IS NULL2009/07/15(水) 03:34:49ID:???
>>477
情報があまりにも小出しで憶測でしか回答できないんだけど
要するにユーザーエージェントとかIPアドレスとかリファラを取得してそれをDBに入れたいって事だよね。
この流れの中に著しく遅くなる原因があるとすれば
思い当たるのはIPアドレスからホスト名を得る場合に若干遅くなるので
それが溜まって遅延するのかも。

それにしてもPHPがタイムアウトする程遅いというのは若干異常。
マイクロタイム関数とかでどの処理に時間がかかってるのかを調べた方がいい。
MYSQL側は、一つのスクリプトで不必要にコネクトやクローズ繰り返したりせず
テーブル設計も不必要に大きくせず、不必要なクエリを送ったりしなければ
デフォルトで十分速いので大丈夫。
0483NAME IS NULL2009/07/15(水) 05:41:32ID:kZc9K5py
>>479
有難うございます。
+--------+----------------------+-----------------+-------------+---------+------+----------+---------------------------------------------------------------------------------------------------------------------------------
| Id | User | Host | db | Command | Time | State | Info
+--------+----------------------+-----------------+-------------+---------+------+----------+----------------------------------------------------------------------------------------------------------------------------------
| 256912 | ****** | localhost | *********** | Query | 33 | Locked | insert into user (個体識別,初めての時間,最新の時間,UA,訪問履歴,どこから来たか) values ('XXXX','1247543954','1247543954','DoCoMo....','1247543954idx,','5')
| 256913 | ****** | localhost | *********** | Query | 33 | Locked | insert into user (個体識別,初めての時間,最新の時間,UA,訪問履歴,どこから来たか) values ('YYYY','1247543954','1247543954','DoCoMo....','1247543954idx,','5')
| 256914 | ****** | localhost | *********** | Query | 33 | Locked | update user set 最新の時間='1247543954',comedate='1247543914idx,1247543945idx,' where 個体識別'xxxxxxx'
| 256915 | ****** | localhost | *********** | Query | 33 | Locked | update user set 最新の時間='1247543954',comedate='1247543914idx,1247543945idx,' where 個体識別'yyyyyyy'
そのほかは用意できしだい、載せます。




>>482
有難うございます。

>要するにユーザーエージェントとかIPアドレスとかリファラを取得してそれをDBに入れたいって事だよね。
そのとおりです。
携帯サイトなんですけど、ユーザー情報の種類は情報は
・個体識別番号
・機種名(UA)
・初めて訪問したUNIX時間
・最新のindexに訪問したUNIX時間
・訪問履歴、いつどこのページに訪問したか(時間index.php,時間main.php、時間out.php......)
・どこからきたユーザーか
です。ですからトップページへアクセスすると必ず
select->insert
もしくは
select->update
という流れが発生します。


>思い当たるのはIPアドレスからホスト名を得る場合に若干遅くなるので
それが溜まって遅延するのかも。
htacssessでIP制限をかけたうえで、UAでDoCoMoなどは判断しております。
よってIPアドレスからホスト名得るような記述はありません。

>それにしてもPHPがタイムアウトする程遅いというのは若干異常。 マイクロタイム関数とかでどの処理に時間がかかってるのかを調べた方がいい。
自分も異常だと思います。
マイクロタイム関数ではないんですけど、やはりSQL履歴をみると、
多数の処理がロックされてしまっているのが原因のようです。

解決策がわかりません。。。。。
たしかにそこそこアクセスはあるんですけど、
感覚的にタイムアウトしてしまうほどの処理の量はありえないと思うんですが。。。。
0484NAME IS NULL2009/07/15(水) 09:29:44ID:???
>>483
insertもupdateも原則爆速なのでselectの方法に問題があるのかも。
PHP側の処理で時間がかかりDBがその間待たされてる可能性もあるのでどっちに原因があるのかは調べた方がいいけど。
0485NAME IS NULL2009/07/15(水) 10:13:38ID:mKEXFaxl
>>484

selectに関しては、

select 初めての訪問時間,最新の訪問時間,訪問履歴 from user where 個体識別='そのアクセスの個体識別'

というように毎回発行し、

結果行数が一行(訪問したことがある)の場合はupdate,
結果行数が0行(初めての訪問)の場合はinsert

というようにSQL文を発行しています。

SQLクエリ自体がロックされている(待たされている)ので、
SQL文を受ける側、DB側、に問題があるかと思います。
0486NAME IS NULL2009/07/15(水) 10:20:26ID:mKEXFaxl
補足情報です。
現在テーブル「user」は約2万行のデータが入っております。
しかしインデックスは作成していません。(特に何もしてません)
それが原因でしょうか??

ランタイム情報 を見たところ、

Handler_read_rnd_next 1,526 M
データファイルの次の行を読み込んだリクエストの数。この値が高いのはテーブルスキャンを大量に実行しているためです。一般にこれはテーブルのインデックスが不適切か、クエリがインデックスを利用するように書かれていないことを意味します

と記述があります。
1,526 Mというのは多い方なのでしょうか??
0487NAME IS NULL2009/07/15(水) 10:30:33ID:???
多いね。
このスレのみんなが質問に答える気がなくなるぐらい多いよ!
0488NAME IS NULL2009/07/15(水) 10:42:21ID:???
>>486
Σ(゜д゜;)
はっきり言うと「お前がデータベース触るのはヤメロ」と言いたくなる数字
0489NAME IS NULL2009/07/15(水) 10:43:50ID:mKEXFaxl
インデックスを作成したところ、あっさりと解決できました。
お騒がせしました、感謝します^^
0490NAME IS NULL2009/07/15(水) 11:37:21ID:???
時期が時期だし米ではMyQL(マイクェル)みたいな新DB立ち上がったりしてないのかね。
正直選択に困る時代になったなあ…
ポスグレはレンサバが対応してないことも多いし。
0491NAME IS NULL2009/07/15(水) 11:53:59ID:???
MySQL に ISAM や InnoDB のように PostgreSQL があれば…
0492NAME IS NULL2009/07/15(水) 12:19:59ID:???
>>478
ついでに言っとくと、文字コード指定で、
sjisとujisは使わないほうがいい。
かわりに、cp932とeucjpmsを使うべき。

ちなみに、そうなった原因は、ユニコード
コンソーシアムが非常識だったせい。
MySQL ABはあんまり悪くない。
0493NAME IS NULL2009/07/15(水) 12:41:08ID:???
>>490
MariaDBつくっとるよ
http://www.atmarkit.co.jp/news/200905/14/mysql.html
0494NAME IS NULL2009/07/15(水) 20:30:30ID:???
で、まだMySQLはsun製って事になってるけどいつ頃にOracle製って表記されるようになる予定なの?
0495NAME IS NULL2009/07/16(木) 07:32:31ID:???
>>455
そうだね。トランザクションでやることになると思う。
ただ、日記のIDを通番とかじゃなくて、先にIDがわかる方法(日付/時間ベースで振るとか)なら、
先にuploadファイルの方をINSERTしてから、日記INSERTでも良さそうだけど、
途中でエラーが起こることを考えたら、やっぱりトランザクションにした方がいいと思う。
0496NAME IS NULL2009/07/16(木) 07:41:48ID:???
バカの一つ覚えみたいにトランザクションを連呼する奴多いよな
0497NAME IS NULL2009/07/16(木) 07:56:25ID:???
>>489
ポスグレは賢いからインデックス使わなくても速い
乗り換えるなら今だよ
0498NAME IS NULL2009/07/16(木) 09:54:56ID:Vmzny5Cb
select * from sampleTBL where (`name1` like '%山田%' or `name2` like '%山田%') and `hobby` like '%野球%' and `loginLevel` = '1'

上記のクエリ文がうまく動きません
・名前(山田)がカラムname1,name2のいずれかに含まれる
・趣味(野球)がカラムhobbyの中に含まれる。「草野球」でもOK
・loginLevelは必ず1
という抽出条件で書いたつもりなんですが…
ご意見よろしくお願いします
0499NAME IS NULL2009/07/16(木) 12:57:21ID:???
>>497
どんな魔法が使われているんですか?
0500NAME IS NULL2009/07/16(木) 13:41:45ID:???
>>498
エラーメッセージは?
0501NAME IS NULL2009/07/16(木) 14:04:15ID:???
>>499
根本的な出来が違うんだよ。
0502NAME IS NULL2009/07/16(木) 14:07:51ID:???
ポスグレ?ポストグレ?
0503NAME IS NULL2009/07/16(木) 14:39:58ID:???
>>498
以下のバグにあたってないか確認してみて。
Bug #32510
LIKE search fails with indexed 'eucjpms' and 'ujis' char column
http://bugs.mysql.com/bug.php?id=32510
0504NAME IS NULL2009/07/16(木) 15:42:09ID:Vmzny5Cb
>>500,503
どうもありがとうございます

select * from sampleTBL where (`name1` like '%山田%' or `name2` like '%山田%') and (`hobby` like '%野球%') and `loginLevel` = '1'
としたら正常に動きました
複数条件で使う場合のlike節は()でくくらなきゃだめみたい?です
もうすこし勉強します。ありがとうございました
0505NAME IS NULL2009/07/16(木) 17:27:07ID:???
スレ読んでて疑問に思ったんだが、NECやIBMの拡張文字を導入した際
UJISをバージョンアップするわけではなく
eucjpmsとして別に作りUJISを残した理由って何なんだ?
0506NAME IS NULL2009/07/16(木) 19:15:04ID:???
>>505
文字を追加しただけじゃないから。
変換表も一部変更されてるはず。

あのsjis/ujisで満足するやつはいないと
思うが、それでもリリースしたからには
後方互換性が必要なんだろ。
0507NAME IS NULL2009/07/16(木) 19:17:14ID:???
>>501
ぜひ違いを教えてください。
0508NAME IS NULL2009/07/16(木) 22:32:28ID:???
utf8で満足してる私はひよっこですか
0509NAME IS NULL2009/07/17(金) 08:19:12ID:???
ひょっとこ
0510NAME IS NULL2009/07/17(金) 08:56:40ID:???
日本語使うならutf8が一番バグが少ない
オススメ
0511NAME IS NULL2009/07/17(金) 11:11:46ID:???
utf8 だと「名前」や「一言メッセージ」に何バイト入れるか、が難しいよね。

euc-jp だといわゆる全角が 2byte だから、800 文字なら 1600byte でよかったけど。

みんなはどうしてるの?
0512NAME IS NULL2009/07/17(金) 12:27:12ID:???
ユーザにバイト数を数えさせるのが間違いなんだと思う
EUC-JPには3バイト文字だってあるんだし
今後は全部文字数で。
0513NAME IS NULL2009/07/17(金) 12:29:54ID:???
Twitterも140バイトじゃなくて140文字になってる
0514NAME IS NULL2009/07/17(金) 13:02:47ID:???
varchar
05155112009/07/17(金) 13:05:15ID:???
ありがと。そうですね。文字数ですね。

varchar のバイト指定はどうしているの?
text を使うということ?
0516NAME IS NULL2009/07/17(金) 15:23:59ID:???
varcharって文字数指定になってなかったっけ?
0517NAME IS NULL2009/07/17(金) 16:33:52ID:???
varcharも文字数だよ。MySQL4.1以降。
0518NAME IS NULL2009/07/17(金) 17:29:28ID:???
そうだったのか!ありがとうございます。
0519NAME IS NULL2009/07/17(金) 18:40:58ID:???
少し余裕あるくらいのバイト数にしてる<varchar
0520NAME IS NULL2009/07/17(金) 19:47:22ID:???
utf8は1文字あたり3バイト必要。
また、いずれ4バイトに修正される予定。
0521NAME IS NULL2009/07/17(金) 20:13:30ID:???
Windowsのエクスプローラで、MySQLを止めずにdatadirのファイルを全部別のドライブにコピーしたいんだけど
コピー中もDBが更新されてても、コピー完了時に双方のファイルは完全に一致する?
0522NAME IS NULL2009/07/17(金) 21:46:32ID:???
>>521
だめ
一致しないどころかコピー先のDBは壊れてるぞ
0523NAME IS NULL2009/07/17(金) 22:23:12ID:???
聞かなきゃわからんことか?
0524NAME IS NULL2009/07/17(金) 23:38:20ID:???
まあ確かに
0525NAME IS NULL2009/07/18(土) 02:48:30ID:???
MySQLのパスワードを忘れた時はもう一度インストールしなおせばいいんだよね?
0526NAME IS NULL2009/07/18(土) 03:29:47ID:???
mysqlデータベースが残ったままだとインストールしなおしてもだめ
skip-grant-tablesでぐぐれ
0527NAME IS NULL2009/07/18(土) 11:33:43ID:kUbe0jQy
教えてください。

SELECT * FROM table where column1 = '$a' AND column2 = '$b'


PHPで検索する時に$bに文字が入っていたらcolumn1とcolumn2から探し
入っていなければcolumn1だけから探したいのですが
ANDじゃなくORだと検索結果が変わってしまいます。
かといってselectの文を$bが入っている時用といない時用で2つも書くのもごちゃごちゃするので
一行で書く方法って無いですか?
0528NAME IS NULL2009/07/18(土) 11:50:14ID:???
>>527
何もクエリ全体を二つ書く必要はないだろ。
WHERE句のAND条件の部分だけ、PHPのIF文か何かで判断して
追加させるかどうか分岐させればいい話。


0529NAME IS NULL2009/07/18(土) 21:09:24ID:???
... AND (column2 = '$b' OR '$b' IS NULL)
0530NAME IS NULL2009/07/18(土) 21:26:55ID:???
引数bが空文字だったらどうする気なの?
0531NAME IS NULL2009/07/18(土) 22:14:30ID:???
なに言ってんの? それは空文字を探すという意味だろう?
0532NAME IS NULL2009/07/18(土) 22:51:31ID:???
それだと>>527の要件を満たさないだろ。

そもそもウェブアプリなら、プログラム側で何かしない限り、
入力がNULLという事はあり得ないのでは?
0533NAME IS NULL2009/07/18(土) 23:16:14ID:???
すみません,
mysqlでlike検索してるんですが,
時間がかかりすぎて困ってます.
CPU使用率を見たらIdle Processが90%以上あるのに
mysqldの使用率は5%未満...

もっとCPU使えばいいのにと思うのですが,
これはFileIOで時間食ってるだけで
検索自体はもう早くならない感じでしょうか?
0534NAME IS NULL2009/07/19(日) 00:21:55ID:???
mysqlのデータファイルがあるドライブがCRCエラーなんだけど、少したりとももう救えないのかな(。・_・。)
マメにバックアップとっとくんだった…
0535NAME IS NULL2009/07/19(日) 03:38:08ID:???
>>533
1つのSQLはどんなにがんばってもCPUコア1個しか使わないぞ
05365332009/07/19(日) 04:37:04ID:???
>535 レスどうもです
Coe2Duoだからコアは二つあるけど5%未満なので一つもフルに使ってないです

ttp://d.hatena.ne.jp/sanjapo/20070525
とか見て各種サイズは結構大きくしましたけれどあまり影響がないようでした.
0537NAME IS NULL2009/07/19(日) 11:54:52ID:???
>>536
InnoDBならinnodb_buffer_pool_sizeも見直さないとダメだぞ。
そっちは見た?
0538NAME IS NULL2009/07/19(日) 16:30:05ID:???
>537
うぉおおおお
ありがとうございます
256M->512MB
ですごい高速化がされました

各種修正魔に比べてメモリ倍くらい食ってるけど
これでいってみます.
0539NAME IS NULL2009/07/19(日) 20:37:13ID:???
すごいエスパーだ
0540NAME IS NULL2009/07/21(火) 15:42:38ID:yYCdTavm
MySQL の動いていたサーバをバックアップしたとき,
ダンプじゃなくて /var/lib/mysql (MyISAMとかInnoDBのファイルがここに)
をそのまま(ただし MySQL は停止した状態)コピー
しておいたんだけど,これって再び MySQL に食べさせないと
中身を取り出すことできませんか?

ファイルから直接 mysqldump で SQL 取り出したい・・・
0541NAME IS NULL2009/07/21(火) 16:10:52ID:???
>>540
無理。
でもオープンソースだから
自分でそういうツールを作るというならとめない
0542NAME IS NULL2009/07/22(水) 16:42:13ID:???
それ一回食べさせて吐かせてもう一回元のやつ食べさせればいいだけじゃん
0543NAME IS NULL2009/07/23(木) 01:38:42ID:t2nNTgSy
そのプログラム、1000万くらいでつくってもいいけど
0544NAME IS NULL2009/07/23(木) 01:41:13ID:???
俺なら200万で作ってやる
0545NAME IS NULL2009/07/23(木) 04:31:08ID:/6vymUJv
http://222.159.6.71
0546NAME IS NULL2009/07/24(金) 22:29:04ID:???
データベースの設計で便利でフリーなツール教えてくれませんか?
テーブルが増えていくとややこしくなるので^^;
0547NAME IS NULL2009/07/24(金) 23:12:56ID:???
OOo Base
0548NAME IS NULL2009/07/25(土) 01:23:26ID:???
>>546
今月号のDBマガジン買え
http://www.seshop.com/detail.asp?pid=11155
0549NAME IS NULL2009/07/25(土) 17:53:05ID:???
最近、DB始めました。よろしくです^^
とりあえず、マニュアルは5.1の読めばおkですかね?
0550NAME IS NULL2009/07/25(土) 18:23:11ID:???
>>549
使ってるバージョン読めよ^^
0551NAME IS NULL2009/07/25(土) 21:22:54ID:???
マニュアルとか必要ないんじゃないかな?sel,up,ins,delの基本だけ使って、あとは随時やりたいことがあった時にググレばいいんでない?
0552NAME IS NULL2009/07/27(月) 00:04:57ID:???
一行当たり100〜5000文字(平均1000文字)の文字列が入ったフィールドに対して
Like '%文字列%' の部分一致検索を行う必要があるのですが、
これが750万行あるため、実用に耐えうるスピードで処理できません。

なんとか高速化を図りたいのですが、どういうところに手を入れたらいいと思いますでしょうか?
どうかお願いします。
0553NAME IS NULL2009/07/27(月) 05:28:18ID:???
検索エンジンを使った方がいいのでは
05545522009/07/27(月) 11:29:47ID:???
>>553
検索エンジンですか?
WEBサイトではなく、MySqlのフィールドを検索エンジンに食わせることってできるのでしょうか?
できるのであれば、参考になるサイトなど教えていただけませんでしょうか。

とりあえずレスポンスをいただけるまでは自分で探してみます。
0555NAME IS NULL2009/07/27(月) 11:35:21ID:???
手法としてデータベースを使うのではなくて、検索エンジンを使ったらということです。
0556NAME IS NULL2009/07/27(月) 12:55:05ID:???
http://pc11.2ch.net/test/read.cgi/php/1118762053/

この辺とかどうでしょう。
05575522009/07/27(月) 13:01:52ID:???
>>555
なんどもどうもです。

いまいち把握できていないのです・・・
おっしゃっているのは、750万ファイルのページファイルを作成し、
Googleなどに読み込ませ、
キーワード site:hostname
で検索して結果を得よということでしょうか?

秘密文書が多いので、できればクローズに検索を行いたいのですが、
それは可能なのでしょうか?

また、質問ばかりで申し訳ないのですが、
Tritonnはどうなのでしょうか?
先ほど検索して見つけたばかりなのですが、
悪いうわさがないのならば一度試してみようと思います。
0558NAME IS NULL2009/07/27(月) 14:19:04ID:???
Tritonnのような全文検索用ソフトウェアを使うのが
>>553 のいう「検索エンジンを使う」ってことですよ
05595522009/07/27(月) 14:35:27ID:???
>553、555、556、558
ちぐはぐな掛け合いに合ってしまい申し訳ありません。
(556は見落としてました、すみません)
皆さんありがとうございます。

提示していただいたように「検索エンジン」を用いて実装してみます。
0560NAME IS NULL2009/07/28(火) 01:43:08ID:E3dl42nt
ある1つのテーブル内のデータをmysqldumpでダンプして
DROP TABLE文とCREATE TABLE文を消して
INSERT文以下のデータを、同じ定義のテーブルに入れたいのですが
このテーブルにはすでにデータが入っています。
キーが重複しているレコードを無視して重複していないレコードだけを
入れる簡単な方法はありますか?
0561NAME IS NULL2009/07/28(火) 04:25:31ID:???
>>560
IGNORE
0562NAME IS NULL2009/07/28(火) 18:44:07ID:???
ggrる内容じゃねーか。常夏野郎が
0563NAME IS NULL2009/07/29(水) 20:24:08ID:???
asp経由で日本語文字列入れようとしたらエラーが出たんだが、MySQLって日本語使えないの?
0564NAME IS NULL2009/07/29(水) 21:05:36ID:???
>>563
おまえが日本語使えないだけ。
0565NAME IS NULL2009/07/29(水) 22:00:24ID:???
>>563
残念ながらエラー文は英語だけなんだ。がんばって解読してくれ!
0566NAME IS NULL2009/07/29(水) 22:44:11ID:???
>>563
今日は良いことがあったから、今日だけ俺が訳してやるよ。
なんてエラー?
0567NAME IS NULL2009/07/29(水) 22:46:22ID:???
文字コードがおかしいとか
0568NAME IS NULL2009/07/29(水) 23:17:15ID:GbEs/oP6
一度に大量に削除する時ってロックかかるから
テンポラリテーブル使って少しずつ削除したりする?
0569NAME IS NULL2009/07/29(水) 23:43:14ID:???
どっちにしろ、一度で消すか条件を絞って複数回に分けるかしかないと思うが?
テンポラリテーブルを使うって、どうやろうとしてるの?
0570NAME IS NULL2009/07/30(木) 00:09:48ID:???
削除でテンポラリは利用したことないな
0571NAME IS NULL2009/07/30(木) 00:35:46ID:???
実行が若干重い検索結果にjoinしていくつかのテーブルを削除するから
テンポラリにいったんidを入れてjoinに使おうと思ったの
言われてみれば、テンポラリテーブルの利用は本質的な問題じゃなかった
やっぱり段階的に削除していくしかないすなー
0572NAME IS NULL2009/07/30(木) 03:28:02ID:???
お知恵をお貸しください。
レンタルサーバー(さくらインターネット)上の、MySQL4.0を使った容量3GBのデータベースを
バックアップしたいのですが、
mysqldump-4.0 でバックアップしようとすると、

mysqldump-4.0: Out of memory (Needed 3151304 bytes)
mysqldump-4.0: Got error: 2008: MySQL client run out of memory when retrieving data from server

とメモリ不足のエラーが出て途中までしかバックアップできません。

mysqldump だとエラー(Error: You have an error in your SQL syntax.)は出るものの、
一応最後までバックアップ出来るようですが、mysql、mysql-4.0 のどちらも、

ERROR 1193 at line 18: Unknown system variable 'character_set_client'

とエラーが出て、リストアできません。
MySQL4.0と5.0のバージョンが違うことが原因ではないかと思うのですが、
なにかバックアップとリストアをする方法はないでしょうか?
よろしくお願いします。
0573NAME IS NULL2009/07/30(木) 07:13:14ID:???
読んで書き込むみたいなかんたんなバッチ作ってみれば?
0574NAME IS NULL2009/07/31(金) 01:30:44ID:hLmzxvAT
はじめまして。質問です。
MySQLの5.0.58を使用しています。

SQLを組んでいて、知り合いから「SUMで集計するときはWHERE句の条件で必ずGROUP BYしたほうがいい。」と言われました。

理由を聞いたのですが、「お約束だから」とはぐらかされました。
(WHEREで絞り込んでいるのだから、GROUP BYの追加は無駄な構文解析が発生するだけだと思ったのですが、。)

例えば、
SELECT SUM(money) FROM receipt WHERE id = 1 ;
というSQLがある場合、
SELECT SUM(money) FROM receipt WHERE id = 1 GROUP BY id ;
というように、GROUP BY を追加したほうがいいというのです。

根拠となるようなものを探したのですが見つかりませんでした、。

どなたか理由を教えて下さい。
0575NAME IS NULL2009/07/31(金) 08:58:20ID:???
根拠が見つからないのは根拠がないからだなー
0576NAME IS NULL2009/07/31(金) 09:50:46ID:???
>>574
sumって、group byがなくても使えることを初めて知った。
ありがとう。
0577NAME IS NULL2009/07/31(金) 11:15:12ID:???
べつにグループ集計いらなければ必要ないでしょ。
05785742009/07/31(金) 12:15:53ID:???
あらためて聞いてみたところ、
「昔ORACLEで、SUMを使う際にGROUP BYを指定しないとエラーになった。」
ということでした。

不要だと説明して追加しないことにしました。
0579NAME IS NULL2009/07/31(金) 12:45:20ID:???
Oracleでもいらないよ

SQL> select sum(sal) from emp where deptno = 10;

SUM(SAL)
----------
8750
0580NAME IS NULL2009/07/31(金) 21:58:52ID:GDYMXdu6
table1とtable2に共通のカラムUSERIDがあるのですが、
left joinで結合させようとすると同じ名前のカラムが2つあるとエラーが出てしまいます。
table1.USERIDとtable2.USERIDじゃだめなのでしょうか?
どうすればいいのでしょうか?
0581NAME IS NULL2009/07/31(金) 22:32:54ID:???
select句にもtable1.USERIDと書く
0582NAME IS NULL2009/07/31(金) 23:12:11ID:GDYMXdu6
*じゃだめなんですか?
0583NAME IS NULL2009/07/31(金) 23:24:41ID:???
そりゃダメだろうw
0584NAME IS NULL2009/08/01(土) 03:00:36ID:???
ん?なんで*じゃだめなんだ?
0585NAME IS NULL2009/08/01(土) 03:18:23ID:???
型が違うって事はないよねえ
0586NAME IS NULL2009/08/01(土) 08:15:23ID:mT+dvTBE
>>585
それはないです
リレーションシップとかやらないといけないんでしょうか?
0587NAME IS NULL2009/08/01(土) 08:28:04ID:???
毎度毎度、エスパー募集かよ。
投げたクエリとエラーメッセージくらい書けば?
0588NAME IS NULL2009/08/01(土) 08:28:49ID:???
>>587
お前がいなくても大丈夫そうだぜw
0589NAME IS NULL2009/08/01(土) 14:03:17ID:???
初質です。

会社のDBなのですが、現在、Accessで25人が同時に使用している現状です。
重い、データが壊れる、エラーが出る、接続できなくなるなど様々な弊害が出ています。

そもそも、Accessを多人数用途で使用していること自体が問題なのですが、
今後を考えるとAccessでの運用は厳しい状況です。
そのDBについてのおもりを個人使用のAccessなら心得がある自分が引き受けている状態です。

質問したいのは以下の点です。

・MySQLは導入にコストがどのくらいかかるか。
 会社内使用ならCommunity Licenseで構わないようですがそれで大丈夫でしょうか。
 また、サーバーを必ず置く必要があるか、将来、有料になってしまうのかなど。

・Access個人使用ならVBAを組める程度のレベルの私が
 一からMySQLを始めて、すぐに実用レベルで対応できるようになるでしょうか。

よろしくお願いいたします。
0590NAME IS NULL2009/08/01(土) 15:24:22ID:???
>>589
お前がバカなのは理解してあげたので、消えろ
0591NAME IS NULL2009/08/01(土) 16:19:28ID:???
一点目
コストってのがよくわからないが,DBの金額という意味なら0円
時間的コストという意味ならそう時間かからん
Access->mysql環境移行のサイトなんか結構ある

サーバが必要かどうかというのも何とも言えない,
現在どういう方法で運用されているのかもよくわからなければ
それを変えたいのか維持したいのかも分かんない.
運用にサーバがいるかどうかじゃなくて,運用にあった設置をすべき

で,将来有料になるかについてはMySQLのGPLしらべてみ
(1点目の中に質問いくつあるねん...)

二点目
条件があいまいでで論点もあやふや,
まぁできんじゃね?としか返せない
0592NAME IS NULL2009/08/01(土) 17:22:52ID:???
>>590
かまってちゃん乙
いちいち出てこなくていいから精神科でボダの診断もらって来い
0593NAME IS NULL2009/08/01(土) 17:49:25ID:???
きっといやなことがあったんだろうね。
だけど、他人に当たり散らすのはよくないね。
0594NAME IS NULL2009/08/01(土) 19:54:51ID:???
いつものことじゃないか
05955892009/08/01(土) 21:20:27ID:???
>>591
回答ありがとうございました。
不明瞭な質問で申し訳ありませんでした。

それにもかかわらず、大まかな方針を頂けました。
ありがとうございます。いろいろと調べてみます。
0596NAME IS NULL2009/08/02(日) 00:13:49ID:Q4MhiB1r
コミュニティ版は実験版。
よって、リスク覚悟で。
0597NAME IS NULL2009/08/02(日) 09:30:27ID:???
コネクタのドライバってダウンロードするときメールとか入力しないといけないっぽいけど
再配布不可能なの?
0598NAME IS NULL2009/08/02(日) 09:56:00ID:JR4H8zPC
aspでnbtstatをして帰ってきた結果をMySQLにぶちこもうとしているんですが、
直接ぶちこもうとすると漢字混じりのものは文字コードの違いからエラーになります。
デフォルトutf-8のままutf-8でない文字列をMySQLに保存するにはどうしたらいいでしょうか?
0599NAME IS NULL2009/08/02(日) 10:13:31ID:???
MySQLは列ごとにキャラクタセットを変えられる

mysql> create table test (id int primary key,
-> data1 varchar(100) character set utf8,
-> data2 varchar(100) character set cp932,
-> data3 varchar(100) character set eucjpms);
0600NAME IS NULL2009/08/02(日) 10:27:53ID:JR4H8zPC
なんと!
ありがとうございました
0601NAME IS NULL2009/08/02(日) 19:54:52ID:jeLofuXy
table1(元データ),table2(フラグ定義),table3(table1の各項目にフラグをぶら下げる)があって、
table1の一部の項目にフラグがついた状態になっています。
これを結合して、フラグの有無にかかわらず全項目を表にしたいと考えています。

select (略) from table1 left join (table2 inner join table3 on table2.id=table3.id) on table1.flag=table3.flag;

とすると、フラグがNULLのものが表に出てきません。
どうしたらいいでしょうか?
0602NAME IS NULL2009/08/02(日) 20:48:28ID:J20WEjYY
テーブル名とかフィールド名って、何文字くらいを上限にしてますか?
0603NAME IS NULL2009/08/03(月) 17:29:57ID:???
mysqlの設定中に手詰まりしたので助けてくれ

状況:WindowsからMysqlAdministratorを使用してログインしようとしたらエラー
Mysql Error Number 2003(Can't Connect to MySQL server on 'IPアドレス'

サーバー
OS:Centos5(x64) Xenにて仮想化
Domein
 FILESERVER
 DATABASE
 WEB
Enforceは全てDISABLEDにしてある

ローカルからデータベースへの接続は可能なんだがリモートでの接続がエラーが
出て上手くいかない

ぐぐってみたら
/etc/my.conf の bind-addressが127.0.0.1 をコメントアウトしろとか書いてあるが…
うちの設定にはそもそも無かったw

あと考えられる部分って何だろう?
数日悩んでいて多分単純な事に気づいていないだけだと思うんだが
0604NAME IS NULL2009/08/03(月) 17:58:37ID:77U0plNm
考えられること:お前がバカだということ
0605NAME IS NULL2009/08/03(月) 18:32:13ID:???
SELinux
iptables
ping
mysqladmin ping
0606NAME IS NULL2009/08/03(月) 18:35:51ID:???
>>603
接続に使用しようとしているMYSQLユーザのホストはどうなってる?
localhostや127.0.0.1だったら繋がらない。
0607NAME IS NULL2009/08/03(月) 20:17:30ID:???
MySQLの日付型はyyyy-mm-dd hh:nn:ss形式のようですが、
面倒な変換なしにyyyy/mm/ss hh:nn:ss型を使えないでしょうか?
0608NAME IS NULL2009/08/03(月) 20:35:18ID:???
>>607
そのまま格納は無理だろう。
表示はdate_format使え。
0609NAME IS NULL2009/08/03(月) 22:10:41ID:???
>>607
update や insert で更新する値としてなら使える。
select で取り出す値は date_format() でも使わないと無理。
06106032009/08/04(火) 08:44:28ID:???
>>604-606
アドバイスサンクス!
その辺りの事を全て確認してみたがダメだった

原因の切り分けが出来ないから一度仮想化せずに設定して問題なければ
仮想化してチャレンジしてみるよ
0611NAME IS NULL2009/08/04(火) 12:34:02ID:???
>>610
>>604も確認したのか。ワロタw
06126032009/08/04(火) 12:36:22ID:???
>>611
それも当然確認したw
馬鹿で間違いないw
0613NAME IS NULL2009/08/04(火) 20:05:58ID:CvqNEHZq
mysqladminで文字コードをutf8からsjisに変えたのに、
status;をみると何種類もあるうちの1つしかsjisになっておらず、残りはutf8のまま。
全部変えたいときはどこいじればいいの?
0614NAME IS NULL2009/08/04(火) 21:58:38ID:???
>>613
何をやったのか具体的にどぞ。
0615NAME IS NULL2009/08/04(火) 22:57:55ID:???
またまたかまってちゃん登場
0616NAME IS NULL2009/08/05(水) 00:36:41ID:dQ/gDRRx
3.28くらいから5.0にmyisamのファイルをバイナリレベルのコピーで持ってきたんだけど、
varcharの解釈がバイトレベルから文字数レベルになったから、
そのままだと途中で切れちゃう。
そこで一旦3.28側でvarcharを2倍にしてから持ってきたら問題なかった。
一応これで動いてるけど、本当に問題ないのかな?
0617NAME IS NULL2009/08/05(水) 04:06:22ID:AIBVsZem
素直にダンプ&ロードした方がすっきりするが・・
0618NAME IS NULL2009/08/05(水) 21:15:27ID:9eWVh/Lf
select * from user WHERE id = $user
この時$userに1jとか入れてもid1を抽出してくるのなぜですか?
0619NAME IS NULL2009/08/05(水) 22:14:42ID:???
仕様に決まってんだろカス
0620NAME IS NULL2009/08/05(水) 22:33:04ID:???
複素数入力しても整数に暗黙のキャストされるんだよ。
MySQLの開発者は電気系な。
0621NAME IS NULL2009/08/06(木) 00:11:24ID:4Rgx9kKE
MySQL WorkbenchでER図書いているんだけど、
ひょっとしてテーブル作った後に、テーブルのスキーマ変更できない・・・?

0622NAME IS NULL2009/08/06(木) 18:48:04ID:XYQGPPAG
できるわけねーだろボケ
0623NAME IS NULL2009/08/06(木) 19:11:18ID:???
いやできるだろ ALTER TABLE で.
内部的には全部作り直しているみたいだけど.
0624NAME IS NULL2009/08/06(木) 22:12:57ID:???
全文検索を早くしたいと思って、上で出ていたTritonn(windows版)を導入したんですが、ちょっと動作的な質問です。

TelNo varchar(11)
fulltext index using ngram, normalize (TelNo)

の中に、以下のようなデータがはいってたとします。

0123-45-6789
1234-56-7890
234-567-7890
1234567890
0123-556789

これを
select count(*) from sample where match(TelNo) against("7890");
とすると

1234-56-7890
234-567-7890

は抽出するけど

1234567890

は非抽出なんです。

ちなみに
fulltext index using ngram,no normalize (TelNo)
とすれば抽出するようです。
正規化機能って数字羅列は無理なんですか?
06256212009/08/06(木) 23:04:39ID:4Rgx9kKE
>>622
>>623
すまん、テーブル作った後にという表現が悪かった。

既に複数のテーブルを定義してあるんだけど、
ER図の上での定義としてスキーマを変更したいんだけど
やり方が分からない。

ERWinとかERStudioならテーブルのプロパティに、スキーマの
定義があって変更すれば済む。


ちなみに1テーブルづつなら、コピーしたテーブルをスキーマタブに
ペーストする事で実現できたんだけど、本来は複数テーブルと
それに紐づくリレーションをまとめてスキーマ移動したいのです。

0626NAME IS NULL2009/08/07(金) 08:00:10ID:???
>>624
split_digit 指定しれ。
ttp://d.hatena.ne.jp/mir/20070906/p2
0627NAME IS NULL2009/08/07(金) 12:43:30ID:???
Windows2003環境で
OSからメモリ不足エラー(Got Error 12)が頻発するんだけど、
設定ファイルのどの項目のメモリ量減らせば解決できますか?

ただ、タスクマネージャ見ても搭載メモリの半分も使ってないのに
このエラーが出るので何かほかのところが間違っている気もするんですが...

どなたかわかる方教えてください。
0628NAME IS NULL2009/08/07(金) 17:52:52ID:???
具体的におこなった操作とエラーの内容を書け
06296272009/08/07(金) 18:39:51ID:???
>628
そうだよな、すまない

基本的にInsertとSelectしかしてないです。
大きめのテキストファイルを解析して投げているので、
Insertはものによっては100kb以上なってると思う。

登録されているデータは12GBほど@Mysql\dataフォルダの容量なのでアバウト
登録データが増えるほど頻発するようになった。
表示されたエラーは(たぶんSelect発行時)
「Got error 12 from storage engine」
これが出るとサービス再起動しか復帰できない...

設定はVineとかに入ってる設定サンプルを参考に文字コードとかかを変更したもの
ttp://vine-linux.ddo.jp/linux/sql/mycnf.php こういうの
メモリは2G積んでるから
初めはhugeでやってたけどmediumでも同じ症状が出るから
今はsmallでなんとか安定してうごいてる。

MySQLのバージョンは5.0とすこし古めです
0630NAME IS NULL2009/08/07(金) 20:36:20ID:???
うざくて読む気がしない
06316242009/08/07(金) 22:02:24ID:???
>>626
ありがとうございました。
やりたい事ができました。
0632NAME IS NULL2009/08/07(金) 22:04:42ID:???
>>629
2GBじゃ足りないってことだろう。つーかselectでコケてるのわかってんなら
クエリかインデックスを見直すべきじゃないかなぁ。
0633NAME IS NULL2009/08/07(金) 23:14:48ID:???
>>629
たぶん、mysqld が必要とするメモリを確保できない。
my.cnf のパラメータみなおして、メモリ使用量少なめになるように調整してみては?
06346332009/08/07(金) 23:16:04ID:???
>>629
ああ、small で安定してるのか。ゴミレスごめん。
0635NAME IS NULL2009/08/08(土) 15:54:56ID:???
ごみレスは629
0636NAME IS NULL2009/08/10(月) 00:55:17ID:WJlH4sRX
運用中のdbのカラム変更ってどういう手順でしてますか?
外部から接続してこないようにポート塞いでから変更→ポート開けるとか?
0637NAME IS NULL2009/08/10(月) 12:30:26ID:xYYENRj3
Handler_read_rnd_nextが赤文字になるのは仕様?
リセットかけても直ぐに赤文字になるんだけど。。
0638NAME IS NULL2009/08/10(月) 17:51:56ID:umkbwiYM
しようがない
0639NAME IS NULL2009/08/10(月) 19:12:31ID:???
質問です。
2つのテーブルを比較して、指定したカラムのデータが完全に一致することを
チェックするには、どうするのがいいでしょうか。
0640NAME IS NULL2009/08/10(月) 22:01:23ID:???
2つのテーブルを比較して、指定したカラムのデータが完全に一致することをチェックすればいいんじゃないかな
0641NAME IS NULL2009/08/10(月) 22:30:31ID:???
うん、そうだね
0642NAME IS NULL2009/08/14(金) 23:19:48ID:QWmtJHHL
MySQLで複数テーブルを一気にcreate tableしたいのですが
マクロとかありますか?
0643NAME IS NULL2009/08/14(金) 23:58:45ID:???
>>642
同じ構造のテーブルをたくさん作りたいのかな。
シェルスクリプトでもperlでもVBAでもいいので、自分で書いちゃダメ?
0644NAME IS NULL2009/08/15(土) 00:10:31ID:???
>>643
システムの初期導入設定時に複数のcrate tableのSQLを一括で
実行してDB本番環境をすばやく構築したいのです。
一個一個のテーブルを手でcreate tableするのは出来ますが
テーブル数が多いのでマクロかなんかで一括で実行出来たら良いなと。
個々のcreate tableのsqlファイルは既にあります。
OracleだとPL/SQLとかでやってると思いますがMySQLではどうしてるのかなと。
06456442009/08/15(土) 00:20:46ID:???
自己解決しました。
バッチ処理が出来るようですね。
ttp://mysqlweb.net/category/4033228-1.html
0646NAME IS NULL2009/08/15(土) 09:14:23ID:???
>>644
ファイルがあるのなら、
cat *.sql | mysql
でいいんじゃね?

と思ったら、解決したのか。
0647NAME IS NULL2009/08/18(火) 11:41:26ID:???
サーバAにmysqlが入っていて、サーバBから接続したい場合は
どれをインスコするの?
サーバB自体にはDBを持たず、接続するだけの場合。
例)
mysql testdb -h サーバA -u test -p < test.sql > out.txt

MySQL-client-communityだけ?
MySQL-develも必要?
0648NAME IS NULL2009/08/18(火) 19:49:09ID:???
mysqlコマンド使うだけならclientのみ。
PerlとかCから繋ぐならsharedも必要、
繋ぐものをソースからビルドするならdevelも必要
0649NAME IS NULL2009/08/19(水) 03:47:47ID:dChAbBgf
MYIファイルが肥大化してきたので整理しようと思うのですが
行を削除した段階ではMYIファイルは縮まないですよね?
削除後MYIファイルを縮めるには、myisqmchkでsort-indexするでOKですか?
あるいは他に方法があれば教えてください
0650NAME IS NULL2009/08/19(水) 11:21:30ID:???
optimize tableでもできたはず
06516472009/08/19(水) 13:00:14ID:???
>>648
ありがとう!
0652NAME IS NULL2009/08/19(水) 13:00:53ID:7XUHkeqC
質問です、長くなりますがお願いします。
スケジューラをphp5とmysql5で作っています。関連するテーブルは2つあって、

【sche_info_tb 基本的な情報用】
id, day, eventName
【sche_player_tb 各イベントの参加者用、evIdはsche_info_tbのidです】
id, evId, player

こんな感じです。(それぞれもっとカラムありますが省略してます。参加者は不定数なので、テーブル分離必須?です)
これで、スケジュール一覧のカレンダーを作るときどうやってクエリしたら良いのか迷っています。
カレンダーの構成要素は開催日(sche_info_tb.day)、イベント名(sche_info_tb.eventName)、
参加者名(sche_player_tb.player)です。

自分の考えでは、
1)SELECT * FROM `sche_info_tb` を実行
2)返ってきた結果に対してforeachをまわして一つずつidを取得
3)それをつかって SELECT * FROM `sche_player_tb` WHERE `evId`=$id を実行
という感じです。

しかし、これじゃクエリの実行回数が多過ぎる気がします。ひと月30日として、30回。
1日に複数イベント登録したらもっと増えます。
何か、賢いやり方ないでしょうか?
スケジューラアプリはいろんなサイトにありますが、全部こんなやり方してるんでしょうか? これが普通ですか?
初心者なりに考えて作ってるつもりですが、不出来なところがあれば教えていただけると幸いです。
よろしくお願いします。
0653NAME IS NULL2009/08/19(水) 14:28:38ID:???
テーブルのJOINをしたことありませんか?

select i.day, i.eventName, p.player
from sche_info_tb i, sche_player_tb p
where i.id = p.evId
and i.day between '2009-08-01' and '2009-08-31'
;
0654NAME IS NULL2009/08/19(水) 14:38:14ID:???
オレはLEFT JOINを多用しているけど、知人はINNER JOINを多用していると言われた。
INNER JOINのほうが使いやすいのかな・・・
もちろん状況にもよるだろうけど。
0655NAME IS NULL2009/08/19(水) 16:03:34ID:7XUHkeqC
>>653,654
うわー、すごい!
聴いたことはあったんですが理解できなくて手を付けていませんでした。>JOIN
こういう状況で使うんですね。 自分でもう一度確認し直します、ありがとうございました!
0656NAME IS NULL2009/08/19(水) 17:53:56ID:???
ほんとにJOINしたことなかったんだw
がんばってください
0657NAME IS NULL2009/08/19(水) 18:34:21ID:???
>>654
オレは、LEFT OUTER JOINばっかり。
それだけといっても過言ではない。

INNERとかCROSSとかいろいろあるけど、
使うべきケースがまったくわかんね。orz
0658NAME IS NULL2009/08/19(水) 18:45:57ID:???
JOINとかサブクエリーとか覚えると世界が広がるからガンガレ
0659NAME IS NULL2009/08/19(水) 20:57:38ID:fdU1p2ON
ストアドプロシージャでのエラー処理で教えてください。

プロシージャ内で、
insert into hoge (id, name) values(_id, _name);
といったクエリを発行し、データを登録しています。
このときに、insertの結果(正否)を取得するにはどうしたらいいでしょうか?
sybaseとかだと、@@sql_statusとかで直前のクエリのステータスを取得できたと思います。
mysqlの場合はどのようにしたらいいでしょう。

5.0.45-log
MYISAM
です。よろしくお願いします。
06606522009/08/20(木) 20:15:50ID:W0DXzN4C
>>653さんのクエリでjoinを教えてもらってお世話になったものです。
自分で、
select t1.*, t2.* from table1 t1, table2 t2 where~~
としてクエリを実行したところ、返り値の中にidが2つある状態になりました
echo $rs[0]['id']とやると、一つ目のidを出力します。
明示的に「一つ目の重複カラムを表示する」あるいは、
クエリ発行時に出力対象から特定のカラムを除外する方法はないでしょうか?
すみませんがアドバイスお願いします。

>>658
サブクエリ教えてくれてありがとうございました
これは便利ですね!
0661NAME IS NULL2009/08/20(木) 20:28:37ID:???
アスタリスクで書いたらそうなるね。
手抜きしないで
select t1.id, t1.hoge, t1.fuga, t2.foo, t2.bar
と必要な列だけ書きましょう。
ちなみにうちの会社では「select *」はコーディング規約で禁止されてます。
06626522009/08/20(木) 20:56:57ID:???
>>661
それしかないんですか…
全部で50個くらいカラムがあるんだけどそれでも個別に書いてくってことですよね?
大変だなぁ。。
とりあえずそうします、ありがとうございました。
0663NAME IS NULL2009/08/20(木) 20:57:29ID:oS//lB2K
>>659
どうも調べてみたら、declare handlerで例外処理をキャッチで着るみたいね。
これでインサートエラーをトラップできそう。
0664NAME IS NULL2009/08/20(木) 21:00:12ID:oS//lB2K
>>662
そんなもん、クラス化(ライブラリか)しておいたらいいでしょう。
また、最初の一発目も、desc テーブル名とかでカラムリストとって、
整形すればさほど難しくはない。
なにより、*で手抜きだけはするなと言うこと。それをやったら許さんぞ。
06656522009/08/20(木) 21:10:59ID:???
>>664
クラス化っていうのはphpとかのプログラム側で関数化するってことですよね?(mysqlの用語ではなくて)
>最初の一発目も、desc テーブル名とかでカラムリストとって
ってなんですか?
クラス内のクエリ文を手作業で、t1.col1,t1.col2,t1.col3,t1.col4,…って書いていく時に、
テーブル構造を出力して見ながらやろうっていう事ですよね? 
0666NAME IS NULL2009/08/20(木) 21:35:54ID:???
>>665
見ながらやるんじゃなくて、テーブル構造をコピペしてテキストエディタかなんかでマクロを使うか、
sed等で置換するかして機械的な処理で整形してください。
という意味です。がんばってね。ここで手を抜かないことが大事だよ。
06676522009/08/20(木) 21:58:17ID:???
>>666
あー、なるほど! よくわかりました、ありがとう!
0668NAME IS NULL2009/08/21(金) 12:21:52ID:???
あちゃー
オレも面倒なときはつい * を使ってしまうわw
* と 個別にカラムを指定するのって速度的に違いはあるのかな?
感覚的に * のほうが処理速度は速そうだけど・・・。
0669NAME IS NULL2009/08/21(金) 12:36:16ID:???
select対象列がすべてインデックスの中に入っていると、
テーブルアクセスをスキップできるのでとても速い。
select *してしまうと実テーブルを読まざるを得ない。

カバーリングインデックスというテクニックです
0670NAME IS NULL2009/08/21(金) 13:17:56ID:???
>>669
へえー、そう言う事情があるんですか
今試してみたら両方のやり方で速度の差なかったけど、何十万件になると違いが出るんでしょうか。。
どうもありがとう
0671NAME IS NULL2009/08/21(金) 15:09:40ID:???
テーブルがメモリに入りきらなくなるあたりから差が出るよ
0672NAME IS NULL2009/08/25(火) 00:55:42ID:???
MySQL 5.1 にて
CREATE TABLE `word_count` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`word` varchar(12) NOT NULL,
`count` int(10) unsigned NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `word` (`word`)
)
と言うテーブルで、
select * from word_count where instr('ここに文章が入ります',word);
を実行すると、key が使われなくて速度が出ません。
もっと効率よくできる書き方はありませんか?
0673NAME IS NULL2009/08/25(火) 10:04:35ID:???
Tritonnでがんばってください
http://qwik.jp/tritonn/
0674NAME IS NULL2009/08/25(火) 10:07:40ID:???
>>673
全文検索とは逆のことがしたいのですよ。
instr('words',word) を早くしたいのです。
0675NAME IS NULL2009/08/25(火) 12:55:06ID:???
全部見るしかないからむりじゃね
0676NAME IS NULL2009/08/25(火) 13:06:55ID:???
TRIEとか使えないの?
0677NAME IS NULL2009/08/25(火) 13:45:02ID:???
>>676
http://dev.mysql.com/sources/doxygen/mysql-5.1/trie_8c-source.html
これですか? ちょっと調べてみますが、具体的な使い方を教えていただけると助かります。
0678NAME IS NULL2009/08/28(金) 12:45:48ID:???
質問です

MySQL5.4の機能であるBKAを使用したのだが
併せてsennaの日本語全文検索機能も使いたいと思っています。

5.4にはsennnaのパッチが当てられないので困っていますが
対応方法ほか良い案などありますでしょうか。

現在はTorittonの5.0,67を使ってますが外部結合が遅い・・・
0679NAME IS NULL2009/08/29(土) 19:06:41ID:odCioAfi
MySQL Clusterって使ってる人いる?
これってDB鯖を複数立ち上げて外側では1つに見せるってものだよね
家で試験するとして
最低3台PCいるかな

DB 1号
DB 2号
クラスタ管理 1号
0680NAME IS NULL2009/08/29(土) 19:36:53ID:???
トリガーについて教えてください
MySQL 5.1.35 Windows を使って勉強中なんですけど

table shouhin_master  ←マスターテーブル
code int
name varchar(20)

delete_flg tinyint

table data_tbl ←データテーブル
code int
data1


外部制約でshouhin_masterからcodeを消した時
data_tblの該当するcodeデータを消すようにはしているのですが。
マスターテーブルのdelete_flg に9を立てた時にトリガーを使って
data_tblの該当するcodeのデータを削除する事出来ますか?
出来るとしたら、どういうトリガーを書けば良い?
0681NAME IS NULL2009/08/29(土) 19:59:02ID:???
>>679
パフォーマンス試験じゃなければ、そういう構築例は仮想マシンでやればいいから1台あればいいんじゃね?
0682NAME IS NULL2009/08/29(土) 23:59:26ID:???
>>680
NewとかOldとか使え
begin
if new.delete_flg = 9 then
 delete from data_tbl where code = new.code;
end if;
end
0683名無しさん@そうだ選挙に行こう2009/08/30(日) 06:00:50ID:???
>>682
ありがとうです。勉強させて頂きます。
0684名無しさん@そうだ選挙に行こう2009/08/30(日) 08:59:50ID:8Tmsiy4Z
テーブルを4つjoinする方法がわかりません。アドバイスお願いします。

eventTbl
 id/kaijouId/eventName
sankashaTbl
 id/eventId/userId/comment
kaijouTbl
 id/kaijouName
userTbl
 id/userName
条件は以下です。
eventTbl.id = sankashaTbl.eventId
eventTbl.kaijouId = kaijouTbl.id
sankashaTbl = userTbl.id

この状況の時にそれぞれのカラムを全て引き出したいです
どう書いたら良いんでしょうか? userTbl以外の3つまでは以下のようにして出来たんですが。。

SELECT eventTbl.eventName, sankashaTbl.comment, kaijouTbl.kaijouName
FROM (eventTbl LEFT JOIN sankashaTbl ON eventTbl.id=sankashaTbl.eventId)
LEFT JOIN kaijouTbl ON eventTbl.kaijouId=kaijouTbl.id

これからさらにどうしたら良いでしょうか?
FROM ((eventTbl LEFT JOIN sankashaTbl ON eventTbl.id=sankashaTbl.eventId)
LEFT JOIN kaijouTbl ON eventTbl.kaijouId=kaijouTbl.id)
LEFT JOIN sanashaTbl ON sankashaTbl.userId=userTbl.id
としたらエラーしました
0685名無しさん@そうだ選挙に行こう2009/08/30(日) 09:36:25ID:???

userTblをJOINしてなきゃ、そりゃエラーになるだろう
0686名無しさん@そうだ選挙に行こう2009/08/30(日) 09:47:03ID:8Tmsiy4Z
どこでJOINしたら良いんでしょうか?
3つまでの解説はよく見かけるんですが、4つ以上は見つけられなくて困ってます
0687名無しさん@そうだ選挙に行こう2009/08/30(日) 09:47:43ID:8Tmsiy4Z
お礼書き忘れた。
>>685 ありがとうございます
0688名無しさん@そうだ選挙に行こう2009/08/30(日) 10:48:01ID:???
どこでも何も、そのまま続けて書けばいい。
FROM 〜 JOIN 〜 JOIN 〜 JOIN 〜
解説以前に、まずはマニュアル読むべき。
0689名無しさん@そうだ選挙に行こう2009/08/30(日) 13:14:43ID:8Tmsiy4Z
>>688
ありがとうございます
ずっとマニュアルは読んでるんですが、どうも理解できなくて。。
すみません、教えてください お願いします
0690名無しさん@そうだ選挙に行こう2009/08/30(日) 13:46:04ID:LriVeEv0
phpからmysqlのテーブルに格納されている文字列をmysql_fetch_rowだとかmysql_fetch_assocだとかで読み出したときに、

「ソースの表示」をやってみると
「NULL文字を含むファイルです。半角スペースに変換してから表示します」
ってなって読みだした文字列の後に大量の半角スぺース(きっと元はNULL文字)が含まれているのが確認できるんですけど、
コレを無くすにはどうすればいいですかね。

AJAXで読み込んだときにNULL文字以下が表示されんくなってしまって困ってます。
誰か心当たりあったら解決策お願いします。
06916902009/08/30(日) 14:56:51ID:LriVeEv0
コレってむしろphp側の問題ですねorz
スレ違いでした。
phpのスレで訊いてきます。
0692名無しさん@そうだ選挙に行こう2009/08/30(日) 16:39:53ID:???
これが新手のマルチ投稿か
0693NAME IS NULL2009/08/31(月) 16:21:21ID:???
ランタイム情報の
Slave_runningの値「ON」か「OFF」をmysqlで求めるには、
どのようなクエリを渡せばいいのでしょうか?
0694NAME IS NULL2009/08/31(月) 21:14:54ID:???
show status like 'Slave_running';
を、それぞれのプログラミング言語で
select文と同じように実行すれば取れるよ。
06956932009/08/31(月) 22:39:04ID:???
>>694
あ、ありがとうございます。
とりあえずphpからクエリを投げてみることにします。
phpmyadminばっかり使ってるとダメですね・・。
0696NAME IS NULL2009/09/01(火) 18:48:52ID:???
相談です。

16桁の数字からなる商品番号を格納するカラムのデータ型は何がいいでしょうか?
(1) BIGINT型で、16桁の整数として格納する
(2) CHAR(16)型で、16個の文字からなる文字列として格納する

(1)と(2)と、どちらが検索が速いでしょうか?
データ件数は、10万〜100万件程度です。

アドバイスよろしくお願いします。
0697NAME IS NULL2009/09/01(火) 19:02:40ID:???
>>696
64bitならもちろん、32bitでも、bigint のほうが早いはずだぜ。
まぁ、やってみたら?
06986962009/09/01(火) 21:00:44ID:???
>>697
アドバイス、ありがとうございます。
16桁の商品番号の格納は、BIGINT型で行ってみます!(・∀・)

一応ベンチマークも測ってみようと思って、今100万個のテストデータを作成中ですが、
MySQL5のストアドプロシージャとかで、乱数を一気に100万個ぐらい作る方法ありますかね?
=とりあえずPHPスクリプトで、5000個ずつINSERTしてます><
0699NAME IS NULL2009/09/02(水) 15:23:36ID:???
Tritonn使ってるんだけど

Where ColName Like '%検索ワード%'

Where match(ColName) against('検索ワード')
って結果が違います

これって正常なこと?
何か根本的に間違ってたりしますか?
07006992009/09/02(水) 15:45:21ID:???
すまん、
書き込んだ直前以降はちゃんと同じ値になってました。
なんか構文間違ってたんだと思います。
0701NAME IS NULL2009/09/02(水) 19:14:03ID:???
5.0だけど、INTに2147483647以上の値がINSERTされると
DB Error: unknown error
で止まっちゃうんだけど、これは正しい動作なの?
4.0のマニュアルには2147483647に丸められると書いてあるんだけど。
5.0のマニュアルにはどうなるか何も書いてない。
0702NAME IS NULL2009/09/02(水) 19:24:15ID:???
>>701
5.0でも2147483647に丸められるし、でてくる警告は
Out of range value adjusted for column 'a' at row 1
になる。

unknown errorを出しているのはMySQLじゃなくて
その上で動いている言語かツールじゃない?
0703NAME IS NULL2009/09/02(水) 20:00:54ID:???
>>702
PHPからPEAR::DBを通してアクセスしていたので、コマンドから打って試してみました。
ERROR 1264 (22003): Out of range value for column 'aaaa' at row 1
になりました。最大値に丸めて追加はされません。
ちなみに5.0じゃなくて5.1.35でした。
とりあえず最大値超えのチェックをPHPのプログラム側に入れることにします。
0704NAME IS NULL2009/09/02(水) 20:09:52ID:???
>>703
ちょっと関係ないかもしれないんだけど、
うちの環境で、5.1.35からMyTHTVがエラーを出すようになったんだよ。
5.1.34だと、正しく動いたりしない?
ここで何か変わったのかな。
0705NAME IS NULL2009/09/03(木) 10:04:24ID:PDF3RFA2
すみません、多分基礎的な質問なんですが
一つのテーブルに、for文で連続して10回くらいクエリするようなとき、
他のユーザからも同じテーブルにアクセスがあると問題にならないか気になります
(例えば、insertごとにlast_insert_id()を取る時など、PHPで)
そんなの気にする必要ないんでしょうか?
それとも他ユーザのアクセスから保護する方法はあるでしょうか?あったら教えてください。
よろしくお願いします
0706NAME IS NULL2009/09/03(木) 10:16:54ID:???
>>705
LOCK TABLE
0707NAME IS NULL2009/09/03(木) 10:19:09ID:???
間違えた

LOCK TABLES だった
0708NAME IS NULL2009/09/03(木) 10:27:13ID:PDF3RFA2
>>707
ありがとうございます! 調べてみます
707さんは上のような条件の時、必ずLOCK TABLESやってますか?
0709NAME IS NULL2009/09/03(木) 10:31:18ID:???
>>705
> last_insert_id()を取る時
これは複数アクセスに関しても安全。
on key duplicate update id=LAST_UPDATE_ID()
かなにかやっとけば完璧。ググって。
0710NAME IS NULL2009/09/03(木) 10:59:55ID:PDF3RFA2
>>709
わかりました、どうもありがとう
0711NAME IS NULL2009/09/03(木) 21:35:43ID:???
変なテクニック覚える前に、トランザクション分離について
ちゃんと勉強したほうがいいぞ?
0712NAME IS NULL2009/09/04(金) 00:59:44ID:???
>>711
もちろんそうだけど、MySQL(MyISAM)は、
小手先のテクニックでなんとかするDBじゃないかな。
少なくとも、insert idをユニークにするだけなら、トランザクションは要らないし。
0713NAME IS NULL2009/09/04(金) 12:32:18ID:uLJTuQvZ
今スケジューラーを作っています。
画面構成としては当日のイベント詳細があって、その下に当月のカレンダーがつきます。
ここで、イベント詳細部分のデータ引き出しがどうしたらいいかわかりません。
条件として
1)当日のイベントがあれば当日のイベントを出力
2)当日のイベントが複数あれば、全てを出力する
3)もし当日イベントがなければ、次にイベントがある日のイベント全てを出力する
4)scheduleTblのカラムは、
  ID<id>、2009-09-04(date型)<evDate>、イベント名<evName>、詳細テキスト<text> です。

当日の日付をプログラムで生成して、whereの条件にして当日データを取るくらいできますが、
当日イベントがなかった場合というのがどうしたらいいかわかりません。
日付に1日ずつ足してその都度クエリ、なんて非効率だし、
日付カラムに対して `evDate`>$today かなと思ったんですが、where, limitの指定方法がわかりません
0714NAME IS NULL2009/09/04(金) 12:42:19ID:???
サブクエリの基礎
where evDate = (select min(evDate) from schedule where evDate > '2009-09-04')
0715NAME IS NULL2009/09/04(金) 13:50:22ID:???
>>714
ありがとうございます!
本当に助かりました
0716NAME IS NULL2009/09/06(日) 15:11:52ID:???
「東京 神奈川」みたいにスペースで分けた複数の文字で検索かけることがありますが、
これの検索のロジックって
東京・神奈川それぞれを個別に %東京% みたいにlike検索のキーワードとして、合計2回クエリしてるんでしょうか?
select * from `tbl` where `text` like %東京%
select * from `tbl` where `text` like %神奈川%
みたいに。
sqlスレで聞いた方が良いのかな?
良かったら教えてください、もっと効率的な方法があれば知りたいです。
PHP5.2.8 mysql5です

プログラム板のPHPスレで聞いたんですが、スレ違いということでこちらに来ました
良ければご意見お願いします
0717NAME IS NULL2009/09/06(日) 15:25:50ID:sqLNCpnT
聞くとしたらSQLスレ
聞く前にググレ
0718NAME IS NULL2009/09/07(月) 07:00:19ID:UJq67Uhj
すみません、初歩的な質問です。

データベース(MySQLなど)を構築する場合は、それ専用のマシンを
用意しないといけないのでしょうか?

たとえばWebサーバとして使っているマシンに構築するのは不可能でしょうか。

よろしくお願いします。
0719NAME IS NULL2009/09/07(月) 08:49:27ID:???
>>718
やってみないの?たいした手間じゃないとおもうけど。
0720NAME IS NULL2009/09/07(月) 09:04:09ID:???
>>718
できるよ。
それに、WebサーバーとMySQLは、同じマシン内で動かしたほうが
セキュリティ的にもDBとWebアプリの通信内容が外に漏れず安心、
という面もある。(パフォーマンス的には別のもののほうがいいけど、
それはまぁ規模によりけり。)

大抵のLinuxサーバーなら、MySQL入るからやってみればいい。
もちろん、httpdとの相乗りも可能だよ。
0721NAME IS NULL2009/09/07(月) 09:31:29ID:???
>>718
それだけの情報だと言える事は

ソフトウェア的には同居は可能
07227182009/09/07(月) 12:22:13ID:UJq67Uhj
>>719-721
どうやら大丈夫そうなので同一マシンで構築してみたいと思います。

ありがとうございました。本当に助かりました。
0723NAME IS NULL2009/09/07(月) 17:17:40ID:1gVIiixw
Mysqlに入っているデータをSQLのみで正規表現を使って
置換したいのですが方法が思いつきません
他の言語(PHPとか)を使って置き換えれたら楽なのですがそのサーバーにはMysql
しか乗っておらずなんとかSQL上だけでやりたいのですが
どのようにすればいいのでしょうか?
やりたいことは以下のようなことです(PHP)
preg_replace("/^(.*) $/","\\1","abc efg ");
0724NAME IS NULL2009/09/07(月) 19:23:09ID:???
>>723
Perlも入ってないの?
0725NAME IS NULL2009/09/07(月) 22:07:05ID:???
sedとかawkもあるぞ。
0726NAME IS NULL2009/09/07(月) 22:22:50ID:???
教えてもらえないでしょうか
MySQLをWindiwsServer2003r2にmsiインストーラでインストールすると
直ぐに終了してしまい
[後でもう一度トライして下さい]の様なメッセージが出て
イベントログにも
[早すぎる終了]のようなメッセージがありました
インストールは可能ですよね?
何が駄目か検討つきません
助けて下さい!
0727NAME IS NULL2009/09/07(月) 22:39:53ID:???
>>726
> Windiws
> 検討

何か、インストール時にも読み違いや書き間違いがあるんじゃないのか?
07287262009/09/07(月) 22:55:07ID:???
すんません!
はずかしい!
やはりやり方が悪いんでしょうか...
0729NAME IS NULL2009/09/07(月) 23:38:43ID:???
ダウンロードしたのが壊れていたとか
あるいはPCの方で何か異常が生じているとか
0730NAME IS NULL2009/09/08(火) 00:24:22ID:???
インストール権限がないとかだったりして
0731NAME IS NULL2009/09/08(火) 00:32:22ID:???
SQLSever以外のDBインストールすると
おかしくなるんだろ。
M$トラップが発動したと思われ
07327262009/09/08(火) 07:58:25ID:???
ローカルのアドミニストレーターで
リモートではないコンソール画面からも
いく度か別のバージョンのインストーラでも試しましたが結果は同じでした
詳細のエラー調べてみます!
0733NAME IS NULL2009/09/08(火) 09:03:57ID:m49/nbrV
>>724
Perlすらはいっていません
純粋にOSとMySQLのみだけで動作してます
0734NAME IS NULL2009/09/08(火) 09:46:09ID:???
別マシンに入れたPerlやPHPからやればいいじゃん。
0735NAME IS NULL2009/09/08(火) 12:13:24ID:???
>>732
>詳細のエラー調べてみます!
最初にやれ!w
0736NAME IS NULL2009/09/08(火) 13:55:01ID:m49/nbrV
>>734
単順にSQL上で処理することは無理ということでしょうか?
ローカルサーバーと自分のPC以外からのアクセスを管理者に制限されているので
やろうとしたら環境整えなきゃいけなかったので方法があるなら
SQLだけでやりたかったのです
でも駄目そうなので環境作る方向でいきます

ありがとうございました
0737NAME IS NULL2009/09/08(火) 17:09:12ID:???
Windows MySQL 5.1

接続しているデータベースによって動作を変えたい場合がある
(具体的に言うとテスト系なのか本番系なのか)のですが、
現在接続しているデータベースが何なのかをSQLで知る方法という
のはあるのしょうか?

07387262009/09/08(火) 22:17:29ID:???
>735
もうしわけございません。
確認致しました。
以前にもWeb上で情報検索したのですが、解決策がわかりませんでした。
ダウンロード元(9/8現在):http://dev.mysql.com/get/Downloads/MySQL-5.1/mysql-5.1.38-win32.msi/from/pick


インストーラメッセージ
-----------------------------------------------------
MySQL Server 5.1 Setup Wizard ended
prematurely

The wizard was interrupted before MySQL Server 5.1 could be
completely installed.

Your system has not been modifiled. To complete installation at
another time, please run setup again.
------------------------------------------
イベントログ情報↓

-------------------------------------------------
イベントの種類: 情報
イベント ソース: MsiInstaller
イベント カテゴリ: なし
イベント ID: 11708
日付: 2009/09/08
時刻: 8:40:09
ユーザー: ********
コンピュータ: ********
説明:
Product: MySQL Server 5.1 -- Installation operation failed.

詳細な情報は、http://go.microsoft.com/fwlink/events.asp の [ヘルプとサポート センター] を参照してください。
データ:
-----------------------------------------------

Web上での調査は行ったのですが、、、
どうぞご存知の方いらっしゃいましたらご教授ください。
よろしくお願いいたします。
07397262009/09/08(火) 22:21:33ID:???
あっ、補足ですが
他のサーバ(Winserver2003R2)で試みた結果も同様でした。
基本的にはローカルAdminをRDP接続で作業しています。
ドメイン環境(上位に別のドメイン有)、
SQLserverは稼働中です。
(その他Apache,rubyの環境です。)
不足あれば追記します。
よろしくお願いします。
0740NAME IS NULL2009/09/09(水) 13:04:57ID:???
>>737
関数DATABASE()の戻り値。
ただ、セッション変数を明示的に使用した
ほうがいいのでは。
0741NAME IS NULL2009/09/09(水) 18:49:23ID:???
>>740
まだセッション変数って何?というレベルなんで w これからも勉強します。
有難うございました。
0742NAME IS NULL2009/09/09(水) 19:18:41ID:dvog8naf
phpMyAdmin で csv データをインポートしようとすると

CSV 入力の書式が不正です (行: 607)

みたいなエラーメッセージがでて止まってしまいます。

そこまでは取り込めているんですが、これってダメな行があったら、そこを無視して次を取り込むみたいな設定がないんでしょうか。

一つ一つエラーが出る行をつぶしていくのは膨大すぎて……。
0743NAME IS NULL2009/09/09(水) 21:14:50ID:???
スレ違いだな
0744NAME IS NULL2009/09/11(金) 00:04:21ID:MS7jWmW9
文字列を2gramにしてfulltextのインデックスを使って検索をかけると,
・や.等の全角記号が無視されるようなのですが回避方法はありますか?
0745NAME IS NULL2009/09/11(金) 10:51:27ID:???
http://japan.cnet.com/marketing/story/0,3800080523,20399824,00.htm
0746NAME IS NULL2009/09/11(金) 20:04:52ID:???
レプリケーションに関しての質問です
既存のマスタ-スレーブのレプリケーションに新しくスレーブを追加しようと思いました。
幸いマスタ側でバイナリログをすべて取っていたので空っぽなスレーブをつないですべてbinlogで読ませようと思いました。
今回追加したスレーブはテスト目的で、vmware上で動いており、スペックがかなり悲惨なのです。

スレーブの設定を終えてrelay-logをどんどん作ってくれたのですが、relay-logが多くてhddがいっぱいになってしまいました。
おかげでsqlスレッドも動かなくなりました。
i/oスレッドだけ止めるだとか、(レプリケーションをいじくりまわす)このあたりの小技とか、何か解決のヒントを教えてもらえませんか?

-- 既存のスレーブもunkスペックなのですが、マスタ開始当初から動いているためrelay-logはpurgeされてうまくうごけています。

>>742
そういった機能がなかったので結局取り込むためのコードかいて利用してます。
0747NAME IS NULL2009/09/11(金) 20:21:16ID:???
MySQLを使うシステムで全文検索の機能を作ることになりました。
MySQLのFULLTEXTインデックスでは日本語に対応できないようなので、Tritonnを使おうと考えています。
しかし調べてみると、Tritonnの全文検索はMyISAMエンジンのテーブルでのみ機能するようです。

全文検索を実現するためにはMyISAMを使う必要がある、
しかしトランザクションが必須なのでInnoDBを使わなければならない
という状況になっており、解決方法が分かりません。

できればTritonnを使いたいのですが、Tritonn以外の方法も含めてMySQL+全文検索機能を実現する良い方法がありましたらご教授頂けないでしょうか?
よろしくお願いします。
0748NAME IS NULL2009/09/11(金) 20:49:05ID:???
>>747
テーブルを分けるとかじゃダメなの?
トランジャクション使うデータはInnoDBにして、全文が必要なデータはMyISAMにするとか。
何のデータか知らんから無理かもしれんが。
それか、分かち書きしたデータにFULLTEXT張ってMATCH 〜AGAINSTとか。
07497472009/09/11(金) 21:06:19ID:???
>>748
回答ありがとうございます。
やはりテーブルを分けるのが筋でしょうか。
ブログ関係のWebシステムを作っていまして、ブログ記事のタイトルや内容、その他の関連テーブルからテーブルをまたがって全文検索する機能を作る予定です。
トランザクションは無くても大きな問題は無いように思うのですが、ここは上からの支持なので外せないのです。
また、分かち書きしてDBに入れることも提案したのですが、データ量が増えるとパフォーマンスに影響すると言われて却下されてしまいました。
トランザクションと全文検索の両方を必要とするテーブルを作らないようにDB設計を見直す方向でもう一度考えてみたいと思います。
ありがとうございました。
0750NAME IS NULL2009/09/11(金) 22:10:16ID:???
パフォーマンスを気にするのにRDBで全文検索やれって指示?
単にレコード数が多いだけのテーブルの方がチューニングのしようがあるのにな。
0751NAME IS NULL2009/09/11(金) 23:17:52ID:???
にしても、RDBMSで全文検索やりたがるヤシって後を絶たないなぁ。
0752NAME IS NULL2009/09/11(金) 23:59:30ID:???
実務で使えるRDBMS以外のDBって何?
0753NAME IS NULL2009/09/12(土) 00:22:14ID:???
>>752
いきなり何を言い出すんだ、お前は。
あと、お前がCOBOLを全く知らないことは理解してあげた。
0754NAME IS NULL2009/09/12(土) 00:26:58ID:???
知ったか乙
0755NAME IS NULL2009/09/12(土) 00:29:58ID:???
え、WebシステムにCOBOL?意味がわからん
0756NAME IS NULL2009/09/12(土) 01:14:14ID:???
CHECK TABLEを全テーブルいっぺんにかけたいんですけどどうすればいいですか?
0757NAME IS NULL2009/09/12(土) 04:00:56ID:???
自己解決しました。mysqlcheckを使えばいいんですね
0758NAME IS NULL2009/09/12(土) 07:51:42ID:???
754=752=包茎
0759NAME IS NULL2009/09/12(土) 13:36:51ID:???
で、Blogで使えるRDBMS以外の全文検索って何よ?真面目に知りたいんだが?
0760NAME IS NULL2009/09/13(日) 02:17:01ID:8JHnWrpH
質問です。

今、DBサーバにMySQLをインストールしてます。
そのサーバにはディスクが2つあります。
バイナリログとアクセスログが書き込まれるディスクは今は同じなんですが、
アクセスログだけ、片方のディスクに書き込むようにすれば、性能ってあがりますか?

0761NAME IS NULL2009/09/13(日) 05:35:26ID:???
MySQLにアクセスログなんていうログはないよ
0762NAME IS NULL2009/09/13(日) 11:36:34ID:???
>>760
アクセスログって、クエリログのこと?
バイナリログもクエリログもデータベースディスクとわけるべきだと思う。
0763NAME IS NULL2009/09/14(月) 00:35:25ID:???
>>749
レプリケーションしてサマリテーブルつくってあげたらどうかな。
senna - toritonnでやってるけどunkスペックなスレーブで十分いけてる検索速度andサマリテーブル作成速度出してます。
0764NAME IS NULL2009/09/14(月) 06:07:45ID:aUdaKzFo
left joinを複数設定したいんですが、以下で失敗するようです。書式がおかしいでしょうか?
FROM{$table1}
LEFT JOIN {$table2}
ON {$table1}.id1 = {$table2}.id2
LEFT JOIN {$table3}
ON {$table1}.id1 = {$table3}.id3
LEFT JOIN {$table4}
ON {$table1}.id1 = {$table4}.id4
下のやり方でも失敗しました
FROM{$table1}
(((LEFT JOIN {$table2}
ON {$table1}.id1 = {$table2}.id2)
LEFT JOIN {$table3}
ON {$table1}.id1 = {$table3}.id3)
LEFT JOIN {$table4}
ON {$table1}.id1 = {$table4}.id4)


また、原因解決のためエラーログを見たいんですが、どこにあるんでしょうか?
当然自分でググって調べたんですがわからず
/var/log/mysqld.log にひとまとめにしてあるのかと思ってこっちを見ても
該当の情報がありませんでした
大変すみませんがご意見お願いします。centOS5 mysql5を使っています
0765NAME IS NULL2009/09/14(月) 16:38:23ID:???
764です
上の結合については自己解決しました。ありがとうございました
下のエラーログについて、良かったら教えてください
0766NAME IS NULL2009/09/14(月) 17:29:30ID:???
SQLの書き間違いのようなエラーは
mysqld.logには出ません
0767NAME IS NULL2009/09/14(月) 18:13:37ID:aUdaKzFo
>>766
どうもありがとうございます。公式を見ると
http://dev.mysql.com/doc/refman/4.1/ja/error-log.html
「mysqld がエラーログファイルを保存する場所を --log-error[=filename] オプションで指定できるようになっています。
ファイル名を指定しなければ、mysqld は Unix では mysql-data-dir/'hostname'.err」
と書いてあり、centOSなので find / -name localhost.err や find / -name *.err を試しても該当ファイルが見つからず
自前で設定しないとエラーログを保存できないのかなと思ってきました。
その理解で良いんでしょうか?

とりあえずこっちのページを見て(ttp://a-programmer.blog.so-net.ne.jp/2007-09-15)
mysqlmonitorで mysql> mysqld_safe --log-error=/var/log/myerror.log --log-warnings=1 して
わざとsqlエラーを起こしたんですがファイルも出来てません

エラー情報はどこにあるんでしょうか。mysqlディレクトリを見て回ったんですがわかりませんでした
mysqlのバージョンは5.0.45です
0768NAME IS NULL2009/09/14(月) 18:29:48ID:???
RHEL5(CentOS5SQL)付属のMySQL 5.0.45は
ディレクトリ構成がカスタマイズされてる。
付属版では /var/log/mysqld.log がエラーログで正しい。
0769NAME IS NULL2009/09/14(月) 18:30:40ID:???
手が滑った
RHEL5(CentOS5)付属のMySQL 5.0.45ね。
07707672009/09/14(月) 21:34:47ID:???
>>768
どうもありがとうございます
vi /var/log/mysqld.log したんですが、起動/終了履歴しか書いてないです
これじゃないみたいです。mysql、自前で入れた覚えないんですが、うっかりやってしまったのかな…
0771NAME IS NULL2009/09/14(月) 22:10:55ID:???
>>770
たぶんあなたは、「エラーログ」について、なにか勘違いしてる。

>>767のurlにあるmysqldのエラーログってのは、
それこそ起動や(そのプロセス自体の)実行に関するエラーのことであって、
通常のSQLクエリを投げた時に、構文が間違ってたりした時の、
"You have an error in your SQL syntax〜〜うんたらかんたら"とか、
"Table(or column) doen't exist・・・"
ってゆうエラーのことではない。

で、そうゆう(SQL)エラーを記録するログは、>>766のとおり、mysqld自体にはついていない。
どんなクライアントアプリを使ってるかしらないけど、perlなりphpなりでやってるなら、
Apache(Webサーバ)のエラーログなり、別ファイルに書き出すなりの設定を、
クライアントアプリ側でトラップするしかない。
0772NAME IS NULL2009/09/15(火) 03:30:38ID:qoH2jeyE
質問です。

会社で他の人が書いたソース(PHP+MySQL)を読んでいるのですが、
複数のテーブルをselectしてるだけのトランザクションがあります。

自分の理解では、トランザクションは更新のためのものであり、
selectだけの場合はトランザクションは必要ないと、理解していたのですが、間違いでしょうか?
selectだけのトランザクションは、どのような意味があるのでしょうか?
0773NAME IS NULL2009/09/15(火) 04:12:25ID:???
1つめのselectのあとに更新がかかったら?
0774NAME IS NULL2009/09/15(火) 10:02:13ID:???
初心者ですので知識に乏しいもので入門的な質問なのかもしれませんが、
テーブルを作成し、address.dbにデータを登録しました
で、コマンドプロンプトにてSELECTで確認したところ、文字化けしていました
どうやらコマンドプロンプトはShift_JIS形式で、UTF-8形式だと文字化けするようですが、これを何とか出来ないでしょうか?
検索してchcp 65001なんてものを見つけたのですが出来ず、よく分かりませんでした
データベースに書き込み時にShift_JIS変換する方法 又は コマンドプロンプトで文字化け化を直す方法を教えていただけたらと思います

WindowsXP使用で、PHPでの書き込みです
0775NAME IS NULL2009/09/15(火) 10:53:54ID:???
>>774
テーブル作成時にキャラクタセットの指定はどのように?
create table 〜
(

) ENGINE=InnoDB DEFAULT CHARSET=cp932;

みたいに指定はした?



0776NAME IS NULL2009/09/15(火) 11:48:16ID:???
コマンドプロンプトで作業するときは、最初に
set names cp932
する。
0777host-130-64-82-87.medford.tufts.edu2009/09/16(水) 07:01:28ID:???
欠損値について、どうすればいいか、
いいアイデアがあれば教えてください。

Year
NA
NA
NA
2000
2000
1998

のようなCSVを
read data local infile
で読み込むのですが…
0778NAME IS NULL2009/09/16(水) 10:58:21ID:???
>>775
教えていただいたように
$db->exec('CREATE TABLE address(id INTEGER PRIMARY KEY, name VARCHAR(50), address VARCHAR(150), tel VARCHAR(20), email VARCHAR(100)) ENGINE=InnoDB DEFAULT CHARSET=cp932; ');
のようにセットしたところ、まずENGINEに構文エラーが出て、ENGINEを消したところ、次はDEFAULTがエラーが出てしまいました

>>776
コマンドプロンプトを起動するとc:\Documents and Settings\メイン>となりますが、ココにset names cp932と打ち込むのでしょうか?
自分は色々な場所に打ってみたのですが、環境変数 namesが設定されていませんと出てしまいました
07797752009/09/16(水) 11:39:51ID:???
こっちで以下のcreateを打ち込んだら正常にテーブルが作成されたけどなぁ
(こちらのMySQLのバージョンは5.1.37)

MySQLのバージョンは?

CREATE TABLE address(
id INTEGER PRIMARY KEY
,name VARCHAR(50)
,address VARCHAR(150)
,tel VARCHAR(20)
,email VARCHAR(100)
) ENGINE=InnoDB DEFAULT CHARSET=cp932;

setについては俺は接続する際の文字列として
以下のものを使用している(excel vbaからだけど)
*印のところは適示そちらの環境に合わせて

DB_CnString = "DRIVER={MySQL ODBC 3.51 Driver};" _
& " SERVER = ********;" _
& " DATABASE = ******;" _
& " UID = *******;" _
& " password = ******;" _
& " STMT=SET CHARACTER SET cp932;" _ ←ここ
& " OPTION =3 "

これ以上は俺には知識は無いんで他の方にお願いしてくれw
0780NAME IS NULL2009/09/16(水) 13:57:11ID:WDq6aOQr
>>759
NAMAZUでもいいんじゃね?
mknamazuのタイミングが問題だが
0781NAME IS NULL2009/09/16(水) 19:05:40ID:???
>>778
mysqlコマンドラインを知らないのか?
だったら、それを調べることから。

あるいは、MySQL GUI Toolsを使え。
初心者みたいだし、超おすすめ。
07827672009/09/17(木) 03:17:34ID:???
>>771
おおお、解説ありがとうございます。
まさにおっしゃる通り、カラムがないとかデータ型がおかしいとか
そういうエラーがmysqlの機能として出力されるのかと思ってました
>クライアントアプリ側でトラップ
やってみます、ほんとにありがとう!
0783NAME IS NULL2009/09/17(木) 14:10:45ID:9P/or61p
どうも合点がいかないことがあるので、質問しても良いでしょうか。OSはFedora10です。
MySQLをインストールしようと思い、mysql-5.1.38-linux-i68-glibc23.tar.gzを /usr/local に展開しました。

cd mysql-5.1.38-linux-i68-glibc23
./configure --以下オプション…

上記のコマンドを入力しても、bash: ./configure: そのようなファイルやディレクトリはありません、となります。
ディレクトリに./configureファイルがあったと思うのですが、どこにいってしまったのでしょうか。
0784NAME IS NULL2009/09/17(木) 14:28:41ID:???
select * from tb where
  ( concat( column1 , column2 , column3) like '%word1%' )

複数カラムのいづれかに指定文字がある検索をしたいのですが
上記の記述では いづれかにNULL があると対応できません
NULLがあっても検索にヒットするようには
どのような記述にすれば良いでしょうか?

よろしくお願いします
0785NAME IS NULL2009/09/17(木) 16:17:54ID:???
>>784
where c1 like '%word%' or c2 like '%word%' or ...
と、or でつなげちゃダメ?
0786NAME IS NULL2009/09/17(木) 16:32:16ID:???
>>783
バイナリ版をダウンロードしてなんでビルドしようとしてるの?
0787NAME IS NULL2009/09/17(木) 17:46:07ID:9P/or61p
>>786
あれこれじゃないですか?どれをダウンロードすればいいでしょうか。
0788NAME IS NULL2009/09/17(木) 18:49:06ID:???
自分でビルドするなら
mysql-5.1.38.tar.gz
0789NAME IS NULL2009/09/17(木) 19:26:55ID:9P/or61p
>>788
有り難うございます(T_T)あなたのイエス様のような導きで救われました。
0790NAME IS NULL2009/09/17(木) 23:28:56ID:???
>>789
バイナリ版をそのまま使うのが吉
0791NAME IS NULL2009/09/18(金) 16:36:46ID:???
5.4.2がでましたね。
まだβ品質みたいですが、そろそろ使い物になってくるかな。
0792NAME IS NULL2009/09/18(金) 21:17:45ID:???
MySQL5.0からvarchar型で65535文字格納できるようになったとのことですが、
text型の使い道って今でもあるのでしょうか?
長文テキストはvarcharに、でっかいバイナリデータならblobに入れれば済んでしまいそうです。

単純に65535文字以上のテキストを格納する場合にのみtext型を使うのですか?
それとも文字制限以外にvarcharでは不都合なケースというのがあるのでしょうか?
0793NAME IS NULL2009/09/18(金) 22:36:01ID:???
改行使う必要ないならvercharでいいんじゃないかな
0794NAME IS NULL2009/09/18(金) 23:52:52ID:???
別に改行あってもvarcharで問題ないだろ
textは文字列をそのまんま格納
varcharは余分な空白を削除する
textfieldに対応するカラムはtextにしときゃいい
0795NAME IS NULL2009/09/19(土) 15:58:46ID:???
MySQLのvercharは余分な空白を削除する?
0796NAME IS NULL2009/09/19(土) 21:50:02ID:???
>>794
「改行がある」と「改行を使う必要がある」は全く違う意味だろ
お前さんの言うやり方で、どうやって改行のある長文を復元できるわけ?
0797NAME IS NULL2009/09/19(土) 22:02:18ID:???
varcharって改行を認識しないの?
0798NAME IS NULL2009/09/20(日) 09:48:20ID:???
innodbのauto_incrementは
テーブルのデータをdeleteしてからmysqlを再起動すると
同じ値が再利用されるってのを最近知った
0799NAME IS NULL2009/09/20(日) 19:32:06ID:DbTnU+4k
データベースを作成しようと思って
mysql> CREATE DATABASE transcript_production;
と入力したところ、

ERROR 1006 (HY000): Can't create database 'transcript_production' (errno: 2)

というエラーが発生します。データベースが作成できないのは何故でしょうか?
0800NAME IS NULL2009/09/20(日) 20:38:48ID:K6cwfdto
エラー内容で検索し、問題点の理解を行おうとしないためです。
0801NAME IS NULL2009/09/20(日) 20:43:14ID:K6cwfdto
まかーは帰れ
0802NAME IS NULL2009/09/21(月) 01:48:42ID:ki/ZQtAj
はい。
0803NAME IS NULL2009/09/22(火) 09:24:58ID:pzId1jk0
ちょっと聞きたいんですが
NULLを許可したフィールドにNULLを入れるのと
データを入れるのとでは使用するサイズに違いはありませんよね?
(実際やってみても同じサイズでした)

これをNULLだとほとんどサイズを使用させたくないのですが可能でしょうか?
0804NAME IS NULL2009/09/22(火) 14:57:30ID:???
>>803
固定長だと無理じゃない?
別テーブルにして、inner join したら?
0805NAME IS NULL2009/09/22(火) 17:08:39ID:E7b8KwR3
>この暗号が解ければGoogleに就職できる? 今のところMITの学生もお手上げ
>
>どうやら比較的単 純な換字暗号らしい(そうではないかも)。
>解読の結果はある電話番号で、解読に成功すればそこに自 分の名前やメールアドレスなど連絡先を残すことができるという仕掛けだ。
>
>http://jp.techcrunch.com/archives/20090921google-is-searching-for-beautiful-minds-but-so-far-no-m-i-t-students-have-broken-its-code/
>暗号
>http://cache0.techcrunch.com/wp-content/uploads/2009/09/Googel-job-code.jpg

MySQL使うらしいぞ

>1.初歩的に重複しない文字列を抜き出す
>2.おもむろにMySQLを立ち上げる
>
>解のヒント
>↓
>@UNHEX関数を使ったAES暗号複合
>AWGS84座標系、ユニバーサルメルカトル図法

誰かやってくれ!!
08068032009/09/22(火) 17:25:08ID:???
やっぱり無理ですか…
値以外にNULLかどうかの区別が付いてるんでもしかしたら出来るのかな? とは思ったんですが…

別テーブルからinner joinすることにします。ありがとうございました
0807NAME IS NULL2009/09/22(火) 17:53:02ID:???
固定長じゃなくなっちゃうからね。
0808NAME IS NULL2009/09/22(火) 23:53:58ID:ATIBidir
単に時刻だけを扱いたいときって整数型使えばいいの?
0809NAME IS NULL2009/09/23(水) 00:08:10ID:???
>>808
datetime使ったほうがいいとおもうぞ。
addtime()とか時間処理関数使えるし
0810NAME IS NULL2009/09/24(木) 23:13:44ID:43eZZEHL
ENUM使うくらいならCHARなりINTなりでいいよね
0811NAME IS NULL2009/09/25(金) 14:08:44ID:???
構造にもよるけどENUMは基本使わないかなー
聞いちゃいないがSETはcheckboxの値を収める時なんかには使う
0812NAME IS NULL2009/09/25(金) 18:49:20ID:???
>>810
>ENUM
フツーに使う。
クエリの結果を生で見たときにちょっと
わかりやすいから。
ヘビーな用途じゃなきゃ問題ないだろ。
0813NAME IS NULL2009/09/25(金) 18:52:52ID:???
>>808
いんじゃね。

ちなみに、オレはほとんどそうする。
ファイルのタイムスタンプを多用する
都合にあわせてるからなんだけど。
0814NAME IS NULL2009/09/26(土) 05:48:22ID:???
Wonderful world of MySQL Storage Engines
http://docs.google.com/gview?a=v&q=cache:C-Tl5DCz3XsJ:www.percona.com/files//presentations/OSCON2008-Wonderful-World-of%2520MySQL-Storage-Engines.pdf+MyISAM+Innodb+Falcon+Maria+PBXT&hl=en
0815NAME IS NULL2009/09/27(日) 14:04:02ID:nuIWLu+4
そのデータベースの構造を一覧出来る方法がないかなと思っているのですが、一つのコマンドでそういうのは無いでしょうか?

desc name や show create table nameの結果が全部出力されるような感じを考えています。

desc *; や show create table *; という感じで出来るといいのですがそういう方法はありますでしょうか?
0816NAME IS NULL2009/09/27(日) 14:07:13ID:???
>>815
show tables;
じゃだめなの?
0817NAME IS NULL2009/09/27(日) 16:50:23ID:nuIWLu+4
tableの構造も含めた形で取得したいのですが・・。
0818NAME IS NULL2009/09/27(日) 18:27:56ID:???
>>817
説明たりねーよ。ボケ
mysqldumpコマンドくらい知らねーのか!
0819NAME IS NULL2009/09/27(日) 19:55:25ID:nuIWLu+4
失礼しました。

イメージとしては、そのデータベースにある全tableの
desc name や show create table nameの結果が全部出力されるような感じを考えています。
0820NAME IS NULL2009/09/28(月) 03:52:05ID:???
いやだからmysqldump使えって話じゃん
0821NAME IS NULL2009/09/28(月) 13:08:10ID:???
>>815
つ information_schemaデータベース
0822NAME IS NULL2009/09/29(火) 12:50:09ID:ko2ZqKae
質問です。
MySQL5.1で、異なるDBサーバにあるテーブルの結合(join)をすることが出来るでしょうか。

■構成
MySQL5.1をインストールしたDBサーバが2台あり、それぞれ別のテーブルが入っている
(レプリケーションしているわけではなく、別の種類のデータが入っている)

■要件
両サーバにあるテーブルを結合(join)したい。
db1のtable1と、db2のtable2を結合したいということです。結合に用いるカラムは存在
します。

table1のデータとtable2のデータを別々に取得し、プログラムを用いて照会するという
方法もありますが、出来るだけDBへ発行するSQLの本数を少なくしたいというのがクライ
アントさんのご要望で、現在つまずいています。何かわかりましたらお教えください。

宜しくお願いします!
0823NAME IS NULL2009/09/29(火) 17:27:48ID:???
案1 federated storage engine
案2 spider storage engine
0824NAME IS NULL2009/09/29(火) 18:00:25ID:ko2ZqKae
>>823
ありがとうございます。案1でいけそうですね。
0825NAME IS NULL2009/09/30(水) 15:42:42ID:???
5.0系のリレーログについて質問です。

mysqladmin shutdownをすると、リレーログの内容はすべて反映されてから
mysqldが落とされるのでしょうか?

何がいいたいかというと、mysqldが落ちた状態の時は、リレーログや
リレーログインデックスは削除したいのです。
MySQLを実行しているホスト名を変えたいのですが、現状は
リレーログファイル名にホスト名がついてしまっているので、
ホスト名を変更した後、リレーログとリレーログインデックスを
削除してからmysqldを上げようと考えているのですが・・・。
08268252009/09/30(水) 15:43:47ID:???
x mysqldが落ちた状態の時は、
o mysqldが落ちた状態の時に、
0827NAME IS NULL2009/10/01(木) 15:40:00ID:Y2Zf4H+p
マスター、スレーブ、どっちのホスト名変えんの

ま、どっちにしても
ホスト名かえるならマスターとスレーブ両方ともstopしなきゃならんだろ。
権限テーブルだって見直ししないとならんし。

だったら、マスターから落として、スレーブにマスターの最終更新が反映されたことを確認してから
スレーブも落とせば問題ないんじゃないの

どっちかを稼働させたまま作業するなんてばかなことはやめたほうがいい。
問題はレプリケーションだけじゃないから。
上にかいたが権限とか、MySQLはホスト名依存の汚い部分があるから。
0828NAME IS NULL2009/10/02(金) 20:58:04ID:???
sage
0829NAME IS NULL2009/10/06(火) 10:35:34ID:???
MySQLのMyISAM型はまだトランザクション機能は利用できないんだっけ?
0830NAME IS NULL2009/10/06(火) 12:57:28ID:???
ずっとできない。
0831NAME IS NULL2009/10/10(土) 23:44:04ID:???
ID ---Primary key
CustId ---char(8)

挿入時に、ID に 0を付けた値をCustIdに入れられますか?
たとえば、ID=1 であれば、CustId=00000001 みたいに
以下はトリガは作成できても、アプリから実行するとエラーになります。

create TRIGGER generateCustId after insert on customer for each row
begin
set @custid = CONCAT(Left("00000000",8-Length(new.ID)),new.ID);
update customer set CustID=@custid where ID = new.ID ;
end
0832NAME IS NULL2009/10/11(日) 12:52:43ID:I0TScHXP
質問です
たまに"MySQL server has gone away"と出てきて
MySQLとの接続が切断されるばかりか
一度exitしてもう一度接続しようとすると
パスワードを打った瞬間に
MySQL Command Line Promptの窓が閉じます。
ですから、毎回コンピューターを再起動しなければなりません。

原因は(不適切にデータベースにアクセスした、など)複数あるみたいなので
その追求は後でするとしまして、
"MySQL server has gone away"が出た後でも
コンピューターを再起動せずにMySQLを起動できる方法を教えてください。
何かリセットのコマンドはありませんか?
0833NAME IS NULL2009/10/11(日) 15:05:30ID:???
>>832
再起動してるコンピュータはサーバ側でいいんだよね。
ヒント: /etc/init.d/
08348322009/10/11(日) 18:38:45ID:I0TScHXP
>>833
はい、サーバー側でいいんですが
Windows Vistaなのでそのヒントでは
どこをいじればいいのか分かりません。
具体的にどこをどうするのか教えてください。
0835NAME IS NULL2009/10/11(日) 18:43:55ID:???
>>834
サービスの再起動したらいい
08368322009/10/11(日) 19:00:54ID:I0TScHXP
Apache2.2の再起動のことですか?
それなら既にやっています。
Apache2.2が起動している状態から
→停止→再起動
としても正常に起動されないので質問しているんです。
スタートメニューからApacheのstartとstop、
そして、Administrative Toolsでstartとstopと直接やっても起動されません。
他の方法はありませんか?
0837NAME IS NULL2009/10/11(日) 19:11:22ID:???
>>836
どっからapacheが。。
いや、えー
だから、MySQLもapacheのようにサービスを再起動したらいいと言っている
0838NAME IS NULL2009/10/11(日) 19:52:27ID:???
コマンドプロンプトから

net start mysql

net stop mysql

あるいは管理ツールのサービスからMySQLを選んで
起動させる
0839NAME IS NULL2009/10/11(日) 19:55:54ID:???
スタートメニュからどうやったらいいでしょうか?



とか、返ってきそうで怖い
0840NAME IS NULL2009/10/13(火) 08:51:57ID:???
サービスの画面まで自分でいってるんだからそれはないだろ
アッー サービスにmysqlあったんだ!って感じなんじゃねの?
08418322009/10/13(火) 12:11:35ID:KasnJFah
>>838-840
いやいや、
net start mysql
net stop mysql
は知りませんでしたが、
「管理ツールのサービスからMySQLを選んで起動させる」は既にやってます。
それで出来ないから質問してるんですが。
0842NAME IS NULL2009/10/13(火) 13:10:00ID:???
>それで出来ないから質問してるんですが。

後出乙。832からはexitコマンドとPC再起動しか読み取れない。なにが「ですが」だよ。
0843NAME IS NULL2009/10/13(火) 13:18:44ID:???
>>832の文章では対応として何をしたのかが解らない
>>840が親切にサービスからの事を書いたら
>>841の返答かよ

勝手に悩んでろ
0844NAME IS NULL2009/10/13(火) 15:56:22ID:???
841みたいな最初の質問時に環境を明示しないバカは、ハナから放置するのがいいかと。
08458332009/10/13(火) 17:15:48ID:???
>>844
そのようだね。反応して済まんかった
0846NAME IS NULL2009/10/14(水) 08:25:48ID:lFiZMz2+
質問です、人名検索のアプリを作っています。検索条件は
「全部|A-Z|あ|か|さ|た|な|は|ま|や|ら|わ」で、「あ」を押した時には
相田、青山、飯山、井村、織田 って感じでア行に所属する名前を表示をしたいと思います。
この場合、where以下の検索条件はどうしたらいいでしょうか?
パラメータは「key=あ」がセットされるものとします。

where `name` like '{$key}%' で考えたけどこれは平仮名指定だし、無理でしょうか?
centOS5.3、Mysql5、PHP5で動かしています
0847NAME IS NULL2009/10/14(水) 09:54:27ID:???
>>846
振り仮名のカラムを作れよ
0848NAME IS NULL2009/10/14(水) 22:46:34ID:???
>>847
そうですね。気がつかなかった、ありがとうございました
0849NAME IS NULL2009/10/14(水) 23:52:17ID:0LwxIgqj
Mysqlのコミュニティーエディションについてお伺いします
会社のイントラネットでドキュメントなどのデータベースに利用したいのですが
これはライセンス的にOKでしょうか?
0850NAME IS NULL2009/10/15(木) 01:13:30ID:???
OK
何を心配しているのか分からん
0851NAME IS NULL2009/10/16(金) 15:00:58ID:???
あるテーブルのフィールドが更新されたのを契機に
外部スクリプト(PHPかBASHスクリプトを検討)を呼び出したいと思います。

外部スクリプト側で一定間隔で監視対象のテーブルを
SELECT COUNT(*) FROM hoge WHERE ...することを
検討してましたが、数秒以内のレスポンスを要求されているため、
この方法でやるのは効率が悪いと考えています。

そのため別の方法を検討しています。
トリガからストアドを呼び出せそうなことはわかりましたが、
ストアドから外部スクリプトをコールすることは出来ますか?

MySQLのVersionは5.0を利用しています。
0852NAME IS NULL2009/10/16(金) 20:55:01ID:???
あるテーブルが更新される間隔は、監視間隔よりも頻繁なのかな。
トリガーで監視対象テーブル更新で更新状態フラグテーブルのフラグを更新して、
その更新フラグテーブルをselectしたら1秒もかからないんじゃないのかな?
0853NAME IS NULL2009/10/16(金) 23:45:25ID:???
Cで書いた関数を登録できるから、ある意味なんでもできる
0854NAME IS NULL2009/10/17(土) 18:11:07ID:???
通信を暗号化したいんですが、
SSHのような、パスワード認証で、
通信だけ暗号化したいんだが、mysqlでできますかね?
よろしくお願いします。
0855NAME IS NULL2009/10/17(土) 20:55:31ID:???
>>854
暗号化はmysqlの担当じゃないな。
VPNとかで暗号化した通信経路を作って
その上にmysqlの通信を通すのがJK
0856NAME IS NULL2009/10/17(土) 22:41:14ID:???
>>854
俺の質問の仕方が悪かった。ごめん。
mysqlで5.x?だと、SSLと連携するようなんですが、
クライアントアプリの全部に、認証鍵とか埋め込むのが、
面倒なんで、通信だけ暗号化できないのかと。。。。
よろしくです。

0857NAME IS NULL2009/10/19(月) 22:21:05ID:???
ラッパーを通すしかないな
そして結局は、そのラッパーを通すためにクライアントアプリを変更する羽目に
0858NAME IS NULL2009/10/20(火) 11:25:20ID:???
運用がおかしくないか?
開発者以外がクライアント使うなんて想像できないんだが
オペレータがSQL使うの?
開発時点で暗号化なんて、それどんなapple?

SQLクライアントは禁止にして、
Webアプリ化、暗号化はhttpsに任せるがJK
0859NAME IS NULL2009/10/20(火) 11:25:29ID:???
すむせん、MySQLのstatusの見方について教えてください
show statusで人生相談に表示するCom_系の値って基本的に加算されてゆくと思うのですが、
計測しているとあるタイミングで減少しているようです。
特にflush statusは実行してないのですがmysqld側でリフレッシュをかけているのでしょうか?
また、もしかけているなのなら実行時間のログなどはありますでしょうか?
0860NAME IS NULL2009/10/20(火) 11:28:23ID:???
>>859
> 人生相談
kwsk
08618592009/10/20(火) 11:29:38ID:???

× show statusで人生相談に表示する
◯ show statusで表示する

コピペミスです
読みにくくてすみません
0862NAME IS NULL2009/10/20(火) 15:03:48ID:???
>>861
何をコピペミスしたのかkwsk。
0863NAME IS NULL2009/10/20(火) 16:13:02ID:???
MySQLの show statsu って人生相談にも乗ってくれるのか。知らなかった
0864NAME IS NULL2009/10/20(火) 17:04:49ID:???
俺の人生 SHOW STATUS;
やばい
0865NAME IS NULL2009/10/20(火) 18:42:54ID:???
mysql> show status 俺の人生;
ERROR 1064 : You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '俺の人生' at line 1
0866NAME IS NULL2009/10/20(火) 19:10:10ID:???
全否定されてるw
0867NAME IS NULL2009/10/20(火) 23:50:08ID:???
>>858
レスサンクスです。
最終的に、各PCに常駐アプリいれる予定として、アプリの種類は、
資産管理ツール+ロギングの分類です。HTTPSのPOSTメソッドで、
データベースへの最低限の編集、変更などは、PHP記述で
なんとかなったので、後は、直接アプリからSQLサーバーへ
コネクトして、監査結果やらロギングを行いたいと思いまして、
アプリの開発は、mysql_ssl_set()とか使えば、なんとかなりそうなんですが、
暗号鍵のペア準備が面倒だったので、認証だけは、従来のパスワード認証で接続し、
通信だけ、暗号化したい思いまして。。。どうなんでしょうか?



0868NAME IS NULL2009/10/21(水) 01:16:33ID:???
SQLインジェクションどころの騒ぎじゃないな
0869NAME IS NULL2009/10/21(水) 01:38:51ID:???
なんで編集以外の時だけ直接アプリからmysqlサーバにコネクトするのかは
そういう用件だとして置いといて
クライアント側で認証鍵とかmysql_ssl_setとか使うなら、まずクライアント側でopensslが利用できないと
いけないけどその機能をクライアント側は有してるんでしょうか?
そもそもopensslがクライアント側に入ってなければ各クライアント全部にopenssl入れないといけないだろうし
使うにしてもCAファイルはクライアント側で必要みたいだし
VPNが一番楽だと思うけど
0870NAME IS NULL2009/10/21(水) 01:54:26ID:???
>>868
まるほど。SQLインジェクション、PHPもろでした。ーー;
事前にqueryして、文字列を比較すれば良いのかな。ああ、しんど、

0871NAME IS NULL2009/10/21(水) 02:19:20ID:???
>>869
 レスさんくすです。mysql_ssl_set()
 SSHのPermitパスワードAUTHっぽい動作ができるかの確認で、
 mysql_ssl_set()を全部NULL指定で、該当ユーザーのGRANTに、
 REQUIRE SSLを指定したけど弾かれました。なにかしら、
 クライアント側で鍵を用意しないとダメかもしれません。
>>クライアント側で認証鍵とかmysql_ssl_setとか使うなら、
>>まずクライアント側でopensslが利用できないと
>>いけないけどその機能をクライアント側は有してるんでしょうか?
 将来へ向けてのトライアル試験なので、
 VSではコンパイルしないので、しばらくは大丈夫。
>使うにしてもCAファイルはクライアント側で必要みたいだし
>VPNが一番楽だと思うけど
 VPNってのがピンとこないのですが、ローカルのクライアントポートに、
 SSHのリダイレクトポートを設ける奴でしょうか?。ポートFWで、
 持ち出しPCとかで流行っていますが・・・それでもいいかな。

SSHコマンドのトンネル方式か、それともSSL埋め込みか。
0872NAME IS NULL2009/10/21(水) 02:36:55ID:???
サーバ側での起動オプションやサーバ側で準備しないといけないファイルもあるのでそのあたりはこちらで
>http://dev.mysql.com/doc/refman/5.1/ja/secure-connections.html
0873NAME IS NULL2009/10/21(水) 10:26:23ID:???
>>871
stunnel辺り使うのが1番楽な気がするけど。
0874NAME IS NULL2009/10/21(水) 11:53:51ID:???
>>855に戻る
0875NAME IS NULL2009/10/21(水) 17:01:24ID:???
>>870
いやPHPの話じゃなくて、アプリから直接SQLサーバにつなぐんだろ?
てことは当然、コマンド送り放題なわけだから何でも出来てしまう。
で、>>858に帰結すると思うんだが。

編集にPOSTを使っておいて、なんで閲覧にGETを使わないの?
0876NAME IS NULL2009/10/22(木) 00:03:37ID:???
>>875
>いやPHPの話じゃなくてアプリから直接SQLサーバにつなぐんだろ?
 アプリ自身に、単純にパスワードを埋め込む方法だと、
 通信が暗号化されても、配布しているバイナリーを解析されたら、
 該当パスワードは容易に抽出できてしまうかもしれない。
 結局アプリ側でなんでもできてしまう。ふむふむ。
 パスワード方式は、限界で、クライアント側の公開キーを生成して、
 サーバー側へ設定するしかないのか。キーはインストール時に、
 自動生成して、システム管理へ投げるようにしてもらうか。
>編集にPOSTを使っておいてなんで閲覧にGETを使わないの?
 GETもPOSTもPHP側の受処理としてはほぼ同じっすよね?
 強い理由があってPOST閲覧している訳ではないです。
>>872、873
 いろいろ情報サンクスです。アプリに埋め込むパスワード方式は
 限界っぽいので、もうmysqlのSSLでやって見ようと思います。
 まだシビアな情報を扱うDBにはなっていないのでいずれ。
0877NAME IS NULL2009/10/22(木) 00:59:56ID:???
暗号化したパスワードをアプリに入れといて、コネクトする前にデコードして使えば多少解析されてもいいんじゃない?
ある程度独自のシード使って

ていうかバイナリー解析されたらとか心配してたら何も出来ないよ
ちょっといろいろ心配しすぎ
0878NAME IS NULL2009/10/22(木) 01:03:12ID:???
一番安心かつ楽なのはWebアプリにしちゃうことだよ
0879NAME IS NULL2009/10/22(木) 11:00:37ID:???
group_byした結果の行数を取得する方法ってどうやるんでしょうか。

countを使うと、group毎にcountしてしまうので。。
0880NAME IS NULL2009/10/22(木) 11:27:12ID:???
自己解決しました。
select count(*) from (select -中略- group by aa) as c
で大丈夫でした。

スレ汚し申し訳ないです。
0881NAME IS NULL2009/10/22(木) 18:09:06ID:Gyb9EKM2
OracleはMySQLを売却せよ - オリジナル開発者が叫ぶ
http://journal.mycom.co.jp/news/2009/10/22/018/index.html

だとさ

しかし今さらMySQLだけ買おうって会社なんかあるんかね
つぶれそうなところをSunに拾ってもらったんだろ
0882NAME IS NULL2009/10/22(木) 18:38:00ID:???
IBMぐらいしか思いつかんが
ラリーがIBMに売るわけがない
0883NAME IS NULL2009/10/22(木) 19:44:52ID:???
マジでどうなるの?
有料化されちゃうの?
0884NAME IS NULL2009/10/22(木) 21:37:23ID:???
>>882
IBMはDB2あるからあんま意味無いんじゃ。
こういう話で国内企業が名前だけでもでて来ないのはちょっと寂しい。
0885NAME IS NULL2009/10/22(木) 21:51:38ID:???
IBMはOracleの前のSunの売却先候補だったことをお忘れなく
ま、IBMもMySQLはいだんだろうが

米国勢で買えそうな資金があるのはGoogleとYahooとMSくらいか
Googleは社内で大量に使ってるからおかしな会社に売られるくらいなら買うかもしれないが、
Google社内にMySQLのエキスパートがたくさんいるからいまさらどうなっても痛くもかゆくもないだろ
5.4なんてもろにGoogleパッチでできてるようなもんだろうしな
一番の理由になりそうなのはGoogleがソフトウエア売買ビジネスをやるはずもないってことだろうな
Yahooもソフトウエア販売はやらんだろう
MSはどうかね。MSが買う気になるとは思えんが、万が一そう思ってもOracleが売らないだろう。

となると、買うとしたらヨーロッパのソフト会社かね
日本では知られていないが資金力のあるところはあるんだろう
SAPとかは有名だが

日本国内だと楽天が手をあげる可能性はあるかも。
一気に世界企業の仲間入りできそうじゃん
三木谷好きそうじゃん
0886NAME IS NULL2009/10/22(木) 22:11:18ID:???
楽天SQL か、、、
selectした結果がnullの時はポイントとかついてくれたら嬉しい w
0887NAME IS NULL2009/10/22(木) 22:26:40ID:???
ガッしたら1000ポイントとかねw
0888NAME IS NULL2009/10/23(金) 04:19:53ID:???
BTreeを3本木にして、3木Tree にするしかないな。
0889NAME IS NULL2009/10/23(金) 04:44:16ID:???
>>880
もしかして select count(distinct aa) from tbl

0890NAME IS NULL2009/10/23(金) 13:51:53ID:???
>>888
その暁にはTTreeと呼べや
0891NAME IS NULL2009/10/24(土) 08:21:52ID:???
>>890
TTreeって、ROOT(http://root.cern.ch)思い出すな。
0892NAME IS NULL2009/10/26(月) 16:26:55ID:???
5.1.37 innodb
text型は、MySQLコマンドブックでは最大長65535バイトとありますが、
可変長と考えてよろしいのですか?
0893NAME IS NULL2009/10/26(月) 16:28:39ID:???
>>892
可変長

ところで、innodb プラグイン試してみた?
08948922009/10/26(月) 17:04:27ID:???
>>893
ありがとうです。
プラグインというのは初めて知りました w
ぐぐって見たら .38からとの事。今5.1系列では40が最新だから使って見ても大丈夫そうな? w
調べてみます。
0895NAME IS NULL2009/10/27(火) 18:22:45ID:b3uBGirQ
amazon rdsキター
これで面倒な管理をやらないで済むようになると思いきや
http://blog.masuidrive.jp/index.php/2009/10/27/amazon-released-rds/
ここ見ると落ちてたらしい
落ちたらあかんがな!!
0896NAME IS NULL2009/10/27(火) 18:43:53ID:sUuPMg09
rdsのdb snapshotってどうやって実現してるんだろう?
myiで運用しながらのコピーだとロックがかかるし時間もかかるし
0897NAME IS NULL2009/10/27(火) 19:12:02ID:uR+M8xJO
チューニングはどうなってるんだろう?
結局のところ生のmysqlだから
コネクションが足りなくなったりすることもあると思うんだけど
0898NAME IS NULL2009/10/27(火) 19:24:24ID:PGbJvuUV
http://www.atmarkit.co.jp/news/200910/27/aws.html

デフォルトのDBエンジンはInnoDBだが、ほかのエンジンも利用できる。
スキーマ設計、インデックス作成、パフォーマンスチューニングなども可能で、
使い勝手はネイティブのMySQLと大きく違わないという。

結局チューニングは自分でしないといけないのか
面倒くささあんまり変わらないじゃないか
0899NAME IS NULL2009/10/28(水) 03:25:32ID:AvOezp4B
スレ違いならごめんなさい。
質問なのですが、
テーブルで使われているデータを調べて、最適な型を教えてくれるコマンドがあったはずなのですが、どのサイトを調べても出てこないので教えてください。

例えば、BIGINTで宣言されたカラムに、INT以下のデータしか入ってなく、NULLが無い場合、INT UNSIGNED NOT NULLと出たり、
CHAR(10)にもし"YES"と"NO"しか入ってない場合は確かENUM("YES","NO")が出力されました。
探し方が悪いのか、ずいぶん検索したのですが結局出てきませんでした。
よろしくお願いします。
0900NAME IS NULL2009/10/28(水) 07:26:33ID:???
MySQL 5.1.40 の innodb で
delete from data where id is not in ( select id from list );
のように、別のリストのidに含まれない物を消そうとすると、
ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction
となってしまいます。
noo in (サブクエリ) の構文を最適化して書き直せませんでしょうか?
0901NAME IS NULL2009/10/28(水) 08:05:57ID:???
in句に相関のないサブクエリを書いちゃだめ
dataテーブルのレコード数だけlistテーブルのフルスキャンが走る

delete from data where not exists
(select 1 from list where list.id = data.id)
0902NAME IS NULL2009/10/28(水) 09:38:52ID:???
>>901
ありがとうございます。
魔法のようなクエリですね。
0903NAME IS NULL2009/10/28(水) 23:04:24ID:???
>>900
サブクエリを使わずに、
delete data from data left join list on data.id=list.id where list.id is null
という方法もある。
0904NAME IS NULL2009/10/29(木) 11:15:10ID:???
http://slashdot.jp/comments.pl?sid=472169&threshold=-1&commentsort=3&mode=thread&pid=1660225#1660234
ライセンスについてなんか論議されている。
taka2って言うのが一人だけやたら斜め上からで変な持論展開
0905NAME IS NULL2009/10/29(木) 11:25:31ID:???
>>903
ありがとうございます。
手持ちの環境では効率に差がないようですが、
サブクエリよりは、left join のほうが一般的におすすめでしょうか?
0906NAME IS NULL2009/10/31(土) 09:22:36ID:o/Jls4e4
WebサイトでMySQL5を使おうと思っています。
漢字コードは何にした方が、実務上問題が少ないのでしょうか?

よろしくお願いします。
0907NAME IS NULL2009/10/31(土) 09:56:12ID:???
>>906
utf8じゃだめなの?
0908NAME IS NULL2009/10/31(土) 10:23:52ID:???
私も文字コード迷った。
ajax使うのにらくだからと思ってサイトもDBも全部utf8にしちゃったけど、今後なにか不都合とかデメリットとかってあるでしょうか?
0909NAME IS NULL2009/10/31(土) 13:32:02ID:???
>>908
入口から出口までutf8で通すのが一番楽だと思うけど、
古い携帯とかサポートしたいのかな?
09109062009/10/31(土) 16:04:30ID:o/Jls4e4
>>907-909
レスありがとうございます。

日本MySQLユーザ会のホームページで、
「utf8 はご存じの通り、到底整理されているコードとは言い難く」って
書かれていましたので、質問させて頂きました。

>>909
「入口から出口まで」のutf8の指定場所は、
HTMLの「<meta 〜 charset=」と、
ソースエディタの漢字コード指定と
MySQLでの指定で、全てなのでしょうか?

よろしくお願いします。
0911NAME IS NULL2009/10/31(土) 16:07:59ID:???
>>910
最近のブラウザや携帯電話では問題ないよ。
IE6とか、古い携帯電話だと機種によってはutf8が甘いのもあるけど、
とりあえずは無視しても良いと思う。

utf8は根強い反対派も居るけど、俺は歓迎してるよ。
(確かに問題も含んでいるのは確かだけど。)
全部utf8で統一すれば、変換テーブル問題もないし。
ただ、適所で正規化が必要かも。そこは面倒だね。
09129102009/11/02(月) 20:07:03ID:cL+4Y1kF
>>911
レスありがとうございます

「正規化が必要」とは、どういうことでしょうか?
0913NAME IS NULL2009/11/02(月) 21:45:30ID:???
MySQL 5.1
auto_incrementに関する質問です。あれは番号を削除した場合つめる事が出来ないですよね。皆さん
どの様にされてます?独自の連番システムを作ってるとかですか?

現在作っているのはPKとしてのみ使い、それを使って検索するとか表示するとかする予定は無いのですけど。
0914NAME IS NULL2009/11/02(月) 22:11:11ID:???
>>913
どのようにしているもなにも、番号をつめる必要を感じない
0915NAME IS NULL2009/11/02(月) 22:49:21ID:???
>>914
まァそう言えばそうなんですが w

では、逆に(削除が有った時に)詰める必要があるとしたらどうすれば良いと思います?
0916NAME IS NULL2009/11/03(火) 00:26:04ID:???
>>912
ひょっとして、正規化って概念すら知らんのか?

>>915
別のカラム作れ
0917NAME IS NULL2009/11/03(火) 01:56:54ID:???
>>912
unicodeが嫌われる理由の一つが、その正規化なんですよね。
Macの「〜」とか。
まぁ、調べてみてくれ。
09189122009/11/03(火) 07:55:58ID:zLDyRTuE
>>916
レスありがとうございます。

「正規化」という言葉の意味ではなく、
「何」を正規化しなければいけないのか?
という質問です。

よろしくお願いします。
0919NAME IS NULL2009/11/03(火) 09:07:23ID:???
>>918
何って、unicodeの話してるんじゃないのか?
0920NAME IS NULL2009/11/03(火) 09:55:34ID:???
NFKCで正規化したutf8でいれてutf8_binで比較してる。
0921NAME IS NULL2009/11/03(火) 21:16:26ID:???
正規化してないShiftJISを使うことなんて普通だし、Unicodeだからといって
正規化必須ってわけじゃないからなぁ。
0922NAME IS NULL2009/11/04(水) 04:35:48ID:???
InnoDBで、多くのクライアントからupdateやselectが
たくさん(といっても10クエリ/秒)来ているとき、
ほとんどの場合で良好にさばいてくれるのですが、
あるとき、(たぶんupdate)処理がスタックして、
そのテーブルが絡むselect等も一斉に止まり、
timeoutして再び動き出すことがあります。

止まっている間、dead-lock が生じているわけでもなく
CPUやI/Oもidle状態で、なぜ止まっているのか分かりません。

試しにMyISAMにしてみると、そのロックはおきませんでした。
なので外部キー制約かと思って、InnoDBに戻して外部キー設定を外してみたのですが、
やはり同じようにロックが生じてしまいます。

ちょっとこれだけの情報で何を質問しているんだと怒られそうですが、
具体的に何がロックしているのかも分からないので、どうしたものかわかりません。
InnoDBに特有の有名な注意点があったりするのでしょうか。

抽象的な質問ですみません。
09239122009/11/04(水) 07:35:59ID:aSZSVXtb
レスありがとうございます。

正規化の意味は分かりました。

再質問ですが、
正規化しなければいけないのに、なぜutf8が良いのでしょうか?
(SJISだと、どういう欠点があるのでしょうか)
0924NAME IS NULL2009/11/04(水) 10:14:16ID:???
0925NAME IS NULL2009/11/04(水) 12:27:01ID:???
SJISだと表示できない文字が増えてきたから
0926NAME IS NULL2009/11/04(水) 14:36:44ID:???
>>923
使う予定のアプリや文字が、全部sjis前提なら、何も問題ない。
でも、そんなことあるか?
0927NAME IS NULL2009/11/04(水) 14:51:59ID:???
最初から最後までSJISならいいけどね。
途中Unicodeになると、変換再変換が面倒くさい。
0x5c,0xa5みたいなのとか。
0928923=9122009/11/04(水) 16:43:22ID:aSZSVXtb
>>925-927
レスありがとうございます
0929NAME IS NULL2009/11/04(水) 22:21:36ID:gnz0MBuh
+----------+---------+-------+----+
| 日時  | 人(id) |入・出 | 時間  |
+----------+---------+-------+----+
| 20061002 | 222627 | b | 13:26:47 |
| 20061002 | 222627 | c | 13:36:14 |
| 20061002 | 585717 | b | 13:36:41 |
| 20061002 | 585717 | c | 13:37:26 |
| 20061002 | 1142463 | b | 13:38:01 |
| 20061002 | 1142463 | c | 13:40:50 |
| 20061002 | 402399 | b | 13:40:58 |
| 20061002 | 402399 | c | 13:44:24 |


↑は,銀行の窓口のテーブルです。
bが人が入ってきた時間で,cが出ていった時間とします。

そこで,人が窓口にいない遊休時間の平均を算出したいのですが,
どのようにしたらよいのでしょうか?
MySQLは5.0です。
0930NAME IS NULL2009/11/04(水) 23:54:54ID:???
なんでそんなテーブルにしているの?
09319292009/11/04(水) 23:58:22ID:gnz0MBuh
>>930
レスありがとうございます。
テーブルは他人が作ったもので、私が遊休時間の平均を算出するように頼まれました。

例えばどういうテーブルが良いでしょうか?
0932NAME IS NULL2009/11/05(木) 10:33:43ID:???
テーブルきれいにしても、
プログラムでゴリゴリ書くしか思いつかんなあ

int number = 0;
boolean idle = false;
long begin = 0L;
long end = 0L;

rs = conn.executeQuery("select ... from ... order by 時間");

while (rs.next()) {
 if (rs.getString(3).equals("b")) {
  number++;
 } else if (rs.getString(3).equals("c")) {
  number--;
 } else {
  throw ...
 }
 
 if (number == 0) {
  begin = rs.getTimestamp(4).getTime();
  idle = true;
 } else if (idle == true) {
  end = rs.getTimestamp(4).getTime();
  idleList.add(end - begin);
  idle = false;
 }
}
0933NAME IS NULL2009/11/05(木) 12:07:22ID:???
>>931
素直に集計スクリプト書いたら?
0934NAME IS NULL2009/11/05(木) 13:16:28ID:???
窓口テーブルが大きいと問題があるかもしれないけど。

SELECT AVG(diff) FROM (
SELECT IF(
COUNT(IF(c2.入・出 = 'b', 1, NULL)) = COUNT(IF(c2.入・出 = 'c', 1, NULL)),
TIME_TO_SEC(TIMEDIFF(c1.時間, MAX(c2.時間))),
NULL
) AS diff
FROM 窓口 c1, 窓口 c2
WHERE c1.入・出 = 'b' AND c1.時間 > c2.時間
GROUP BY c1.id
) diffs;
0935NAME IS NULL2009/11/05(木) 13:38:27ID:???
create table hoge(
ent_date varchar2(8)
,guest_id varchar2(6)
,ent_type varchar2(1)
,ent_time date
);

create table time_table ( t_time varchar2(4) );
0936NAME IS NULL2009/11/05(木) 13:41:04ID:???
insert into time_table
select str_h || m2.str_m2 || m1.str_m1 -- as t_time
from (
select str_h2 || str_h1 as str_h
from
( select '0' as str_h2 from dual
union all select '1' as str_h2 from dual
union all select '2' as str_h2 from dual ) h2
,( select '0' as str_h1 from dual
union all select '1' as str_h1 from dual
union all select '2' as str_h1 from dual
union all select '3' as str_h1 from dual
union all select '4' as str_h1 from dual
union all select '5' as str_h1 from dual
union all select '6' as str_h1 from dual
union all select '7' as str_h1 from dual
union all select '8' as str_h1 from dual
union all select '9' as str_h1 from dual ) h1
where str_h2 || str_h1 between '00' and '23' ) hh
,( select '0' as str_m2 from dual
union all select '1' as str_m2 from dual
union all select '2' as str_m2 from dual
union all select '3' as str_m2 from dual
union all select '4' as str_m2 from dual
union all select '5' as str_m2 from dual ) m2
,( select '0' as str_m1 from dual
union all select '1' as str_m1 from dual
union all select '2' as str_m1 from dual
union all select '3' as str_m1 from dual
union all select '4' as str_m1 from dual
union all select '5' as str_m1 from dual
union all select '6' as str_m1 from dual
union all select '7' as str_m1 from dual
union all select '8' as str_m1 from dual
union all select '9' as str_m1 from dual ) m1
-- order by t_time
;
0937NAME IS NULL2009/11/05(木) 13:42:08ID:???
select
100 * ( 1 - sum(excl_flg) / count(*) )
from (select
tt.t_time
,u_io.excl_flg
from time_table tt
left join
(select distinct
1 as excl_flg
,i_time
,o_time
from ( select guest_id ,to_char(ent_time ,'hh24mi') as i_time from hoge where ent_type = 'b' ) u_i
left join ( select guest_id ,to_char(ent_time ,'hh24mi') as o_time from hoge where ent_type = 'c' ) u_o
on u_i.guest_id = u_o.guest_id ) u_io
on tt.t_time between i_time and o_time
);
0938NAME IS NULL2009/11/05(木) 13:48:24ID:???
935-937

時間のテーブルを別に用意してやってみた。

・窓口の数
・人の滞在時間の重複
・平均算出の単位
・窓口の開始・終了時間
・処理単位は秒?分?

このあたりも考えないとダメだけど。
あと、構文はOracleです…。

ていうか質疑応答スレじゃないのに良かったのかな。
0939NAME IS NULL2009/11/06(金) 09:54:48ID:???
>>938
神クエリを見ることが出来たので、許す。
0940NAME IS NULL2009/11/06(金) 10:36:52ID:???
まさかSQLだけでやっちまえるとは…
0941NAME IS NULL2009/11/06(金) 11:11:52ID:ZUvcKSUf
リアルにすごいなこれ
0942NAME IS NULL2009/11/06(金) 14:20:10ID:???
字下げが詰められちゃったSQLを3人も(!)読んでもらえたみたいでマジ感謝です。
行頭スペースを全角で置き換える気力がなかったの。ごめんね。

つーか、MySQLのスレでOracleSQL書いて褒められるってwww
質問者さんには伝わったかなぁ…あ、ホントに使うなら検証してね!

ノシ
0943NAME IS NULL2009/11/08(日) 15:54:38ID:???
>>942
SQLの方言、ちょっと使わないと忘れるよな。

そういえば、sedやawkは忘れないのに、perlは使えなくなるのはなんでだぜ?
0944NAME IS NULL2009/11/09(月) 13:48:24ID:???
非常に初心者的な質問ですみません
今までSQLite使っていました
SQLiteはファイルシステムにデータベースを生成する場合を使って、samples.sqliteというファイルを事前に作り、そこにに書き込んでいました
今MySQLを使っているのですが、MySQLはいったい何処の何にデータベースを書き込んでいるのでしょうか?
MySQLフォルダを見ても何か書き込みようのものが見当たるわけでもありませんし、パスはどこに指定されているのかとか良く分かりません
テーブルとかのデータはいったいどこに格納されているのでしょうか?
0945NAME IS NULL2009/11/09(月) 14:05:02ID:???
C:\mysql\data\testdb とか
/var/lib/mysql/testdb とかの
testtbl.frm
testtbl.MYI
testtbl.MYD
など。
0946NAME IS NULL2009/11/09(月) 14:21:34ID:???
ファイルベースじゃないと何か不安だなぁ
専用機なら良いんだろうけど
0947NAME IS NULL2009/11/09(月) 14:24:16ID:???
>>945
すみません、色々再確認してみたのですが、どうもそのようなファイル、フォルダがbin、lib、shareしかなく、見当たりませんで、拡張子も.pdbというのがいくつかあるだけでした

で、my.iniを確認してみたのですが、

#Path to installation directory. All paths are usually resolved relative to this.
basedir="C:/Program Files/MySQL/MySQL Server 5.1/"

#Path to the database root
datadir="C:/Documents and Settings/All Users/Application Data/MySQL/MySQL Server 5.1/Data/"

というのが見つかったのですが、このどちらかのパスで指定された場所にあるのでしょうか?
デフォルトのまま使っているのですが、Application Dataというフォルダが自分のには見当たらなくて、結局何処にあるのか分かりませんでしたが
09489472009/11/09(月) 14:56:33ID:???
解決致しました
0949NAME IS NULL2009/11/09(月) 15:19:33ID:???
なぜどう解決したか書かない。
0950NAME IS NULL2009/11/09(月) 16:00:10ID:???
解決方法を他人に教えるのが勿体ない!みたいな心理が働いてるんじゃね
0951NAME IS NULL2009/11/09(月) 16:02:40ID:???
Application Dataは隠しファイル属性だね
09529482009/11/09(月) 16:04:41ID:???
あぁ、すみません

xcopy コピー元ディレクトリ コピー先ディレクトリ /S /E

コレを使って、C:/Program Files/MySQL/MySQL Server 5.1/の下に自分で作ったdataフォルダの中にコピーを入れました
そしたら自分で作ったデータベースの名前のフォルダが出てました
その上でパスをこのフォルダに変更しました

別に出し惜しみしたわけではありません
悪しからず
0953NAME IS NULL2009/11/09(月) 23:32:50ID:9hIX4tWW
select * from user WHERE id ='3fjsaod'
のクエリでid 3 が検索にヒットしてしまうのですが何がおかしいでしょうか?
ちなみにPHP+mysql5です
0954NAME IS NULL2009/11/10(火) 02:30:18ID:???
Windows7 x64 でローカル環境で遊んでいるのですが、

■Apache 2.2  →  http://localhost/のページは表示される。
■MySQL 5.1  → Command line clientからはDBにアクセスできる。
■PHP 5.2.5 → http://localhost/index.php のスクリプトはちゃんと動く。
■phpMyAdmin → rootでパスワードを入力して実行を押すとパスワードのエラーは出ずに
「Internet Explorer ではこのページは表示できません」 となる。

Vista x64 home premiumの時はphpMyAdminもちゃんと動いていたのですが、
Win7proにしてインストールし直した時に何か設定が変わったのか、ブラウザでphpMyAdminのログイン後の表示ができません。
何がわるい?
0955NAME IS NULL2009/11/10(火) 13:58:34ID:IvLtg11n
質問させてください。レストランのメニューの一覧を作るプログラムを書いています。

0)関連するテーブルは次の2つ
1)「メニュー自体のテーブルmenuTable(id, uId, menuName, price, category)」
2)「メニューのカテゴリーのテーブルcategoryTable(id, uId, cate1, cate1_open, cate2, cate2_open, …中略…cate5_open)」
3)2つの関係は、menuTableのcategoryの値は"cate1" または "cate2"が入る。uIdは登録ユーザで両方とも同じ。

この条件のとき、所属するカテゴリーが公開状態(cate1_openもしくはcate2_open(初期値0)が1の場合)のメニューだけ
SELECTしたいと思います。
どういうSQLを書いたら良いでしょうか?
テーブルJOINしてPHPで公開してないアイテムを除外して出力が賢いかと思いましたが、クエリで実現したいです。
よろしくお願いします
0956NAME IS NULL2009/11/10(火) 14:19:06ID:???
雰囲気としてはこーゆーこと?

select
   id
  ,uid
  ,menuName
  ,price
  ,category
from menuTable mt inner join
  (   select id ,uid ,cate1 as cate from categoryTable where cate1_open = 1
   union select id ,uid ,cate2     from categoryTable where cate2_open = 1 ) ct
on mt.id = ct.id
and mt.uid = ct.cid
and mt.category = ct.cate
order by id
;

全然動かしてないから構文エラー出るかも…。
idはそれぞれのテーブルで関連無いのかな。
不要なら結合条件から外してくだせぇ。
0957NAME IS NULL2009/11/10(火) 21:17:27ID:???
ん?cate1_openは文字型なのにcategoryは数値型なのか?
0958NAME IS NULL2009/11/10(火) 21:18:20ID:???
あ、逆か。
09599552009/11/10(火) 22:50:37ID:???
>>956-958
ありがとうございます。LEFT JOINしか使ったことがないのでイマイチよくわからないですが、勉強してみます。

もう一つ、漠然とした質問なんですが、よくjoinを使った場合と個々のテーブルに複数回クエリした場合で
必ずしもjoinの方が早くなるわけじゃないと言いますが、何万件以上の規模にならなければ
そんな差は出ないものでしょうか? 数千件程度で遅くなったりしますか?(JOINで)
0960NAME IS NULL2009/11/11(水) 09:30:46ID:???
ほんとSQLは難しい。おまえら尊敬するよ。
0961NAME IS NULL2009/11/12(木) 16:22:19ID:satwQTs/
C APIにおけるプリペアードステートメントの質問です。
下記のようにstmt1を閉じる前にstmt2を生成すると、最後の行で
"Commands out of sync; you can't run this command now"エラーが
起きてしまいます。
1つのコネクションで複数のクエリを同時に発行したいのですが、どう
実装すれば良いのでしょうか。

MYSQL_STMT *stmt1 = mysql_stmt_init(&mysql);
char *query1 = "select * from foo";
mysql_stmt_prepare(stmt1, query1, strlen(query1));
mysql_stmt_execute(stmt1);

MYSQL_STMT *stmt2 = mysql_stmt_init(&mysql);
char *query2 = "select * from bar";
mysql_stmt_prepare(stmt2, query2, strlen(query2));
0962NAME IS NULL2009/11/13(金) 00:16:01ID:???
>>961
mysql_stmt_bind_result() してみるとか。
0963NAME IS NULL2009/11/13(金) 01:40:11ID:???
のんきだね〜皆さん
オラクルのSUN買収でMySQLの行く末があやしい状態なのによお

linuxディストリにMySQLがバンドルされなくなったら面倒だろ?
forkが出てきたとしても、PHPが対応するとも限らんだろ?

どうなっちまうのかねえ〜
0964NAME IS NULL2009/11/13(金) 01:55:51ID:???
ぺちぱー乙でありまする☆
0965NAME IS NULL2009/11/13(金) 06:41:46ID:???
MySQL使えなくなったら違うの使えばいいだけだろ
意味分からん
0966NAME IS NULL2009/11/13(金) 07:47:54ID:???
GPLでもあるから心配してない。
0967NAME IS NULL2009/11/13(金) 11:12:46ID:???
文字コード問題、どうにかしてくれないかなぁ・・・
0968NAME IS NULL2009/11/13(金) 14:03:47ID:???
文字コード問題って、今でも残ってるのは
UTF-8の4バイト文字対応ぐらいじゃない?
0969NAME IS NULL2009/11/13(金) 14:51:04ID:???
>MySQL使えなくなったら違うの使えばいいだけだろ
無駄な工数といえる
0970NAME IS NULL2009/11/14(土) 01:53:42ID:X2Zii3C+
文字コードの事なんだけど、以前はujisで登録してたけど少し前に“〜”が“?”に文字化けしてるのに気がついてeucjpms使い始めたんだけど、もしかしたら気づく前にも機種依存文字使ってたかもしれないと思って探したらやっぱりあった。
でもテーブルの量が多すぎて修正しきれないんだけどいい方法無いですか?
0971NAME IS NULL2009/11/14(土) 05:28:10ID:???
>>970
バックアップ取ってこっそりかえてみて、苦情が来なければOKとか…。
そんな変態コード使うとろくな事無いぞ。
0972NAME IS NULL2009/11/14(土) 11:08:17ID:???
mysql 5.1.37 WixXP sp3
mysqldumpで取得したファイルをtestに入れてみようと思い、以下の
コマンドを入れたのですが、

c:\>mysql test < "c:\data.sql" -u root -pxxxxx

ERROR at line 76:Unknown command '\''.

と出てしまいます。念のため同じくmysqldumpで取得している
他のDBを同じコマンドで入れてみたらそちらは正常に入れる事が出来ました。
両方ともDBの中のテーブルはInnodb、キャラクタセットはcp932で作っている
のですけど。
で、mysqldumpで出来たファイルの中身を秀丸(utf-8でエンコードし直し)でみると
らしき所には
'<Sample>\r\n と確かに'\'があります(text型のカラムの所ですけど)。

どうすれば、リストア出来るのでしょうか?

0973NAME IS NULL2009/11/16(月) 17:06:08ID:izYklsWS
table hoge
1,a
1,b
2,a
3,a
3,b
4,a

これから結果を下記のように取り出すことは出来るのですか?

結果:

1,ab
2,a
3,ab
4,a
0974NAME IS NULL2009/11/16(月) 17:43:44ID:???
group_concat
0975NAME IS NULL2009/11/16(月) 18:38:49ID:???

select ifnull(max(id),0), count(*) as kensu from data

としているのですけど、ifnullってmysql固有の関数ですよね?
それでこれを標準のcaseを使って書き変えた場合、どのように
書けば良いのでしょうか?
0976NAME IS NULL2009/11/16(月) 19:10:37ID:???
>>974
ありがとうです。
あるんですねー。
手元の本には見つけらんなーと
思っていたら、バージョン3とか・・・。
09779732009/11/17(火) 18:40:39ID:LfUIkQIT

これでいけるとおもいきや、
リリース環境のmysqlバージョンが4.0.24で、
GROUP_CONCATが使えません orz
他の方法ありますか?
0978NAME IS NULL2009/11/17(火) 23:12:16ID:???
他にないからgroup_concatができたんだと思いますよ
プログラムでがんばってください
0979NAME IS NULL2009/11/18(水) 01:48:14ID:sB/M8f+C
MySQLのin句で指定できる項目の数には制限があるのでしょうか?
噂によるとオラクルでは1000個以上の項目をin句に指定するとエラーになるそうです。
このような制限はMySQLにもありますか?
あるとしたら、それは何個まででしょうか?また、制限以上の個数をin句に指定したい場合のSQLの書き方を教えてください。

よろしくお願い致します。
0980NAME IS NULL2009/11/18(水) 04:43:46ID:???
手元ですぐテスト出来そうなもんだが
どこまで他力本願なんだか
09819722009/11/18(水) 14:55:49ID:???
自己解決
mysqldumpでダンプを取得する際に以下のパラメータを追加

--default-character-set=cp932

でダンプを取り直し、それをtestDBに入れたらすんなり入りました。


0982NAME IS NULL2009/11/19(木) 15:18:39ID:T8+3uiLr
SELECTの内容をUPDATEするにはどうしたらいいでしょうか?

update hoge_table set h1 = $1,h2 = $2,h3 = $3,h4 = $4 where id =1;
select h1,h2,h3,h4 from fuga_table where id =3;

サブクエリだといけると思うのですが全部サブクエリはさすがに重たい処理になる気がしました。
update hoge_table set h1 = (select h1 from fuga_table where id=3),h2 = (select h2 from fuga_table where id=3),長いので省略... from fuga_table where id =3;

ご教示お願いいたします。
0983NAME IS NULL2009/11/20(金) 02:38:32ID:???
>>982
deleteしてinsertするのはどう?
insert into hoge_table select h1,h2,h3,h4 from fuga_table where id=3;
トランザクション使えば、データの整合性は問題ないし。
0984NAME IS NULL2009/11/20(金) 21:15:31ID:fcpTVk0Z
以下の条件を満たすクエリはどう書いたらいいでしょうか?

1)登録ユーザー名と、そのユーザーがアップロードした直近の写真3つをリスト表示するアプリ用のクエリ。
2)ユーザーは複数。アップできる写真に上限はない。
3)ユーザテーブル uTable は、uId , uName
4)写真テーブル pTableは、id uId pName

自分なりに作ったのは 
SELECT uTable.uId, uTable.uName, pTable,pName
FROM uTable LEFT JOIN pTable ON uTable.uId = pTable.uId
って感じだったのですが、これだとユーザとその登録写真全てが取れるのはいいけど
写真100件写真を登録してたら不要な97枚までとってしまい無駄です。
どうしたら、3つに限定できますか? LIMIT 3と末尾に書いたんですが、
当然ユーザまで限定されてしまいダメでした。 宜しくお願いします。
0985NAME IS NULL2009/11/21(土) 17:59:29ID:???
MySQL 5.1

indexに関する質問です。Innodbでレコードを削除し、
其の後てOptimize tableで最適化した時、indexも合わせて最適化
されるんですか?

0986NAME IS NULL2009/11/22(日) 04:58:46ID:ViAte70g
>>984
これは1つのSQLだけでは実行できない。
以下のように2段階で行うしかない。

1. select uId from uTable.

2. select pName from pTable where uId = {1で取得したuid} limit 3
→これはユーザ数分実行する。

あと、テーブルの設計がまちがってると思う。
pTableの主キーがuIdならテーブルを分割する意味はない。
写真テーブルは、pId, pName, uId(主キーはpIdな)とするべき。

あと、「直近の」を判断する情報がない。
pTableにタイムスタンプのカラムを追加するか、
pIdをauto_incrementにした上で、order by pId desc limit 3みたいにしなきゃだめだ

0987NAME IS NULL2009/11/22(日) 09:04:33ID:???
>>985
される。InnoDBのoptimize tableは
create table as selectしてテーブルを作り直しているので
インデックスも作り直される。
0988NAME IS NULL2009/11/22(日) 10:44:28ID:???
>>987
回答有難うございます m(_ _)m
09899842009/11/22(日) 12:50:06ID:HWUWqa+A
>>986
ありがとうございます、感謝いたします。

初心者で、どういうものだったら一つのクエリで実現できるのか、判断できないんで困ってました。
クエリを2つ実行する必要があると言うことですが、現実には
1つ目のクエリで1000人分のuIdを取得した場合、2つ目のクエリは1000回発行することになります。
そんなことしてもDBは大丈夫なんでしょうか? 全然平気なのかなぁ。。
たとえば、写真の登録を上限10個にした場合、無駄なデータ取得は10-3で7つです。
クエリ1回だけど7つ程度の無駄なデータの取得負荷あり(JOINを利用)と、1000回クエリはどっちがマシなのか、
判断するにはどうしたら良いでしょう?そういう本があるんですか?

>あと、テーブルの設計がまちがってると思う。
>pTableの主キーがuIdならテーブルを分割する意味はない。
ごめんなさい、情報の書き方が正確じゃなかったです
pTableの主キーはid(auto_increment)なんですが、そうだとしても設計が間違ってるでしょうか?
09909842009/11/22(日) 14:25:24ID:HWUWqa+A
すみません、立て続けで申し訳ないですが質問です。
SELECTを実行しようとしたらエラーになり、WHERE以下の条件に指定したカラムが存在しないと言われます
#1054 - Unknown column 'table2.infoOpen' in 'where clause'  と。

WHERE table1.`infoOpen`=1
AND table2.`infoOpen`=1
AND table3.`infoOpen`=1

1行目に異常があって、その直後に続く条件がエラーになるのかなと思い2行目を削除しても
AND table3.`infoOpen`=1 は何の問題もなくクエリ成功します。
なぜでしょうか? 
table2.`infoOpen`は確実に存在してるんですが。phpMyAdmin で確認しても値も入って存在してます。。
怪しい点などご意見貰えたら嬉しいです。くだらない質問ですみませんが、宜しくお願いします。
09919842009/11/22(日) 14:35:54ID:???
補足です。mySQLサーバのバージョン: 5.0.45を利用してます
0992NAME IS NULL2009/11/22(日) 14:52:45ID:???
`` がないからでは?
09939842009/11/22(日) 16:01:39ID:???
>>992
ありがとうございます。でもそれだと上下の条件も同じだし…
試しに全てのテーブル名とカラムを`で囲みましたが結果は同じでした。なぜだろう…
0994NAME IS NULL2009/11/22(日) 21:34:07ID:???
イージーチョンボっぽいな
よ〜く見比べてみろ
0995NAME IS NULL2009/11/22(日) 23:13:21ID:???
>クエリ1回だけど7つ程度の無駄なデータの取得負荷あり(JOINを利用)と、1000回クエリはどっちがマシなのか
前者はメモリ領域を無駄に食うだろ。JOINするなら尚更。
DBが別サーバならその分通信帯域も食う。
しかも結果を受け取った後スクリプト側で処理するんだろ。CPUリソースまで食う。
0996NAME IS NULL2009/11/22(日) 23:14:29ID:???
7つ程度の無駄なデータというが、自分で例を出してる通り1000人分取得するなら
7000も無駄が発生するんだ。よく考えてみ。
09979842009/11/22(日) 23:37:31ID:???
>>994-996
どうもありがとう、ほんとにありがとう
そのメモリとかの事情がわからないんですが、ともかく、手間を惜しまないってのが基本ですね
複数のクエリを発行てことはトランザクションが必要になるのかな。やってみます、ありがとう
0998NAME IS NULL2009/11/23(月) 02:04:55ID:???
この先言一体どうなるんだろうね〜MySQLは
コソーリ教えてよオラクルさんよ
0999NAME IS NULL2009/11/23(月) 07:05:55ID:Q8mgWefm
ume
1000NAME IS NULL2009/11/23(月) 07:22:03ID:???
MySQL 総合 Part17
http://pc11.2ch.net/test/read.cgi/db/1258928470/l50
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。