MySQ乙
3?
Version4の4!!
5 :
NAME IS NULL :2005/07/17(日) 19:04:30 ID:KDZbilCa
Mysqlのselect文は他のDBのselect文と書式が違うのでしょうか。 select * from user where name = "root"; や、 select * from user where name = "root"; と打つと、 『Illegal mix of collations (sjis_japanese_ci,IMPLICIT) and (latin1_swedish_ci,COERCIBLE) for operation '='』 というエラーが表示されます。 レベルが低くて申し訳ないですが、ご教授お願い致します。
7 :
NAME IS NULL :2005/07/17(日) 19:45:10 ID:KDZbilCa
ありがとうございます。 文字コードを指定しないといけなかったんですね。 (私の使ってる本にはこんなこと書いてなかった・・・)
>>7 その本には喪前さんの使ってるMySQLのバージョンについて
説明したとは書いてないだろ?
9 :
nakano :2005/07/17(日) 21:35:13 ID:alIwKZDq
レベルの低い質問で恐縮です。既出かもしれませんが、教えていただけないでしょうか。 MySQL4.0.24をインストールしてpingを打つと、 C:\mysql\bin>mysqladmin ping mysqladmin: connect to server at 'localhost' failed error: 'Access denied for user 'ODBC'@'localhost' (using password: NO)' このようになってしまいます。青信号はついているのですが…。 やさしい方、教えていただけないでしょうか。 よろしくお願いします。
>>9 mysqladmin ping -uユーザー名 -pパスワード
>>9 あのさぁ、エラーメッセージが表示されてるでしょ。
その意味を辞書を引いてみようとか、googleで検索してみようという気はないの?
mysql Access denied for user ping 辺りで検索してみると引っかかるでしょ。
レベルが高い、低いではなくてあなたの姿勢の問題。
12 :
nakano :2005/07/17(日) 22:33:27 ID:alIwKZDq
>>9 さん
ありがとうございます。
>>10 さん
ぐぐってもうまくいかないんです。
もうちょっといろいろやってみます。
>>5 グーグル先生に"Illegal mix of collations"と聞くとヒントぐらいは
得られそうなもんだが。
手元の本を見るか2chで聞くぐらいがオマイさんの自助努力なのかい?
>>13 予想するに、手元の本のMySQLのバージョンが低いんじゃね?
15 :
NAME IS NULL :2005/07/17(日) 23:47:29 ID:p/tFoT79
f48.aaa.livedoor.jp/ にてmysql登録をしかねやんMysqlというアプリでテーブル作成まではうまく言ったのですがinsert文を発行したいと思い作成したテーブルを選択した状態で設定→SQL発行とすると必ずエラーが発生しアプリが落ちてしまいます。 これはアプリのバグなのでしょうか私のやり方が間違っているのでしょうか?どなたかご存知の方ご教授ください。よろしくお願いします。
16 :
NAME IS NULL :2005/07/18(月) 03:07:28 ID:vyEXGHNV
夏だな・・・・
暑いから嫌い!
19 :
NAME IS NULL :2005/07/21(木) 12:03:46 ID:NbONOxT/
逆 between のようなことをすることは出来ますでしょうか? date型で、1つのデータに2004-01-25, 2004-05-30 といった二つのカラムがある のですが、select で 2004-02-01 という中間の値を入れた場合にhitさせたいの です。 可能でしょうか? 具体的にはstartとendというカラムがありまして、以下のよう な感じで入っています。 id, start, end 1, 2004-01-03, 2004-03-20 2, 2004-01-09, 2004-02-01 3, 2004-12-10, 2005-06-03 ここで、 2004-01-10 と検索した場合に、1と2を取得したいのですが....
20 :
NAME IS NULL :2005/07/21(木) 12:10:57 ID:NbONOxT/
ああ、そうか。 betweenのような句を探さないで、普通に <= >= こんなんでやればいいんですね。 失礼しました。
>>20 もう解決したっぽいけど、こう書くこともできるよ
select * from テーブル where '2004-01-10' between start and end
22 :
NAME IS NULL :2005/07/21(木) 12:40:04 ID:NbONOxT/
>>21 between の左側に値を置いても大丈夫なんですね(>_<)
知らなかった...。有難う御座います。
not between と言うのもアルヨ
24 :
1 :2005/07/21(木) 18:25:30 ID:hG6IYky3
うげ
サブクエリを使わなきゃムリっぽいSQL文が必要だったので 4.0から4.1に移行してみたけどなんか文字バケまくったり動かすのにかなり手間どった・・・。 まだ4.0使ってる人多いみたいだけど、まだ4.1は触らないほうが無難だったりするのでしょうか?
26 :
NAME IS NULL :2005/07/22(金) 16:58:58 ID:AOT0Z6JT
>>25 ver4.1.12以上、ver5.0.4以上でMySQLサーバ自身の日本語問題は全て解決した。
長い目でみたら、機会があるうちに移行するのも手かと。
もちろんちゃんと勉強した上でね。
27 :
NAME IS NULL :2005/07/22(金) 17:00:26 ID:AOT0Z6JT
>>25 どうしてもサブクエリを使わないと駄目なんですか?
CREATE TEMPORARY table...じゃあ要件満たしませんか。
サブクエリの内部実装的にはTEMPORARYテーブルを使っている気がするので。
28 :
25 :2005/07/22(金) 17:21:27 ID:???
ててててんぽらりてーぶる!?!? そんなのあったのかorz。
29 :
25 :2005/07/22(金) 18:44:42 ID:???
やべぇ・・・temporary tableってすげぇ便利・・・。 なんでもっと早く知らなかったんだorz。 なんか住所録の情報を入れてたテーブルをphpMyAdminで参照すると 以前は問題なかったのに Warning: mb_strpos(): Unknown encoding or conversion error. こんなのが出るように・・・orz。 シフトJISにしてるしMySQL上でも自作のPHPからでもちゃんと見えるのに・・・。 戻そうかどうしようか考え中・・・。
30 :
NAME IS NULL :2005/07/22(金) 18:49:48 ID:jV7W8Ozy
MYSQLの5.0.7ってまともにインスコすらできん .sockが生成されないとかありえんわ。最新版は怖いね
31 :
25 :2005/07/22(金) 20:48:06 ID:???
今度はフォームからデータベースに登録した文字列の間に意味不明に\が出てくるよ・・・。 もういやだ・・・。戻そ・・・。
32 :
NAME IS NULL :2005/07/23(土) 00:53:17 ID:iD3b4jZ1
>>30 ver5.0.3くらいから5.0系使ってますがインストールで躓いたことはないなあ。
検証用なんで適宜新しいバージョンにしている。WindowsとLinux両方で。
33 :
NAME IS NULL :2005/07/23(土) 01:11:38 ID:whbB9Rh8
>>30 5.0.7をTouboLinux、Windowsには95,NT4,2000,XPに入れてみたけど、Win95だけだめぽ(Winsockのせいではなく・・・)。
だけじゃDLLが足りないのか、デバイスが作動していません(既に記憶に無いでしょうが、win95時代はよく見たアレ)で動いてくれない。
何が足りない(or壊れてる)のかは不明。。。
InnoDBを試してみたんだけど、MySQLのコンソールからinsertとか普通にできちゃうけど、 start transactionは不要なんでしょうか? set autocommit=0にしても変わらない・・・。 どこいらへんがトランザクションなカンジになってるんでしょうか?
35 :
34 :2005/07/24(日) 22:06:24 ID:6b1W+xWK
あああ、set autocommit=0ってセッションごとに必要だったのか。 解決しました。
36 :
NAME IS NULL :2005/07/25(月) 20:01:31 ID:JMYcapmE
重複したレコードを除いたレコード数の結果が欲しいのだが、 通常のレコード数を求める時には、 select count(*) from db; distinctはうまく使えないようだし・・・。
>>36 失礼、解決しました。
やはり、distinct 使うのですね。
select count(distinct レコード名) from db;
ということですね。
これで、重複データを除いた、レコード総数が返ってきますね。
38 :
NAME IS NULL :2005/07/26(火) 18:15:37 ID:05R6nAO8
あ〜混乱してきました。 助けてください。 tb_a: 名前,購入商品 name1,a name2,b name3,a name2,b name2,a name4,a name2,a name3,c 上記のようなテーブルがあります。 aの商品のみ購入した人はどのようなクエリ となるどでしょうか? 上記の場合は、2名です。 name1,a name2,a よろしくお願いします。
39 :
38 :2005/07/26(火) 18:18:52 ID:05R6nAO8
> 上記の場合は、2名です。 > name1,a > name2,a ダメだー。間違っていました。^^ 結果リストは、 name1,a name4,a が欲しいです。
>>38 select tb_a.* from tb_a
inner join (select name from tb_a group by name having count(item) = 1) as x
on tb_a.name = x.name
where tb_a.item = 'a';
41 :
38 :2005/07/26(火) 19:07:16 ID:05R6nAO8
>>40 早速のレス有難う御座います。
実行してみた所、エラーが出てしましました。
MySQLのメッセージ -->
#1064 - You have an error in your SQL syntax near '(select name from tb_a group by name having count(item) = 1) as x
on tb_a.nam' at line 2
バージョンの問題でしょうか・・・。
MySQL 3.23.58 でした。
でも、方向性がなんとなくわかりましたので、
がんばってみます。
42 :
38 :2005/07/26(火) 19:25:56 ID:05R6nAO8
それから、例のテーブルが悪かったのですが、
name , item
-----------
name1,a
name2,b
name3,a
name2,b
name2,a
name4,a
name2,a
name3,c
name1,a <--- 重複の可能性もあります。
>>40 さんにご提示頂いた、クエリを読み解きながら思考中。
43 :
NAME IS NULL :2005/07/26(火) 19:38:25 ID:HBqC/CKY
>>42 そのバージョンじゃサブクエリ使えないよ。
>>42 重複した場合、name1 は取得対象なの?
取得対象だと、HAVING COUNT(xxx) = 1 の条件にマッチしないから
>>40 のクエリではダメだよ。
45 :
38 :2005/07/26(火) 20:28:17 ID:05R6nAO8
>>43 やはりそうでしたか・・・。
>>44 > 重複した場合、name1 は取得対象なの?
> 取得対象だと、HAVING COUNT(xxx) = 1 の条件にマッチしないから
>
>>40 のクエリではダメだよ。
取得対象です。
はい。クエリ読み解く中で、気が付きました。
ない頭で考えているのですが、
方向的には、一旦、item=aの条件に合致したリストを出し、
その後、でもう一度テーブルにくくり付け、itemが他に選択されていないもの
を抽出する感じかな。とまた、こんがらがってきていますが、
サブクエリ使えないときびしいのでしょうか?
46 :
NAME IS NULL :2005/07/27(水) 01:50:21 ID:zTs69tD5
>>45 CREATE TEMPORARYってver3系には使えないの?
#どうせMySQLの中じゃサブクエリもTemporaryも一緒なんじゃないかと・・・。
47 :
38 :2005/07/27(水) 03:35:34 ID:PEswNqYQ
>>46 >
>>45 > CREATE TEMPORARYってver3系には使えないの?
> #どうせMySQLの中じゃサブクエリもTemporaryも一緒なんじゃないかと・・・。
レス有難う御座います。
いろいろググッテると、上記のテンポラリーテーブルを作成してうんぬん・・・。
というようなものがあって、これってかなり便利ーみたいなHPがあったので、
気にはなっていました。今ちょこっと見てみたところ使えそう・・・。な感じです。
明日じっくり試してみます。
今日は寝ますZzz。
48 :
NAME IS NULL :2005/07/27(水) 03:45:26 ID:2Zp5SUfn
>>47 TEMPORARYテーブルとHEAPテーブル(新名称:MEMORYテーブル)はほとんど同じであった気がする。
違いは、前者は".frm"ファイルが作成されないので接続を閉じたりサーバが落ちたりするとそのテーブルそのものが
消滅するけれども、後者は".frm"ファイルが作成されるのでサーバが落ちると行データのみ消えるというところ。
どちらもメモリ上にしかアクセスしないので高速で、前者は".frm"ファイルすら作らないので一般的に重い処理な
CREATE文も気にならないのがサブクエリの代わりに使われうるところか。
あと前者はサーバ停止時にごみが残らないのも良いかも。AppServerでいうところのセッションみたいなもんだね。
まあそのHP読んだならこういうことがたぶん書いてあったのではと想像しますが。
>>48 TEMPORARYって同一接続からじゃないと見れなくね?
確認してないけど。
50 :
NAME IS NULL :2005/07/27(水) 11:26:12 ID:2Zp5SUfn
>>49 あってるよ。それも特徴の1つだったね。ぢゃないとサブクエリの代理になんて使えん。
51 :
38 :2005/07/27(水) 11:32:06 ID:PEswNqYQ
>>48 おお〜書込みしようと思うと、レスが入ってびっくり。
おはようございます。って、昼か。
レスどうもです。
参考になりました〜。
メモリ上で処理されるのですねー。
セッション内で処理されることは理解してました。
出先ほど、解決しました。
下に結果入れますので、
見ていただくとうれしいです。
かなりもっさり感がありますが。
52 :
38 :2005/07/27(水) 12:19:38 ID:???
結果報告しようと思っていましたが、 大変なことが起きました・・・。 PCがフリーズしてしまったので、しかたなく主電源で 再起動させた所、HDDから異音が・・・。 HDDさんがお亡くなりになりました。トホホ、最悪。 今から復旧作業に取り掛かりますので、 結果報告はそれからとなります。 せっかく解決して、幸な気分になろうかという時に、 ついてねー。まさに天国から地獄へいっきに落とされたよ。 うー気力がもたない・・・。では。 ノートPCより
53 :
NAME IS NULL :2005/07/27(水) 15:16:40 ID:zTs69tD5
>>52 お悔やみ申し上げます。ここにも最近同じ体験をしたものが1人。
54 :
NAME IS NULL :2005/07/27(水) 18:34:25 ID:yhPI0a2x
サーバA上のPHPからサーバBにあるMySQLに接続しようとしているのだけど、 できない。 PHPにて select * from hoge_TABLE を発行しても、エラーメッセージすら出ない 1.サーバBのポート3306は開いている サーバAから telnet サーバB 3306 とすると、MySQLのバージョンと 文字化けした文字が見え、切断される。 2.GRANTにて対象のデータベースに権限を与えた(つもり)。 Grant SELECT on hoge_DB.hoge_TABLE to user@'サーバA' identified 'hoge_pass'; mysql データベースの tables_priv 内に登録されていることを確認。 3.念のためにmysqlは再起動済み 教えてくだされ
>>54 >1.サーバBのポート3306は開いている
>サーバAから telnet サーバB 3306 とすると、MySQLのバージョンと
>文字化けした文字が見え、切断される。
ここをもう少し詳しく調査。
サーバAにインストールした(してなけりゃインストール)
MySQLクライアントツールからサーバBのMySQLサーバに接続して
上手くいくか試してみ。
56 :
NAME IS NULL :2005/07/27(水) 20:09:28 ID:yhPI0a2x
>55 申し訳ないが、どこかにやり方ないか教えてくだされ。
自分で調べてみるって発想はないんかい 2chに張り付いてレス待つだけのカスは消えろ
みなさん、
>>1 の過不足データを指摘して下さい。
ちなみに dev.mysql.com の方を掲げたのは www.mysql.com が企業サイトであるからです。
みなさんが MySQL の内部仕様を諳じるようになる日がくるといいですね。
質問させてください。 ユーザーに与える特権で、user@hostが重複した場合の優先度というのはどうなっているのでしょうか。 例えば %@% test@% で両方ともパスワードが設定されていないとします。 "test" "" としてログインしようとした場合、どちらの権限が優先されるのかという法則はあるのでしょうか。 といいますのも、とあるサーバーでMYSQLを使用したところ %@localhost パス無し test@% パスあり と設定されているらしく、どうも%@localhostのほうが優先されてしまい、"test" "pass"で入ろうとしても「パスワードエラー」が出てしまうのです。 Access denied for user そして、他のサーバーから"test" "pass"でログインしようとすると(注文した権限どおりで)入れてしまいます。 また、DBと同じサーバーから"test" "" でログインすると、最低権限でログインできてしまいました。 こうなると %@localhost のほうに優先的にログインしようとし、パスワードエラーが出ているとしか思えません。 長い文章となりましたが、どなたか「権限の優先度」についてご教授いただけませんでしょうか。 よろしくお願いいたします。
ありがとうございました。 サーバー担当に問い合わせてみます。
63 :
61 :2005/07/27(水) 22:14:36 ID:???
>>62 ごめん。もう読んではいないかな。。。
よく考えれば、先の順番にソートされるのだから
test@% と同じ権限、同じパスワードで test@localhost を作成すればいいのではないかと。
もっともセキュリティ上、%@localhost が存在するのはどうかとは思うが。
65 :
64 :2005/07/27(水) 23:56:24 ID:???
出遅れた...
>>63-64 ありがとうございました。
自宅鯖でも実験してみたところ、やはり %@localhost がいると、同鯖内からのコネクトは全てそちらに流れてしまいました。
>もっともセキュリティ上、%@localhost が存在するのはどうかとは思うが。
まったくですね。
実験用のテーブルが1つだけおいてあり、いじれるようになってました。
そのテーブルでお試しをやれということで設置したのでしょう。
しかしなんというか、このサーバー設定だと誰もDBが使えません。(外部からアクセスするならOKですが)
私以外にDBを使おうとした人が居ないってことになるんですが…。
さすがマイナー鯖…。
67 :
NAME IS NULL :2005/07/28(木) 01:41:42 ID:eXuTIbui
お決まりのこんなのがあります。 $sql = "select * from mydb"; $result = mysql_query($sql); $rows = mysql_num_rows($result); while ($row = mysql_fetch_array($result)) { ←ここ } 矢印のところ(whileループの中)で別のクエリを実行、さらにwhileを入れ子にとかってかなり変な事なんでしょうか? また、$iなんかのカウント用の変数を仕込んでループの都度、++でカウントアップ。 その変数をmysqlから読み出した$row[hoge]にevalで くっつけてeval("¥$hensu_$i = $row[hoge] ";);って感じで上書きせずに後で取り出せるようなことをした(うまくいってます)んですが、これは手法としてはいかがなもんでしょうか?
XREAでphpMyAdminを使用してテーブルを作りました。 テーブル名=access フィールド=test (tinyint(3) UNSIGNED) PHPで行の追加をしようと下記のコードを書いたのですが、行が追加されません。 <? $conn_id = @mysql_connect('localhost','ユーザー名','パスワード') or exit('失敗'); mysql_query("INSERT INTO access('test') VALUES('2')",$conn_id) or exit('書き込み失敗'); mysql_close($conn_id); ?> 色々試してみたのですが、何度やっても「書き込み失敗」が表示されてしまいます。 初心者の質問で申し訳ないのですが、どなたか原因を教えて頂けないでしょうか?
70 :
NAME IS NULL :2005/07/28(木) 02:56:46 ID:zKnSR/lj
>>54 のように「ちゃんと接続できているのか」「ちゃんとクエリがサーバに届いているのか」を見るには、
一般クエリログを使うのが良いよ。
my.cnfに
[mysqld]
log
と書いて再起動すればdataディレクトリに"コンピュータ名.log"というファイルができる。
このログファイル(一般クエリログのファイル)は、MySQLサーバが受け付けたコマンド/クエリが
単純に追記されていく。
#コマンド/クエリが正常に実行されたか、エラーになったか以前に、受け付けたものを出力。
この一般クエリログは
>>54 のような開発者向けのデバッグ用のログ出力として元々作られた機能で、
そんなときはこれをまさに使うべき。漏れもいつもお世話になってるよ。
>>68 >>69 の指摘の通り mysql_select_db をしていないのと
INSERT 文でカラム名を ' で囲っているのがおかしい希ガス。
ただのサンプルコードなのかもしれないけど、exit の部分で mysql_error を
呼び出してみると調べやすいと思う。
$conn_id = @mysql_connect('localhost','ユーザー名','パスワード') or exit('失敗 ' . mysql_error());
mysql_select_db('データベース名', $conn_id) or exit('select_db失敗 ' . mysql_error());
mysql_query("INSERT INTO access(test) VALUES('2')",$conn_id) or exit('書き込み失敗 ' . mysql_error());
mysql_close($conn_id);
>>69-71 ありがとうございます。
講習とバイトが終わったら、アドバイス通り試して御報告します。
73 :
38 :2005/07/28(木) 12:44:46 ID:IXQBxgZK
とりあえず復活。(気分は今年一番の落ち込み度w)
>>53 > お悔やみ申し上げます。ここにも最近同じ体験をしたものが1人。
どうもです。まめにバックアップですね。分かってはいるのですがね・・・。なかなか。
今回はPC内の結構な資産がぶっ飛んでしまったことがわかり、多大な時間が
消費されそうです。復旧率10%。
解決内容:
# 各選択値集計の一時テーブルを作成
create temporary table sel_a select name,count(*) cnt_a from tb_a where item='a' group by name;
create temporary table sel_b select name,count(*) cnt_b from tb_a where item='b' group by name;
create temporary table sel_c select name,count(*) cnt_c from tb_a where item='c' group by name;
#一時テーブルを結合し、抽出
select tb_name.name,cnt_a from tb_name
left join sel_a on tb_name.name = sel_a.name
left join sel_b on tb_name.name = sel_b.name
left join sel_c on tb_name.name = sel_c.name
where isnull(cnt_a)=0 && isnull(cnt_b)=1 && isnull(cnt_c)=1
結果
+----------+--------------+
| name cnt_a
+----------+--------------+
| name1 2
| name2 1
+----------+--------------+
※tb_nameテーブルは、name(名前)がユニークなテーブルです。
これで、解決しそうです。
実装するには、もう少し実験してみます。
レコード数が6万件ありますので。
もし、気になるよな所があれば指摘頂けるとありがたいです。
74 :
38 :2005/07/28(木) 12:46:58 ID:???
>>73 また、間違えてるは、
結果
+----------+--------------+
| name cnt_a
+----------+--------------+
| name1 2
| name4 1
+----------+--------------+
が正解です。
>>67 どんなSQLを書いているか分からんが、
可能性1.普通のSQL発行一発で全部処理できる
可能性2.一時テーブルかサブクエリで全部処理できる
あとPHPのコードも
指摘1.「上書きせずに後で取り出し」の意味がわかんね
指摘2.配列を使えばevalはいらない
>>73 復旧オメ。完全復活までガンガレ。
SQLは以下でいいような希ガス。一応、最終出力に商品名を入れてみたけど。
CREATE TEMPORARY TABLE sel_a AS SELECT name,item,count(*) AS cnt_a FROM tb_a GROUP BY name,item;
SELECT name,MIN(item) AS item,cnt_a FROM sel_a GROUP BY name HAVING item='a' AND COUNT(*)=1;
77 :
54 :2005/07/28(木) 13:35:35 ID:B3h8YO0T
>70 ありがと。 mysql -h サーバB -u ユーザ名 -p パスワード これにて接続できるのに、PHPからは接続できない。 $con = mysql_connect("サーバB","ユーザ名","パスワード"); この結果がこない、なんで〜〜!!
78 :
38 :2005/07/28(木) 17:31:12 ID:???
>>76 >
>>73 > 復旧オメ。完全復活までガンガレ。
ありがとう〜。
で、本題。
すごいっつーか、さすがというか、神!
実は、ご提示頂いた、クエリそのまま流し込んだのですが、
エラーも無く、結果も0で帰って来たんです。
ここから、悩みました。
どうも、HAVING item='a' AND COUNT(*)=1が機能していないぞ・・・。
で、うじゃうじゃやっていてわかりました!
バージョンの問題だと!
とAND COUNT(*)=1
が古いバージョン(3.x系かな)では、機能しないようです。
私が使えるmysqlサーバで4.0が使える所がありましたので、
そこへ、テストデータ流し込み、クエリ発行、思いっきり
正しい結果が返ってきましたよ。
SELECT name,MIN(item) AS item,cnt_a,COUNT(*) AS cnt_fl FROM sel_a GROUP BY name HAVING item='a' AND cnt_fl=1;
このように変更して、無事動作しました。
MIN(item)の使い方に、センスと経験が見えますよね。
ここ、テストに出るよ、AAでも探してきて貼り付けたいぐらいですわw。
3万件程のデータで、試してみましたが、
私が記述したクエリだと、一時テーブルは各2秒ほど時間ですみましたが、
結合部分で、いったっきり帰ってこない。あげくに、他のクエリまで、ロックかかる始末!
mysqlが実際どのように処理するか頭に無いんで、こんなことになるのでしょうね。
>>76 さんのですと、
一時テーブルに、
(2.45 sec)
抽出に
(1.19 sec)
すばらしい。
ありがとうございました。
79 :
:2005/07/28(木) 19:18:35 ID:Wm4FzOeU
数百人で利用するCGIがあるのですが、 複数のデータベースに利用者ごとにデータ入れるか、 1個のデータベースに全員分入れるかで悩んでいます。 速度とか、メモリとかサーバーに優しいのはどちらでしょうか。 複数の方がテーブル壊れたとき安心っぽい気はしてます
>>79 >複数のデータベースに利用者ごとにデータ入れるか、
リレーショナルの意味分かっていない希ガス。
81 :
79 :2005/07/28(木) 20:09:09 ID:???
失礼 複数のデータベースは1個のデータベースを1ユーザが利用 訂正
ユーザーが一人増えるごとにデータベースを増やすなんてありえねえ
500テーブル、各2万レコードと 1テーブル1千万レコードってどっちが効率いい?
要実験。
85 :
67 :2005/07/29(金) 00:06:58 ID:???
>>75 ネストされたカテゴリ、それを入れ子リストで表示。
なおかつ、常に一つのカテゴリだけが展開され、最下層の項目が展開される、とこんな感じでhtmlを吐き出すためのものなので、クエリ一発ではどうにもならないと思います。
サブクエリ、このへんは踏み込んだことがないのですが、使ってるmysqlが4.0なのでサブクエリは使えないので joinを使ってます。
>「上書きせずに後で取り出し」の意味がわかんね
htmlのコーディングがかなりややこしい事になるので、先に結果だけを変数で吐き出しておき、そこで、行数もカウント、あとで、そのカウントに応じて、htmlを吐き出すと同時に、ループ回して上書きされないようにした変数をそこで差し込む、って感じです。
mysql_fetch_arrayの上下を、tableとかulで囲まなくて済まないかな?と実験的な意味も含めてそういう書き方をしてみましたので、どうしてもそうしなければならない訳ではありません。
>配列を使えばevalはいらない
なるほど。配列ですね。苦手なもんで盲点でした。うまく使えばそんな変な事をしなくて済みそうですが、しばらく勉強しないと。
86 :
NAME IS NULL :2005/07/29(金) 00:57:41 ID:stkpnhA+
>>79 速度とかメモリとか、サーバにやさしいのは明らかに「1個のデータベースに全員分いれた」場合。
>>83 1テーブル1千万レコードの方がサーバにやさしい。
ちょっとさ、79も83も、すごく簡単にデータベース/テーブル分けるような案だしてるけど、
データベースを分ければその分ディレクトリが、テーブルを分ければその分ファイルが
生成されるんだよ?
それよにるIOリソースの消費考えたら、自ずと分かるだろうに・・・・。
いいか、一般的にデータベースのボトルネックはIO。各RDBMSベンダーともども、そのIOによる
ボトルネックを以下に攻略するかに命をかけてエンジンを実装しているのだよ。
#データ書き込みより前にトランザクションログ(追記型)を書くようにしてみたり
#ログ書き込み自体をバッファリングしてみたり
#メモリ上にキャッシュしてOKなものは積極的にキャッシュしてみたり
87 :
68 :2005/07/29(金) 02:25:16 ID:???
色々アドバイスしていただいたのにselect_dbの時点でおかしかったようです・・・。 select_db失敗Access denied for user: 'ユーザー名@localhost' to database 'access' これってセーフモードとかの関係のやつですかね?? 今日はとりあえず寝て、起きたら試行錯誤したいと思います。
88 :
71 :2005/07/29(金) 08:56:45 ID:???
>>87 PHPのセーフモードは関係ないと思うけど。
エラーメッセージを見るとmysql_select_dbの引数にデータベース名ぢゃなく
間違ってテーブル名を指定しているのが原因ぢゃない?
select_db失敗Access denied for user: 'ユーザー名@localhost' to database 'access'
~~~~~~~~~
ちょっとググってみたら以下のように設定されている模様。
XREAは使用したことないんで、データベース名のIDが何かは漏れには判らないけどね。
>>87 にも判らなければXREAに問い合わせして味噌。
データベース名:IDと同じ
ユーザ名・パスワード:FTPと同じ
89 :
71 :2005/07/29(金) 08:57:58 ID:???
>>88 ありゃ。ずれた。~~~~は、'access' の部分ね。
90 :
:2005/07/29(金) 12:47:16 ID:???
>>86 1DBや、1テーブルの時
壊れた場合、すべてに影響しない?
>>90 SQL は向いてないよ。
ファイルメーカーでも使ったら?
92 :
NAME IS NULL :2005/07/29(金) 16:15:19 ID:DbsVJgMJ
すみません,MySQLのデータをPHPで吐き出したいのですが, データに$(ダラーマーク)が含まれる場合はどのようにしたらいいのでしょうか? 例: Prizeフィールドに $100,000 $125,000 とあった場合 PHPで (SQL文) $prizedt = $row["Prize"] として変数を格納した後, <td>$prizedt</td>とした場合,うまく吐き出せないのは分かっているのですが・・・ \$prizedtでもうまくいきませんでした.
>>92 ><td>$prizedt</td>とした場合,うまく吐き出せないのは分かっているのですが・・・
あなたが勝手にそう思っているだけ。
echo "<td>$prizedt</td>";
で無問題。てかPHPスレに行きなされ。
94 :
90 :2005/07/29(金) 16:32:00 ID:???
どういう理由でSQLが向いてないと リレーショナルがどうのこうのいてたやつ?
95 :
86 :2005/07/29(金) 17:01:56 ID:stkpnhA+
>>90 86で言っていたのはリソースの消費と性能面について。
あと多分誰かが1ユーザ1データベースって管理みたいな話もしてたと思う。
90の言う可用性は、普通は「複数データベース/テーブル」によって実現するものではないよ。
可用性はバックアップ、レプリケーション、RAIDによるミラーリング/冗長化などの方法によって
解決すべき要件かな。
要するに言いたいのは「可用性を考慮してデータベース/テーブル分ける」ってのは普通はやらないってこと。
いままでの話の想定だと、どっちにしろディスクが逝ったら終りでしょう。
MySQLを1年以上使ってファイルが壊れる可能性よりも、ディスクが壊れる可能性のほうが普通は高いし。
96 :
86&95 :2005/07/29(金) 17:08:06 ID:stkpnhA+
可用性うんぬん言うのなら、まずMySQLで最初にすべきことは、(定期的にバックアップとりつつ) バイナリログをデータとは物理的に別のディスクに出力するようにすることだと漏れは思う。 その次がRAIDを使う、さらに大規模ならレプリケーションをバックアップに使うという感じでしょうか。 ま、話がずれてきた気がするのでこの話はここいらでおしまい。
97 :
90 :2005/07/29(金) 17:54:33 ID:???
レスありがとうございます。 ディスクが壊れる以前に テーブル(ファイル)が壊れることの方が多いんじゃないかなと・・ DB分けた方がいいのかなと思って書きました 普通はバックアップ、RAID、レプリケーションなんですね
データベースの場合、 「特定のデータが飛んでもそれ以外がOKだから大丈夫」なんてのは原則的にありえない。 全てのデータが保証されるように設計・構築をする。それがデータベース。 仮にファイルが飛ぶ確率の方が高かったとしても、 飛ぶ直前の状態まで戻して復旧させるにはログやレプリケーションといった手段が必要になる。
99 :
68 :2005/07/29(金) 23:12:26 ID:???
>>88-89 追加できました!! ありがとうございます。
select_dbはテーブル名を指定するものと思い込んでいました・・・。
write専用マスター(innodb)とread専用レプリケーション(myisam)とに分けて マスター側のトランザクションをレプリケーションでも同期したい。 同期ができなくてもレプリケーション側がダーティーなクエリだということをユーザに通知してほしい。
101 :
NAME IS NULL :2005/07/30(土) 04:06:00 ID:4pVFNE71
>>98 というかデータベースなる製品をわざわざ使う目的ってそれだよな。
データベースがデータを保証する責務を一手に引き受けるから、
アプリサーバは自分のことに専念できる。
102 :
NAME IS NULL :2005/07/30(土) 04:10:03 ID:4pVFNE71
>>100 何が言いたいのかいまいちわからんのだが。質問なのかなこれは?
同期レプリケーションはver5.1だかそれ以降だったかだぞ。
それまでは非同期レプリケーションにするか、あるいはMySQL Clusterを使え。
というか聞いた話ではMySQL Clusterとレプリケーション機能の融合が進んでいくんだとか。
ちなみに通知する機能は今のところ無い。
103 :
NAME IS NULL :2005/07/30(土) 11:55:35 ID:nI55stf6
すいません、質問なんですがJDBC使ってMySQLに接続してるとき、何も処理せずある程度時間過ぎると 勝手にコネクション切られてしまうのですがこれって防ぐ方法無いんですか?
104 :
NAME IS NULL :2005/08/02(火) 04:42:13 ID:XK7TkxJx
>>103 レスがついていないから漏れが調べてやったぞ。
mysql> show variables like 'wait_timeout';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| wait_timeout | 28800 |
+---------------+-------+
1 row in set (0.02 sec)
wait_timeoutで指定されている「秒数」以上のアイドル時間が経過すると、
サーバ側からコネクションが切断されるしくみになっている。
デフォルトでは8時間。いやならこれをもっとでかい数字にすればよい。
と思われる。
105 :
NAME IS NULL :2005/08/02(火) 12:32:08 ID:uK9XBhtB
WebProg板に書いてしまい、板違いとの事で、こちらに来ました。 どなたか教えてください。 PHP+MySQL MySQLに、2つのテーブルがあり、IDというフィールドをキーにしてリレーションをします。 テーブル1:ID、category テーブル2:ID、name この様な場合に、テーブル1のcategoryに対するテーブル2nameを全て列挙したいのですが、 どのようなクエリとPHPを書くのが一般的なのでしょうか。 いま考えているのは、 SELECT name FROM テーブル1 WHERE ID=○○ のようなクエリ自体をテーブル1のレコード数ループさせながらprintするというものなのですが、 あまり良い方法では無いような気がします。 表示結果は以下の様にしたいです。 カテゴリー1 名前 名前 名前 カテゴリー2 名前 名前 名前 ・ ・ ・
>>105 う〜ん。言っていることが判るような判らないような。
・SELECT name FROM テーブル1 WHERE ID=○○
少なくともこのクエリではテーブル2のnameは取ってこれないし
・>ループさせながらprintするというものなのですが
どのみちループしながら表示せざるを得ないし
ループの中でテーブル2をSELECTするクエリを発行したくないって意味なのかな
・カテゴリー1、カテゴリー2
この名前はどこから来たんだろ。categoryカラムの値なのかな
とりあえず勘で書いてみるとこんな感じ?
$sql = 'SELECT テーブル1.ID, category, name FROM テーブル1'
. ' LEFT OUTER JOIN テーブル2 ON テーブル1.ID=テーブル2.ID'
. ' WHERE テーブル1.ID=○○ ORDER BY テーブル1.ID';
$result = mysql_query($sql);
$previd = '';
while($row = mysql_fetch_row($result)) {
if ($previd != $row['ID']) {
echo $row['category'] . '<br>';
$previd = $row['ID'];
}
echo $row['name'] . '<br>';
}
107 :
105 :2005/08/02(火) 13:24:58 ID:uK9XBhtB
>106 ありがとうございます。 すいません。提示したクエリの テーブル1の部分はテーブル2の記述間違いです。 書いていただいたソースを見て少し考えて見ます。
108 :
105 :2005/08/02(火) 13:31:26 ID:uK9XBhtB
・>ループさせながらprintするというものなのですが どのみちループしながら表示せざるを得ないし ループの中でテーブル2をSELECTするクエリを発行したくないって意味なのかな while文やfor文の中でmysql_query()を実行することを避けたいという意味でした。 表現下手ですいません・・・。
109 :
105 :2005/08/02(火) 14:25:17 ID:uK9XBhtB
>106 なんとか理解できた気がします。 ありがとうございました。
110 :
NAME IS NULL :2005/08/02(火) 20:14:15 ID:72DcUHyJ
ありがとうございます。 多謝です。
質問させてください。 mysql_insert_idという関数がPHPにあります。 これをPEARで実現するにはどうしたらいいですか? PEARにこれと同じようなもの用意されていますか? PEARに関する情報が少なく行き詰まっています。
113 :
NAME IS NULL :2005/08/03(水) 22:35:27 ID:2w1kybpI
質問です。 MySQLのデータベースのファイルには何か暗号化等することは可能なのでしょうか? たとえば*.MYDやiddata1等のファイルのみ、あるいはHDをまるごと盗まれてしまった場合に 中身を見ることは可能なのでしょうか? PCというかOSの起動時には一応パスワードを設定しているので、 あくまでファイルだけから中を見ることが可能かについて気になっています。 よろしくお願いします。
暗号化ファイルシステムを使えばいいのでは。
115 :
NAME IS NULL :2005/08/04(木) 02:00:53 ID:keXsaDtJ
皆さん凄いっすね・・・ 最近MySQLインスコして勉強始めたんですけどDMLで挫けそうっすorz
105への正しい回答はGroup byだよね ところで4.1使える手ごろなレンサバないですかね・・・ Xrea以外に
自己解決・・・海外鯖使うことにします
テーブルのフィールドの順番を並び替えることは可能でしょうか? レコードの並び替えではなく、例えば tbl_user id, name, pass となっているのを tbl_user name, pass, id などとしたいのですが。 よろしくお願いします。
>>119 SELECT * FROM tbl_user;
を
SELECT name, pass, id FROM tbl_user;
と書き換えればオッケー
っつうかRDBのレコードやフィールドに並び順があると思うのは単なる幻想
121 :
119 :2005/08/05(金) 16:14:20 ID:???
レスありがとうございます。
>>120 表示するときに並べ替えるのではなく、あくまでテーブルを管理する際に
並べ替える必要を感じたんですけどね。
データベース的に意味はないですけど、精神的に重要な項目から並べたいというのがあったので・・・。
SELECT * なんて危険なものを恒常的に使う癖は早く直したほうがいい
何が危険なの?
ニトロ
ワイルドカードを使う奴に限って「頭からn番目の項目」とかいう 処理を書くからでしょ。要するに無頓着。 遅い遅いと言ってる奴の処理みてたら、アスタリスクで全部 (比較的大きいバイナリーデータの入ってる分も)取り出してて、 idだけ取って後で必要なものについてはidに基づいて引き出せよ と思った。
それは判るけど「危険」っていう理由ではないわな。 なにが危険なのかを知りたい。
127 :
126 :2005/08/05(金) 21:45:47 ID:???
すまね。前2行を読み落とした。 ワイルドカードで取得したレコードに対して「頭からn番目の項目」を取得するのは危険だわな。 納得。
$buffer[$i]とか? そんな処理する奴いるんか
今日日の"職業"プログラマをなめてはいけない...orz
SELECT * なんてかわいいもんじゃん。 INSERT INTO `tablename` VALUES ( $a, $b, $c ) とかはマジやばい。 Prepared Statement使えとあれほど言ってるのに。。。
まぁPrepared Statementが使用できないDBライブラリもあるから しょうがない場合もあるけど。 ただせめて値は ' で囲って欲しいよね。
そのPrepared Statementなるものは4.1以降でないと利用できないのでしょうか? こないだ4.1入れてパニクって戻したばっかなんだよな・・・。
>>131 クオートで括っただけでOkなんていうと、
SQLインジェクションされちゃいますよ。
日付や電話番号などをinsertする時に、 数字の先頭の0を省かれないようにするには intではなくvarcharなどを使うしかないんでしょうか
まぁintは使わないな。 0がどうのというより、日付も電話番号も数字を使うけど 「数値」とはちょっと違う存在じゃん?
あ〜、そうですよね。即レスどうもです。
Winndows版の4.0.24はinnodbサポートしていますよね? サーバをmax-ntにしているのに(管理のサービスでmax-ntになっているのを確認もしてます) innodb_data_file_pathを指定するとシステムエラー1067をはきます datadirの権限はeverybodyで書き込み権限はあります 容量はあるし、構文ミスもありません(innodb_data_file_pathをコメントアウトするとサーバが起動します) バーチャルPC上でWindows2000で実行しています
>>137 innodb_data_file_path、innodb_data_home_dirに設定した値を示してもらった方が
早いかもしれないけど。
innodb_data_file_pathをフルパスで指定していてかつinnodb_data_home_dirを
コメントアウトにしていない?
datadirで指定したディレクトリに作成される "サーバー名.err" というファイルの
内容を確認してみれば何か判るかもしれない。
>>139 や、
>MySQL バージョン 4.0 より、InnoDB はデフォルトで MySQL に組み込まれています。
>次の情報は、3.23 シリーズだけに該当します。
>>137 で「Winndows版の4.0.24」って書いてあるのですがー。
142 :
NAME IS NULL :2005/08/09(火) 19:56:51 ID:xUOdDSYg
3.23.58ってセキュリティホール等あります?
>>142 もう誰も見てないから判らない。
あれば報告すればまだ直してくれるけど>3.x系
144 :
NAME IS NULL :2005/08/10(水) 06:04:26 ID:Yq8cRYJ+
男なら黙って ver5.0
> 男なら黙って ver5.0 とする根拠きぼん。
その質問に答えたら 黙って選ぶことになりません。
色々考えて、自分なりにテーブルも正規化したcmsをつくりますた。 フィールド数30個くらいのテーブル1つと、フィールド数数個のテーブル3つ。 これらをjoinしたクエリを一画面表示ごとに十数回くらい実行していますが、こんなのは普通のことなんでしょうか? 思いの他、色々盛り込むことになってしまって。 ローカルの環境では快適に動いてますが、レンタル鯖にうpしたら負荷大きいぞ!って怒られたりしないでしょうか?
>>147 > ローカルの環境では快適に動いてますが、レンタル鯖にうpしたら負荷大きいぞ!って怒られたりしないでしょうか?
取り敢えずベンチマークとれよ
149 :
NAME IS NULL :2005/08/12(金) 17:36:51 ID:x+EYmiqH
mysqlはどうして、リファレンスの類が他と比べて、糞なのですか?
馬鹿フィルタでは?
151 :
NAME IS NULL :2005/08/12(金) 17:49:39 ID:O6Fx6yKR
ちゃんと作れって言いたい
154 :
NAME IS NULL :2005/08/12(金) 22:45:46 ID:yTy84Mt4
Javaのドキュメントは親切すぎるほど親切に思えた。
155 :
NAME IS NULL :2005/08/13(土) 04:08:17 ID:17VFPGLo
確かに日本語マニュアルって英語マニュアルにくらべるとしょぼいよね。 まさに知りたい話に限って日本語マニュアルには書いていない(英語のほうにはある)。
右上から検索すると強制で英語になるのがだるい 登録すりゃいいんだろうけど
157 :
NAME IS NULL :2005/08/13(土) 20:15:43 ID:W8RTrnDT BE:82335528-#
売り上げの日別集計を行ってるのですが、 SELECT sum(合計金額) , count(オーダーID) , DATE_FORMAT(注文日時) as o_day FROM 注文テーブル GROUP BY o_day として抽出を行った場合に、 今月頭から今日までの日別集計を行いたいのに、 一切売れなかった日が抜けてしまいます・・ これを防ぐ方法ってどんな方法がありますか?
>>157 カレンダーテーブルを別に準備してそいつとOUTER JOIN。
または売れない日には0円のオーダーレコードを登録する運用にする。
>>157 特定のフィールドの値が無いけど、それをカウントして0って結果を返したい場合は漏れもいつも回りくどいことしてる。
カレンダーテーブルに相当するものを配列に入れておいて、後で合体させる
>>158 カレンダーテーブルってのは日付で1レコードってことですよね?
新たに両方のテーブルにフィールドを作ってそれで、
OUTER JOIN カレンダーテーブル on 注文テーブル.ID = カレンダーテーブル.ID
ってことかな?
>>159 OUTER JOIN カレンダーテーブル on 注文テーブル.注文日 = カレンダーテーブル.注文日
と思われ。
161 :
160 :2005/08/14(日) 00:00:32 ID:???
追加。感覚としては LEFT OUTER JOIN 注文テーブル on カレンダーテーブル.注文日 = 注文テーブル.注文日 としてカレンダテーブルをメインテーブルとした方が意味合いとして明確。
162 :
NAME IS NULL :2005/08/14(日) 11:52:33 ID:NmBe63OC
同じレコードに、 数値型のカラムがいくつかあるとして、 その中から最大値が入ったカラムの名前を知るには どうすればいいでしょうか?
163 :
NAME IS NULL :2005/08/14(日) 15:27:41 ID:ENq6njQg
GRATEST()関数が使えると思う バージョンによっては駄目かもしれないけど
164 :
NAME IS NULL :2005/08/14(日) 15:28:54 ID:ENq6njQg
スペルが違った、GREATEST()だ
NAME IS NULLだよ
ちょっと仕事で本番環境のdatabase dropしちゃってさ、 示談金を今日中に払い込まないといけなくなっちゃったんだ。
なぜレプリケーションしなかったんだ?
172 :
NAME IS NULL :2005/08/16(火) 00:55:14 ID:kmWjz4VJ
すみません。教えてください。 WinXP上のMySQLのデータをコピーしてLinux機に移植したところ、書き込みが出来なくなっています。 phpMyAdminから直接レコードを修正しようとすると、#1036 - Table 'hoge' is read only が表示されます。 ディレクト以下全てのファイルのパーミッションを777にしても変わりません。 (読み出しは普通に可能です) コピーの媒体はCD-RWでもFDでも同じ症状が出ます。 よろしくです。m(_ _;)m
MySQLのコンソール(SSHで接続)から日本語入力できません。INSERTできないのです。
調べていたら、
http://w3lab.net/mm/ts/php.html#insertを見つけました 。
(Q) SSHでMySQLに接続して、insert into 文でデータを入力したいのですが、日本語を入力できません。
日本語を入力するには、どうすればいいのでしょうか。
またPHP(もしくはPerl)スクリプト内からだと、日本語のデータはinsertできますでしょうか。
(A) SSHのコマンドラインからの日本語入力はできませんが、PHPなどからであれば可能です。
無理なんでしょか?
>>173 どういうSSHクライアントや環境なのか知らないけど、
ちゃんとコード変換してやれば(SSHクライアントがSJISで送ってないか?)
普通にlatin同様に扱える。
175 :
NAME IS NULL :2005/08/16(火) 17:05:25 ID:xpJN3AvF
>>172 テーブルハンドラは何よ? myisam以外は互換性ないぞ、確か。
176 :
NAME IS NULL :2005/08/16(火) 17:06:42 ID:xpJN3AvF
>>173 INSERT INTO t1 (c1) VALUES (`日本語`);
みたいに `` でちゃんと囲んでるか?
177 :
173 :2005/08/16(火) 22:47:40 ID:???
>>174 SSHクライアントはTTSSHを使っていて、文字コードは送受信ともEUCにしています。
>>176 はい、というか、そもそも日本語が受け付けてくれないんです。
何も送られて様子です。
ローカルエコーをオンにすると送られるんですが、
それだと副作用が多すぎて常用できないんです。
178 :
NAME IS NULL :2005/08/16(火) 23:52:33 ID:xpJN3AvF
>>177 SSH経由で手動でレコード追加したいのかな?
もしそうでなければ代替案。
代替案1
○○.sql みたいなDDL/DMLを書いたファイルを用意しておいて mysql < ○○.sql で流し込む。
代替案2
SET NAMES cp932;
INSERT INTO t1 (c1) VALUES (0xAAA);
みたいにHEXを使ってINSERTする。0xAAAは対応するHEXのことね。
(代替案2は入力文字列が固定化されている場合のみ)
179 :
173 :2005/08/17(水) 01:18:27 ID:???
>>178 ありがとうございます。
代替案1 の方でやってみます。
180 :
NAME IS NULL :2005/08/21(日) 17:47:00 ID:OVUB9+H0
MYSQLってトランザクションとテーブルロックの両方を同時にってできないんですか?
>>180 何がやりたいの?
十中八九トランザクションをちゃんと使えば解決できると思われ。
(commitするまで他コネクションからSELECTして欲しくないとか)
182 :
NAME IS NULL :2005/08/21(日) 21:20:13 ID:2yUINDw1
MySQL4.1.13をrpmから入れたらmysqlユーザー/グループなどが自動で作成 されなくなっています。ま、単に作ればいいじゃんって話ではありますが。 4.1.11までは勝手に作るようになっていたのに、デフォルトの動きが変更になったのでしょうか? それとも単に入れ忘れた?
183 :
NAME IS NULL :2005/08/22(月) 12:07:33 ID:7wEVkCZ+
>180に逆質問。どのRDBMSだとできたの?
SQL Server2005
185 :
180 :2005/08/22(月) 20:28:47 ID:wRMrhi6D
たとえば同様のデータが入ってるかチェックして チェックが通ったらinsertする時。 スレッドA チェック(select) true スレッドB チェック(select) true スレッドA insert スレッドB insert ってならない? テーブルロックかけておけば スレッドA ロック スレッドA チェック(select) true スレッドB チェック(select) 待機 スレッドA insert スレッドA ロック解除 スレッドB チェック(select) false ってなるかなって。
>>185 同様のデータを許さないカラムにユニーク属性を付けておけばOK
188 :
NAME IS NULL :2005/08/23(火) 02:35:02 ID:rOUyeMo+
187が言っているとおり、条件に該当するINSERTをブロックするだけなら わざわざテーブル全体にロックをかける必要は無い。 無論、lock tablesというテーブルハンドラ非依存の構文も使えるわけだが、 SELECT ... FOR UPDATE で十分だろう。 SQL Server2005の"SELECT ... FOR UPDATE"はINSERTをブロックできないのかな?もしかして。
>>188 SELECTしたレコードが削除変更されるのを防止するためにSELECT ... FOR UPDATEを使うのはわかるが、
ここではSELECTで選択されなかったことを保障したいわけだから使えないと思うぞ。
レコードが選択されなかったという状態を保障するためにはシリアライズトランザクションを使う必要がある。
MSSQLではシリアライズトランザクションによってSELECTした条件の範囲でキー範囲ロックが発生する。
もっともシリアライズトランザクションは結構負荷がでかいので
>>186 のいうとおり、
INSERT時の重複エラーを捉えてトランザクションを失敗か別の処理に分岐させるのが妥当だろう。
...ふと思ったんだが、レコードが無ければUDPATEあればINSERTといった処理ならMERGE命令が
うまく処理してくれるように思えるがこれじゃダメなのか?
>>189 補足、マニュアルをざっと見たんだがMSSQLでもMySQLでもまだMERGE命令はサポートされてないもよう。
191 :
NAME IS NULL :2005/08/23(火) 05:03:43 ID:rOUyeMo+
>>188 InnoDBでは"SELECT ... FOR UPDATE"あるいは"SELECT ... LOCK IN SHARE MODE"で
条件の範囲での範囲ロックが発生するよ。
確かネクストキーロックという名前が付けられている仕組みで、InnoDBがClustered Indexを使っていることと関係があったはず。
192 :
NAME IS NULL :2005/08/23(火) 05:04:32 ID:rOUyeMo+
193 :
NAME IS NULL :2005/08/23(火) 05:05:13 ID:rOUyeMo+
うわ、泥沼に嵌ってる・・・・ 出直してきます orz
>>191 サンクス、ネクストキーロック了解。マニュアル読んできた。
FOR UPDATEでこの種のロックがかかるのはなるほど便利そうだ。
既存のテーブルから、そのテーブルのcreate table文を 生成する事って可能でしょうか? 何かのツールを使ってでもOKなので、ご存知でしたら教えてください。
196 :
NAME IS NULL :2005/08/24(水) 15:38:18 ID:laqaNRiE
>>195 SHOW CREATE TABLE <tableName>;
じゃあ駄目なんですか?
197 :
NAME IS NULL :2005/08/25(木) 00:06:37 ID:7Pso8byV
すいません。質問させて下さい。 あるテーブル(old_table)からデータを引いて新しいテーブル(new_table)へ 入れるんですが詰まってます・・・ 通常ですと、 insert into new_table(col1) select col1 from old_table; でよいんですが、実はそのままcol1の値を入れるのではなく、値の前に 0をつけてnew_tableのcol1に入れたいんです。どすればいいんでしょうか? SQLじゃ無理なんでしょうか。
>>197 insert into new_table(col1) select concat('0', col1) from old_table;
199 :
197 :2005/08/25(木) 00:19:26 ID:???
>>198 ありがとうございます!!!
concat()って知りませんでした。勉強不足でした。
質問からこんなに早く答えて頂き本当に助かりました(T.T)
お陰様で、2時前には寝ることが出来ます。本当にありがとうございました。
200 :
K :2005/08/29(月) 05:44:24 ID:QGAqQEOQ
すみません、MySQL初心者です。 MySQLで今までNOT NULLと指定していなかったフィールドがあり、 このため、データが入っていないrowとちゃんとデータが入ってるrowが あるのですが、この状態でこのフィールドの属性をNOT NULLに変更しても 大丈夫でしょうか? NOT NULLにしたのに現実にはデータがカラのRowも存在しているわけで、 何かエラーになるのではないかと。。。それともカラのrowをなくしてから でないとNOT NULLに変更はできないのでしょうか?
それが文字列フィールドのことなら、空文字列とNULLは違うものだよ。 心配ならテーブルの複製にALTER TABLEしてイロイロ実験すれば?
>>200 MySQLには詳しくないけど、通常はデフォルト値を設定することになると
思う。
203 :
NAME IS NULL :2005/08/29(月) 14:10:56 ID:hgedEuqh
1つのフィールドの構造とデータを フィールド名だけ変えてコピーしたいのですが、 そういうコマンドってあるのでしょうか? プログラム組んでやるしかなかとですか?
>>200 alter tableでnot null指定してなかったカラムをnot nullにすると、nullが入ってた部分はデフォルト値になる。
mysqlではnullはuniqueカラムでも特別扱いなんで、元がuniqueなカラムだとはまるかも。
>>203 lock table [table];
alter table [table] add newcol [create_definition];
update [table] set newcol=oldcol;
unlock table;
こんな感じ?
timestamp型がある時はその辺も気を付けないと、書き換わってしまうが。
205 :
NAME IS NULL :2005/08/30(火) 03:13:50 ID:9rw4gV5x
Navicatのスケジュールって ちゃんと動きます? セットした時間になってもピクリともしません OSXとWinで試してみたけど…
206 :
205 :2005/08/30(火) 03:56:31 ID:???
出来ました パスワードなしユーザだからと思ってパスワードを空白にしていたのが 問題だったようで。 スケジュールって単にWin標準のタスクを実行してるだけだったんですね
207 :
K :2005/08/30(火) 09:59:47 ID:U53E/WPM
レス200です。 レス下さった方、ありがとうございました! なるほどです。
直視に耐えない…。 聞くに耐えない…。
それでもカキコは出来ます...。
210 :
NAME IS NULL :2005/09/02(金) 12:18:45 ID:7CZENzNz
MySQLの数値の比較の動作について質問です。 tbl_listというテーブルにidという主キーでデータ型はINTでauto_incrementを設定してあります。 今のところidは1から20まで登録してあります。 ここで以下のようなクエリーを発行すると select id from tbl_list where id in ('1','3','2.5','5','4') idが1,2,3,4,5の5通り帰ってきます。 select id from tbl_list where id in ('2.5') とすると2が帰ってくるのですが、2と2.5は同値とみなされてしまうのでしょうか? MySQL4.0.25 Windows版を使用しています。 よろしくお願いします。
データ型がINTだからでは? とSQLを全く知らない私が答えてみました。
select 2="2.5"; だと0が返ってきて select 2 in("2.5"); だと1が返ってくるね inを使うと勝手に整数比較されるってことかな?
213 :
NAME IS NULL :2005/09/02(金) 17:24:20 ID:Zzr1P2Lt
AUTO_INCREMENTによる割り当ては1から始まりますが、 これを特定の値から始まるように設定する方法はありますか?
214 :
213 :2005/09/02(金) 18:00:55 ID:Zzr1P2Lt
解決しました
>>212 面白そうな現象ですね。手元に環境が無いから試せないのだけど、文字列じゃなく数字の2.5の場合どうなりますか?
select 2 in("2.5");
select 2 in(2.5);
216 :
212 :2005/09/02(金) 22:08:34 ID:???
試してみた。 select 2 in(2.5); だと、0が返ってくる。 環境書き忘れたけど、4.0.22@FreeBSD
217 :
212 :2005/09/02(金) 22:11:21 ID:???
4.1環境も手元にあるので試してみたら select 2 in(2.5); でも select 2 in("2.5"); でも0が返ってくる。 バージョンは4.1.10
218 :
NAME IS NULL :2005/09/02(金) 22:42:38 ID:KDwNgj7Y
select '2' in ('2.5'); だと0が返ってきた. select 2 in ('2.5'); だと1が返ってきた. バージョンは4.0.25(Win)
219 :
NAME IS NULL :2005/09/02(金) 23:25:01 ID:KG6yoOrb
mysql4とmysql5ってどう違うですか〜? 今まで4でxoops動かしてたんですが、5の方がいいんでしょうか?
>>219 MySQLを使用して何か開発をしていないのなら無関係。
xoops側がMySQL5系に変更すべし、というまでは現状のままでいきなはれ。
>>220 なるる 理解した
ありがとぅ〜〜(iДi)ノ
>>219 >mysql4とmysql5ってどう違うですか〜?
と人に訊く人は、今まで通りMySQL4.0を使ってください。XOOPSには。
MySQL4.1にも手を出さない方が良いでしょう
223 :
NAME IS NULL :2005/09/03(土) 13:01:45 ID:noKceUQY
夜中にランキングページをcronで生成しているのですが アカウントが多くなったため処理時間が増加し 他のクエリを受け付けない時間が長くなって 困っています。 スレッドキャッシュやテーブルキャッシュを増やす等の チューンをし 通常処理のパフォーマンスは上がったのですが この問題は相変わらずでした。 どのように解決するのが定石なのでしょうか?
ランキング専用のサーバを作る
>>223 cronで動かしてるアプリをいじれるならアルゴリズムの改善でまったく変わる。
チューニングで何とかしたいならまずはボトルネックを探さないとむやみにつまみを
いじってもなかなかヒットしない。どれも手に余るならマシンの増強。
>>223 レプリケーションして更新マスターとクエリ受付スレーブとに分ければ?
ボトルネックはプロセスレベルでしょ?
「AB■XY」のデータを「AB□XY」に変更したいのですが その様なsqlを書けば良いのかご教授下さいませ。
>>223 ランキング作成の仕組みにもよるが、一つのテーブルにINSERTを
多発するようなら、複数行INSERTの導入をお勧めする。
量が多ければ、劇的に早くなります。
229 :
NAME IS NULL :2005/09/06(火) 01:37:55 ID:aMoVKkEL
MySQLはpostgresのような modify_dt timestamp default now(), このようなtimestampへのデフォルト指定ができず、timestampのカラムを 2つ以上作ってしまうと下記のようになってしまいますが、2つとも CURRENT_TIMESTAMPにする方法はございませんでしょうか。 | regist_dt | timestamp | YES | | CURRENT_TIMESTAMP | | | modify_dt | timestamp | YES | | 0000-00-00 00:00:00 | | ご教示いただけますと幸いです。
>>229 MySQLのtimestampはrowversionのことで、日付時間型はdatetimeを使うべし。
日付時間関係の型は処理系で大きく異なるから注意が必要。
>>230 ご教示有難うございます。
datetimeでやってみましたが、こちらもdefault指定で
エラーになってしまいました
>>230 大きく訂正。
MySQLのtimestamp型はrowversonとは関係なく日付時刻型で正解、datetimeとは格納形式が違うらしい。
timestampは名前どおりデフォルトでそのときの日付時刻がセットされる。defaultの指定は不要。
タイムスタンプの精度が秒単位までなのでrowversionとしては機能しないもよう。
2つ以上定義した場合は2つめからは現在の日付時刻はセットされず。ゼロ値がセットされる。
さらにMaxDBモードでは現在の日付時刻セットはまったく行わないらしい。
マニュアルの記述によるとcreate tableのdefaultでは定数のみで関数は使用できないらしい。
insert文やUpdate文ににNow()関数を指定してやるのが一番無難そうだ。
>>232 やはりそれが一番無難ですかね。
有難うございます。
話変わりますが、今度はcreate indexができません。
create index idx1 on 〜(aaaaa);
create index idx2 on 〜(bbbbb);
とやると、
BLOB/TEXT column 〜 used in key specification without a key length
と出て、なぜか2つ目のindexのみ作られています。
ぐぐってもなかなか正解が出てこないので困ってます。。
>>233 >MySQL バージョン 3.23.2 以降では、BLOB 型と TEXT 型のカラムには、インデックスを付けることができる。
>それより前の MySQL バージョンでは、インデックスはサポートしていない。
とマニュアルのあるけどVersionいくつ?
aaaaaとbbbbbのデータ型は?
>>234 4.1.7です。
aaaaaはtext、bbbbbはsmallint(6)でございます。
236 :
235 :2005/09/06(火) 04:23:02 ID:???
なんでsmallintのbbbbbのみ作れるんでしょうかね。。
238 :
235 :2005/09/06(火) 04:52:19 ID:???
>>237 有難うございます。いきました。
長さを指定する必要があったんですね。
マニュアルのとおり、入力されると思われる文字数より少ない数を
指定しましたが、Postgresではこのようなことはしたことがないため
少し心配になりました。。
遅くまで有難うございました。
239 :
NAME IS NULL :2005/09/06(火) 11:23:59 ID:6CcOt5nH
会社で動いているMySQLの innodb_log_file_size が 100M に設定されて いるのですが、こんなに必要なんでしょうか? もし自分がやる場合、いつも5Mとか10Mなんですけど間違ってますか?
240 :
NAME IS NULL :2005/09/06(火) 15:02:15 ID:vXeEnsfW
ms-dosで mysql> source C:/root/hoge; とやると/rが改行\rに認識されるみたいだんですが これをエスケープするにはどうすればいいんでしょうか? \/rootでもダメみたいです
くだらねぇ質問スレから誘導されて来ました。 PHP+MySQLで顧客管理のサイトを作っています。 名前:年収:勤務地 aaaa:600:埼玉 bbbb:700:東京 cccc:550:千葉 dddd:500:神奈川 eeee:800:北海道 というデータを、年収を「600万以上」で検索しても 550万のデータも「条件90%合致」ということで表示したいのです。 年収だけじゃなくて、勤務地もたとえば東京を指定しても 埼玉、神奈川といった近辺も合致させたいと思っています。 基準としては、年収-50万で合致率からマイナス10%、 近県ならマイナス10%といった減算方式で、80%までなら 抽出したい、といった具合です。 勤務地に関しては、名称ではなく数値で格納してあるので 埼玉:10 東京:11 神奈川:12 千葉:13 北海道:50 検索値の前後±1の地域をマイナス10%で抽出する、といった感じです。 くだらねぇ質問スレで一部ヒントをもらいましたが、 ひき続き良いアイデアがありましたらよろしくお願いします。
元のスレのurl貼ろうや くだ質の方から来たけど、あっちで半分以上解決してるじゃねぇか
>>241 210 名前:nobodyさん 本日のレス 投稿日:2005/09/06(火) 17:18:15 ???
>>207-208 なるほど、合致率もSQLで取得するんですね。
年収オンリーでの考え方は把握しました。どうもです。
条件が複合したときがさらに厄介です。
ヒント(っつか答え)はいただいたので、自分でも考えてみます。
~~~~~~~~~~~~~~~~~~~~~
17:18:15 に「自分でも考えてみます」と言って、考えた方法が
17:33:05 にこのスレで教えてもらうことなの?
バカですか。。。
244 :
243 :2005/09/06(火) 18:59:52 ID:???
関係ないけど、
>>241 の件をちょっとやってみた時に発見。
mysql> SELECT 10 - ABS(1 - 12);
+----------------------+
| 10 - ABS(1 - 12) |
+----------------------+
| 18446744073709551615 |
+----------------------+
mysql> SELECT -ABS(1 - 12) + 10;
+-------------------+
| -ABS(1 - 12) + 10 |
+-------------------+
| -1 |
+-------------------+
ABS(x - y) > 10 の時におかしくなるみたい。
MySQLのバージョンは4.1.13。
timestampを使用するとdefault now()になりますが、 updateの際にもこれが適用されてしまいます。 これを回避する方法はございませんでしょうか。
>>245 timestampをやめてdateにして、insert時にnow()を書き込む。
timestampは
×default値としてnow()が書かれる
○レコードが更新された日時が自動的に書き込まれる
そもそもtimestampの認識が間違っていると思われ。
>>244 SELECT 10 - ABS(1 - 12.0);
としたらちゃんとした結果が出た
>>246 有難うございます。
postgresの感覚は消し去った方がいいですね、、
249 :
247 :2005/09/06(火) 19:50:31 ID:???
ちなみに、MySQLは4.1.13 SELECT 0 - ABS(1); でもおかしくなるね。 SELECT FLOOR(0 - ABS(1)); SELECT (0 - ABS(1))*1.0; SELECT 0 + -ABS(1); ではおかしくならないけど SELECT (0 - ABS(1))*1; ではおかしくなる。 整数からABSの戻り値をそのまま引くとおかしくなるのかな。 *1でおかしいのは、計算する時に最適化されて*1は実行されないとか? んで、結果の数値見るとUNSIGNED BIGINTの最大値っぽいけど ABSの返り値がSIGNEDなのに、間違えてUNSIGNEDとして扱っちゃうのが原因だろうか。
4.1.14だけど、何も変なことおきないよ。
>>249 $ mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 569 to server version: 4.1.14-standard-log
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql> select 0-abs(1);
+----------+
| 0-abs(1) |
+----------+
| -1 |
+----------+
1 row in set (0.00 sec)
mysql> select (0-abs(1))*1;
+--------------+
| (0-abs(1))*1 |
+--------------+
| -1 |
+--------------+
1 row in set (0.00 sec)
251 :
243 :2005/09/06(火) 21:18:01 ID:???
252 :
NAME IS NULL :2005/09/07(水) 00:59:46 ID:ajFyFx/u
>>240 innodb_log_file_size を大きくするほど一般的には性能がアップする。
大きくすることの弊害は、障害発生後のリカバリー時にその分、時間がかかるということ。
で、トータルで考えるとこの値は、思いっきり大きくした方が良いというのが良く言われているチューニングTIPSですよ。
253 :
252 :2005/09/07(水) 01:01:03 ID:ajFyFx/u
アンカーミスりました。。。
>>239 宛が正解。
254 :
NAME IS NULL :2005/09/07(水) 01:29:13 ID:A0qPp313
XOOPSの負荷を軽くしたいのですが、究極なMYSQLのチューニングをおしえてください。 おしえてくんですんまそん
>>254 CPUの速いのいっぱい積む。メモリーもいっぱい積む。
ディスクI/Oが結構足引っ張るのでI/FもHDDも速いのにする。RAID組む。
256 :
NAME IS NULL :2005/09/07(水) 02:49:37 ID:A0qPp313
>>255 ありがとん。
CPUは、AMD64FX メモリ4G
ディスクI/Oがやばそうなので、WD raptorと考えています。
XOOPSを一台のサーバーにどれぐらい設置できそうですか?
アクセス数とかでもおしえていただければ幸いっす。
まじ、おしえてくんですんまそん。
その用途なら、FXやめて安いX2の方がよさげ。
258 :
NAME IS NULL :2005/09/07(水) 13:44:11 ID:Apjg8CxA
>>252 そうなんだ。ありがとうございます。
実際に障害を起こしてどうなるか、までのテストをしたことがないので
よく理解していませんでした。
そうか。大きいほうがいいんだ...。
ちなみに、意図的に障害を起こす良い方法があれば教えてください(>_<)
259 :
NAME IS NULL :2005/09/08(木) 00:50:44 ID:r5tObJDy
260 :
NAME IS NULL :2005/09/08(木) 01:14:40 ID:+k04DASg
>>257 X2に変えて、一日10万アクセスぐらい耐えられるかな?
自分ひとりだともったいないので、同じサーバーに
無料で何人かに貸し出そうとおもっています。
261 :
252 :2005/09/08(木) 03:58:29 ID:eEn19qg5
>>258 >>259 だからそのREDOログのサイズはでかいほど良いってことだよ。
MySQL ABのパフォーマンスチームリーダー、Peter Zaitsev本人が言ってたことなの。
なんで良いのか、詳しいメカニズムは漏れは知らない。ごめんね。
262 :
NAME IS NULL :2005/09/09(金) 20:14:20 ID:PPaiODgg
さくらインターネット 共有サーバスレ Part23 さくらインターネット 質問にマジレスするスレでも質問したのですが、誘導させていただいたので書き込みます。 外部キーを利用したいからタイプをInnoDBにしていたのですが、サーバ1でなぜかInnoDBのテーブルを作れなくなってしまったのですが、なにか情報持っている方いませんか? しかも悪いことに削除のできない未完成のテーブルができてしまった・・・。どうしよう・・・(´・ω・`) ちなみに、諸事情でアカウントを二つもっているのですが、もう一つはサバ5をつかっています。 こちらだと同じInnoDBを作成するSQL文を通してもうまくテーブルをつくってくれるんです。。。 create table group( id_group int not null primary key auto_increment, name_group tinytext )type=InnoDB; たとえば、こういったかんじのSQL文です。 1サバ自体がおかしいのか、自分のデータベースになんらかの設定を誤ってしてみまったのか全く見当がつきません。 実際、リレーションを組んだり、データベースにはテーブル作成・更新・削除、レコードの追加などしかしてません。 どうやら、壊れたテーブルは使用中という扱いのよう。。。
263 :
262 :2005/09/09(金) 22:51:39 ID:PPaiODgg
なんだか、レコードの追加はできるけど削除できないテーブルがでてきた。 あと、テーブルの構造を表示させようとしても違うテーブルが開けないってエラーが起きるし。 あと、テーブル作るときには下のようなエラーが起きます・・・。 #2013 - Lost connection to MySQL server during query データベースを削除して一から構築しようと思ったんだけど、Sakura Internetってデータベース削除コマンドがロックされてる・・・。 どなたか、詳しい方がいましたら御教授ねがいます(´・ωと)
264 :
262 :2005/09/09(金) 23:49:19 ID:???
連続書き込み申し訳ありません。 さくらインターネットのMySQLのバージョンが4.0.20です。 Googleで調べた結果InnoDBの処理でバグがあるようです。 ただ、書いてある内容が高度で今回の件とどれだけ関係があるのかよくわかりません。。。 さくらインターネットにバージョンアップの要請をだしたほうがいいのでしょうか・・・。
半角スペースと全角スペースを間違えて入れてしまったorz しかも50万レコード。 簡単にsqlたたいて直せないですか? エロい人教えて。
>>265 俺なら該当データをdumpして、半全の変換して(テキスト変換系ツール)
それをimportし直す。INSERT→UPDATEぐらいは必要かな。
と思ったけど50万ね...
1円/件、出してくれたら変換してあげる。
じゃあ漏れは0.5円/件
>>265 普通にupdateで出来そうだけど。
ただ、その件数一気にやるのは怖いから漏れだったら何度かに分ける。
271 :
名無しさん@そうだ選挙に行こう :2005/09/11(日) 16:31:10 ID:bTMS1VeQ
マックに舞sqlを入れました。 アンインストールして舞をマッサラな状態に(ユーザーの設定とか)したいんですが、どうすればいいでしょう。 フォルダごと無理矢理削除して再度インストールしたら、/tmp/舞sql。ソケット が何のといって使えなくなってしまいます他。 マック板かリナックスいけと貝割れ草だけど。。。 お願いします。 因に、osx tiger 舞sqlはosx要の最新版。
舞sqlとか書けば2chぽいみたいなこと思ってるのかね?
>>271 # /tmp/舞sql。ソケット が何の...
つってるファイル消せばよい。
松本
277 :
NAME IS NULL :2005/09/13(火) 21:55:54 ID:K7YLJro0
4.1.14でvarcharのコラムに改行(¥r)だけいれて MySQL Administratorでバックアップしたファイル見てみると 本来、'aaa','¥r','bbb'となるべきところが 'aaa',','bbb'となってしまっていて、リストアできないんですが これって既出ですか?
>>262-264 MySQLの勉強をしようと思って、たまたま以前から使っていた
さくらインターネットのサービスの中にMySQLのサーバーがあったんで、
最近試しにさわってみたばかり・・・ という程度の私なので、お役に
立てるほどの知識も情報もないんですが、私が割り当ててもらった
mysql7では、select version(); を実行してみたら、4.0.25でした。
もしかして、サーバーによってバージョンが微妙に違っていて、
262さんが困っているほうのサーバーはバグありバージョン?
どちらにせよ、テーブルが削除できないというのは、さくらに頼む
しかないんじゃないでしょうか。
あと、「バグがあるらしいから、他のサーバーと同じバージョンに
上げてくれ」と、頼んでみるのもアリではないかと。言うだけなら
タダですし。それで問題が解決するかどうかは、分かりませんが。
君は何をしたいのかね?
>>278 なにっ さくらMysql4.0来てたのかー!
281 :
NAME IS NULL :2005/09/15(木) 10:21:47 ID:/+b7q0U4
postgresqlからの移行をおこなっていますがexceptで難航しています。 同じテーブルに1時間おきにデータを入力していますが、入力がない場合を検索してるsqlが以下にあります。 これをmysqlに移行したいのですが、難航しています。以下をmysqlで実現する方法はありますか。 sql = "select name from w where date > '#{late_hour}' and date < '#{hour}' group by name except select name from w where date > '#{hour}' and date < '#{for_hour}' group by name"
>>281 MySQLのバージョンによっては使えないかもしれないが。。。
select name from w where
name not in (select name from w where date > '#{hour}' and date < '#{for_hour}' group by name)
and date > '#{late_hour}' and date < '#{hour}' group by name
ユニークカラムが存在して、かつそのカラムとは別にNOT NULLなカラムが存在するのであれば
キーの結合とNOT NULL判定でもできるけど。
できれば、テーブルの定義とMySQLのバージョンは明記して欲しいな。
WindowsXPでmysqlを運用しています
WindowsXP Proでmysqlを運用しています mysqldump -u root -p dbname > "directory/filename" が動きません。 吐き出されたテキストファイルには「EnetrPassword: 」 のみ記述されています。 本来このコマンドプロンプトでパスワード入力ができるはずなのですが・・・ ReloadやCreateTableには何の支障もないです、どなかた教えてください
>>284 mysqldump -u root -pxxx dbname > "directory/filename"
-p だけならプロンプトが出るのは当たり前のような。xxxにパスワード。
287 :
NAME IS NULL :2005/09/16(金) 00:11:24 ID:6D+lJfyJ
PHPでSQLを実行したくて以下の文を記述したのですが SQLエラーになってしまいます。 ただのselect文なのですがなぜでしょうか・・・。 ちなみにDBには接続できています・・・orz $con = mysql_connect("DBSERVER","ID,"PASSWORD") or die("データベース接続に失敗しました。処理を終了します。\n"); $sql = "select * from TABLE"; $db = mysql_query($sql, $con) or die("SQLエラー"); // クエリを発行
>>287 $sql = "select * from TABLE";
の前に
mysql_select_db('データベース名', $con);
がいると思われ。
" -> \"
290 :
287 :2005/09/16(金) 00:25:37 ID:6D+lJfyJ
288> 実行できました、確かに使用するDB名の記述がありませんでした(^^; ご親切にありがとうございます、助かりましたm(_ _)m
291 :
288 :2005/09/16(金) 00:36:50 ID:???
>>290 オメ。
PHPの話でなんだが、以下のようにしておけば多少はエラー追跡は楽になるかと。
$db = mysql_query($sql, $con)
or die("SQLエラー " . mysql_error($con)); // クエリを発行
教えてください。 カラム構成が1つだけ違う(コピー先のほうが1つカラムが多い)テーブル間で レコードのコピーってどのように行うのが一番スマートでしょうか? 1つだけ多いカラムには現在の時刻(current_timestamp)を入れたいです。 SQL一発で可能でしょうか?
>>292 insert into コピー先テーブル(カラム1, カラム2, 現在時刻カラム)
select カラム1, カラム2, now() from コピー元テーブル;
カラムの並びが同じで、最後のカラムに現在時刻カラムがあるのなら、これでもいいけれど。
insert into コピー先テーブル
select *, now() from コピー元テーブル;
295 :
mysql-shared :2005/09/17(土) 08:31:14 ID:E8vGU8Af
apt-getのパッケージにmysql-sharedってあるけど どういう機能があるパッケージなんですか?
接続ライブラリとかかな。 新版、旧版
ひらがなやカタカナのフィールドをorder byで50音順に並び替えたいんですが うまく並びません。 調べてみるとMySQLのcharsetが関係あるっぽいんですが レンタルサーバのmysqlなので、変えられないのかなと... こんな状況ですが、上手く50音で並び替える方法あるでしょうか?
298 :
NAME IS NULL :2005/09/18(日) 13:22:55 ID:LhxuH936
質問なのです。
id INT(8) default 1 NOT NULL PRIMARY KEY AUTO_INCREMENT
テーブルを作るときに、上の一行を追加するとエラーが出るのですが、どうしてでしょうか
ver4.1にしたとたん、エラーが出ました orz
ちなみに、これがなければ問題なくテーブルを作れるのです。
>>297 SELECT * FROM テーブル WHERE カラム LIKE 'あ%' ORDER BY カラム ASC
SELECT * FROM テーブル WHERE カラム LIKE 'い%' ORDER BY カラム ASC とか。
頭の一文字だけ検索して、並べてみるなんて方法は?
でも面倒だと思う
Mysqlの設定を変更できないなら、
スクリプト側の文字コードをMysql側に合わせてみると解消するかもです。
>>298 AUTO INCREMENTカラムにdefault指定をしているからでは?
id INT(8) NOT NULL PRIMARY KEY AUTO_INCREMENT
でよいと思う。
300 :
298 :2005/09/18(日) 13:46:19 ID:???
>>299 ありがとうございます。
無事に通りました
301 :
NAME IS NULL :2005/09/19(月) 05:13:18 ID:2nukKBtQ
少し前のWeb+DB PRESSに MySQLビジネスフォーラムの記事が載っていたのですが 検索してもサイト自体が消滅しています。 このフォーラムはどうなったのですか?
wayback machineで見たら 2004年10月が最後のアーカイブでした 空中分解…?
303 :
NAME IS NULL :2005/09/19(月) 19:27:24 ID:32fTLI5P
何卒初心者に救いの手を! 日付でソートをしたいのですが yyyyを無視してmm-ddのみでソートするためには どうすればよいのでしょうか 何卒よろしくお願いします
303です 自己解決しました
>>304 そう、そうする他ないんだよね。
そうすればインデックスも効くしね。
306 :
NAME IS NULL :2005/09/20(火) 19:30:00 ID:cMA2AiKL
mysqlに格納した画像は <img src="photo.php?name=aaa.jpg"> のように読み出してやれば表示できると思いますが 1ページ内に複数枚表示させたい場合も上の方法でやらないとだめですか? 表示枚数ごとにselectすることにりますよね??
308 :
307 :2005/09/21(水) 04:54:16 ID:???
いやちょっと違うかも? DateTimeにインデックスを張り、 「年」「年月日」「月日」のそれぞれで検索した時、 インデックスがちゃんと効くのかが心配です。 効かないとしたら…年と月日を分解してintに入れるのでしょうか?
309 :
308 :2005/09/21(水) 04:59:11 ID:???
失礼しました × 月日 ○ 年月 ですね
>>306 >表示枚数ごとにselectすることにります
これが気になるような場合は、photo.phpの処理の中でキャッシュしてやればよい。
といっても同じhtml内の記述でも
<img src="photo.php?name=aaa.jpg">
<img src="photo.php?name=bbb.jpg">
はプロセスとしては別のphoto.phpなので、メモリ上の共有は(通常は)出来ないので
ファイルを使ってキャッシュするのが一般的。
312 :
NAME IS NULL :2005/09/21(水) 16:47:25 ID:S9IkY3bj
緊急です。誰か助けて下さい。 MySQLのrootのパスワードがわからなくなりました。 なんとかして調べる方法はないでしょうか? Navicatというソフトを利用してアクセスすることはできます。 接続設定でrootのパスワードを保存するにしていたからです。 接続してuserテーブルを見てもパスワードの部分は暗号化?されているので何を書いているかわかりません。 何とかならないでしょうか?
314 :
312 :2005/09/21(水) 17:01:55 ID:S9IkY3bj
違いますよ。社内で使っているMySQLが急に動かなくなったんです。 でこのシステムを作った人が蒸発してしまったからにっちもさっちもいかないんです。 信用して下さい。
無理です。諦めてください。
>>312 アクセスできているうちに、ダンプ取っておけよ。
ってか、バックアップはとっているんだろうから、DB作り直せば?
>>314 >システムを作った人が蒸発してしまった
追い詰めた奴にも責任取らせて作業させとけ。
319 :
312 :2005/09/21(水) 17:29:23 ID:S9IkY3bj
資料を探し出しなんとかパスワードを探しだし、Navicatで接続できるようになりました。 しかしMySQLのソフトを起動しShow meを選択し、MySQLのウィンドウを見るとサービスは動いているけど動作してないような感じになっています。 MySQLのウィンドウ内でDatabaseタグを選択したら通常なら登録されているテーブルが表示されると思いますが、 何も表示されません。これってどういう状態になっているんでしょうか?
320 :
312 :2005/09/21(水) 17:31:33 ID:S9IkY3bj
>>318 特に追いつめたりしてないですよ。その人毎日定時で帰ってたし。
ある日突然こなくなったんです。
>>319 そのMySQLアカウントでは、件のデータベースに対して
情報が取得できない権限設定になってるんでないの。
>>317 で紹介されてるページを読んで、ちゃんとroot権限を奪取しないよ。
しかし突然蒸発しても、なんか社内の周りが平静な感じの
雰囲気というのも会社としてどうかと。
322 :
312 :2005/09/21(水) 18:13:20 ID:S9IkY3bj
>>321 やってみたけど無理でした。何が問題なんだろ。
何がどう無理だったんだ? とりあえず今問題なのは、お前自身だ。
rootパスワードは必ず二人以上で持っておく。 メンテナンス用アクセス経路も、必ず二人以上が知っておく。 DB以前の問題。 パスワードクラックする前に危機管理体制の見直しからやっておけ。
質問です。
「MySQL日本語の旅」
http://oss.timedia.co.jp/index.fcgi/kahua-web/show/MySQL%c6%fc%cb%dc%b8%ec%a4%ce%ce%b9 このサイトを読んで 4.1 への移行を検討しております。
Debian で apt-get で取得できる 4.1系は4.1.11で、cp932を使うことができ
ません。しかし、上述のサイトの「5.文字化け」を読む限りでは、サーバとク
ライアントの文字コードを合わせれば、それがutf8でなくても、\ や 〜 など
の記号も、テーブル名やカラム名に使わなければ、化けることはないようです。
カラム名に使われた\が化けるのは、カラム名の文字セット
character_set_system がutf8であり、変更不可であるのが理由だと思われま
す。
以上の理解でよろしいでしょうか?
もしこれが正しいなら、4.1.11 をインストールしたサーバを用意して、検証
をしようと考えております。
よろしくお願いします。
326 :
325 :2005/09/21(水) 23:21:24 ID:???
補足です。 本当は、まず自分で試すべきなのですが、私にはサーバ管理の権限がないので、 管理者に頼まなければなりません。頼むにあたって、問題があるかどうかの事 前の見通しを必要としております。 公式サイトからのバイナリのインストールが必要なのか、それともapt-get で 済むのかの見通しがほしいのです。 ご存知の方、どうかお教えください。
>>326 ちょっと待て。ちょっと待て!
まずはサーバーの管理者に相談しろ。
328 :
325 :2005/09/21(水) 23:58:36 ID:???
>>327 すでに相談しているのですが、管理者にはそういう知識はないのです。
インストールはできますが、SQL をほとんど書いたことのない人たちなのです。
>>328 じゃぁ、てめぇが自分のPCで試せばいいじゃないか?
まさか、2chへの書き込みも会社からで、自宅にさえ自分が管理しているPCが一台も無いなんてことはないよな?
330 :
325 :2005/09/22(木) 10:47:03 ID:???
>>329 実はそのまさかで、2ch へのアクセスは会社からです。
自宅には win98が1台、Debian Serge が1台ありますが、いずれも極めて貧弱
なマシンで、社の開発・検証環境を構築することができません。Debian には
一応、MySQL4.1 はインストールしてありますが…。
¥や〜が文字化けする、しないの確認をするのにマシンが貧弱かどうかなんて 大した問題ではないでしょうに。 単に動くかどうか判らない段階での環境構築を面倒くさがっているとしか思えないな。 それに、業務で検証が必要なんだから、自宅云々ではなく社内でマシンを用意するのが 普通でしょ。その手続きも面倒なの?
その蒸発した社員の給料分でテスト用PC1台買えと 上司に迫るか そいつの使っていたPCを再セットアップするとか
誰も使ってないパソコンの1台くらいあるわけでしょ それを業務外の時間でハードウェアのチェックかけて 業務時間内でOSインスコからmysqlのテストまですればいいのでは
なぜ、他人の会社の事に、そうまで必死になる…
>>334 いや、蒸発した手前、フォローぐらいはしとこうかなと思って…
>>335 山田ぁ!帰って来いっ!
お前の席はまだ空いているぞ!
>>336 課長とかに一緒にあやまってくれるか?
あと、もう一つ言わないといけないんだけど、一つ間違ってテーブル消しちゃってあわててバックアップ戻したらダミーのテーブルだった。
逃げ出した本当の理由はこれなんだ。
ごめん、やっぱり戻れないわ。
ここもネタスレになってしまったか
MySQLの導入を検討していますが、1つ分からない事があったので質問させて下さい。 MySQL(サーバ側)で、発行したSQLのログを見る(テキストなどに出力)事は可能でしょうか?
341 :
NAME IS NULL :2005/09/24(土) 05:08:19 ID:usiHEJHi
phpMyAdminから mysqladmin status を確認する方法はないのでしょうか? ランタイム情報には Queries per second avg がないようですので…
342 :
NAME IS NULL :2005/09/24(土) 21:59:24 ID:fw8iHz42
xamppいれたんだけどmy.iniがありません どうやってせっていするの?
>>342 サンプルの設定ファイルが数種類用意されてるので
それをコピーしてリネームして、内容を修正する。
344 :
NAME IS NULL :2005/09/25(日) 01:52:22 ID:mkYrWzs1
date,type,totalというカラムのテーブルがあり、 2005/9/25 orange 10 2005/9/25 apple 20 2005/9/25 fish 30 というデータが入っているとして、 dateを指定して、 orange=10,apple=20,fish=30 こういう列を取り出したいのですが、 どうやれば実現できるでしょうか?
SQLの仕組みとしては、3行出てくる。 だって、「条件を満たす行を全部書き出す」というのが、SQLのSELECT文のお仕事だもん。
そこでPHPですよ^^
もちろん、PerlでもCでもPythonでもいいぞ。
>>344 MySQLの質問じゃないやん。
SELECT type, total From てーぶる where date = '2005/9/25'; を実行すれば、
どのデータベースでも、日付が一致したレコードをずらずらと出力してくれる。
orange 10
apple 20
fish 30
ってね。
でも、この3行を単一の行にまとめる方法をSQLは提供しない。だって、
そんなことをしたらテーブルの構造が壊れてしまうじゃない? 検索条件しだいで
一行にある、フィールドの数が変わってしまうようなテーブルは、SQLでは
基本的にありえないから。
可変長で切り返しのあるレコード、 orange 10 apple 20 fish 30 は、SQLには
なじまない構造だ。
もちろん、別のプログラムからSQLサーバーを呼び出して検索させる場合には、
SQLサーバーから戻ってきたこの3行を、その呼び出しもとのプログラム(例えば
PHPのスクリプト)で一行に取りまとめ、ウェブなりテキストファイルなりに書き出す
ことは可能だけど、それはもはやMySQLどころかSQLの質問でさえないので・・・
344さんが使っている(使う予定の)プログラム言語に関連するスレッドで聞いた
ほうが、具体的な情報が得られると思うよ。
350 :
349 :2005/09/25(日) 12:28:59 ID:???
来たのか、コレ。
∩___∩ | ノ _, ,_ ヽ / ● ● | | ( _●_) ミ 彡、 |∪| ノ ⊂⌒ヽ / ヽノ ヽ /⌒つ \ ヽ / ヽ / \_,,ノ |、_ノ
admin権限無いんじゃないのか? エラー読め
354 :
344 :2005/09/25(日) 19:09:03 ID:HB0/ElST
説明が下手ですみません。 たしかにプログラムの方でやればいいのですが、 行を列に変換した上で(テンポラリテーブルを生成して)、 さらに他のテーブルとjoinしたいと思っています。 「行を列に変換」で検索したところオラクルでのサンプルは 見つかったのですが MySQLでなんとかできないのかと思い 質問させていただきました。
355 :
NAME IS NULL :2005/09/26(月) 14:02:12 ID:UGRhkP6s
5.0.12でストアドプロシージャを使いたいのですが、エラーが出ます。 mysql> delimiter // mysql> create procedure proc1() begin select * from a; end// ERROR 1418 (HY000): This routine has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you *might* want to use the less safe log_bin_trust_routine_creators variable) 何が原因でしょうか?
SET GLOBAL log_bin_trust_routine_creators = 1; をやれば実行できました。お騒がせしました。
357 :
NAME IS NULL :2005/09/26(月) 23:16:59 ID:UtB/D1MP
フィールド名からフィールドのタイプを得るのって 可能ですか? どうすればいいんでしょうか? 結構調べたんですが、のってないです。よろしくお願いします。
>>357 一旦テーブルの情報得て、そっから欲しいフィールドのところだけ抜き出せばいいんでね?
>>357 show fields from テーブル名 like 'フィールド名'
何か言語から得たいのなら、その言語の板で聞きなはれ。
テーブル名:TaisenRecord UserMei:ユーザの名前 Point:-100から100まで TaisenID:20050927000001 *8人対戦のゲームなので、TaisenIDはゲーム毎に8個ずつユーザ毎に保存されます。 「ユーザ毎の勝率」をデータとして出したいのですが、お知恵をお借りできないかと。 考えたSQL文:SELECT UserMei, COUNT(Point)/COUNT(TaisenID) AS Shouritu FROM TaisenRecord where Point > 0 GROUP BY UserMei; これだと where Point > 0の条件式が、総ゲーム数を出したいTaisenIDの方にも適用されて、勝率を出す事ができません。 Point >0 の条件をCOUNT(Point)だけに適用して、COUNT(TaisenID)には適用せずに、素直 に総ゲーム数とするようなSQL文の書き方を教えて頂けないでしょうか?お願いします。
>>360 テストしていないけど
SELECT TaisenRecord.UserMei, p.PointCount / COUNT(TaisenID)
FROM TaisenRecord
LEFT OUTER JOIN (SELECT COUNT(Point) AS PointCount, UserMei FROM TaisenRecord WHERE Point > 0 GROUP BY UserMei) AS p
ON TaisenRecord.UserMei = p.UserMei
GROUP BY TaisenRecord.UserMei;
MySQLのバージョンによっては LEFT OUTER JOIN の後に SELECT が置けないので
その場合は、一時テーブルにでも書き出せばいいと思う。
MySQL4.1をインストールした後 コマンドラインクライアントを起動させ rootで接続することはできましたが 「かねやんMySQLAdmin」というクライアントソフトでは 「コネクト失敗」と出て接続できません 何が原因なんでしょうか?
>>363 使ってるMySQL接続ライブラリの違い。
MySQLサーバ側を古い接続ライブラリで接続
出来るように設定するのが良いんでないか。
「接続ライブラリ」なんて聞いたことがないです… コマンドプロンプトの画面で作業していて テーブル作成、レコードの追加を参考書みながら 試しているレベルです。 その参考書には接続ライブラリ変更のコマンド(?)が 載っていないようです。 コマンド型のではやりにくいので、はやくGUIで行える 「かねやん」の方に移行したいのですが…
>>365 その参考書捨てた方が良い。
GUIよりCUI(コマンド)に慣れたほうが今後を考えるならいいと思う。
まぁ最後は好きにすればいいのだが。
>>366 やはりハイスキルな人はCUIが多いんですね
とりあえず今はGUIで行こうと思ってます
なんとか起動できるようにがんばってみます・・・
368 :
NAME IS NULL :2005/09/28(水) 00:28:22 ID:64Wfu/+M
MySQL4.0系までと4.1系以降ではユーザ認証のプロトコルが違う。 接続ライブラリの違いってのはこれのこと。 かねやんは使ったことないので良く知らないけど、 ver4.1対応のものでないと駄目なんじゃないの? MySQLに限らずCUIのほうがスクリプトで作業を自動化したりいろいろと便利だよ。
>>368 一回アンインストして4.0をいれてみた方が良さそうですね
まだレコードの追加すら碌にやり方知らないので…
そんな高度な事は…
初心者こそ、テキストベースでの操作をやってみたほうが、 「自分がどのカラムの何をいじっていて、どういう風に検索しているか」 を、実感することができるよ。 もし、SQLなりMySQLなりについて好奇心を持っているなら、 CUIでしばらく遊んでみることをお勧めする。精神主義でもなんでもなく、 そのほうが「お得」でっせ〜 お客さん! と、本気でお勧めしたい。
371 :
366 :2005/09/28(水) 02:58:21 ID:???
>>369 CUIのほうが高度というわけでもない。
GUIだと細かい動きを隠ぺいしてしまうので勉強にはならないとおもう。
だから藻前の持ってる本は捨てろって(ry
>>369 GUI の怖いところは、裏でどんな複雑怪奇なことが起こっているのかをユーザーに
理解させないままで、複雑で高度なことをやってしまうという点で、いや、本当にそれで
全部の仕事が片付いてしまうなら、それはそれで全く問題ない。
大企業で専門家がデータベース様の管理をしてくれていて、すでにテーブルの
構造もデータのチェックも完璧に整っている環境で、事務員さんがアクセスや
エクセルの延長線上にあるものとしてSQLサーバーを使うなら、めんどくさいことを
知る必要は全くない。
だがしかし・・・
たとえMySQLといえども、自分でサーバーをインストールし、自分で
テーブルの構造を設計し、レコードを追加し、テーブルとテーブルにまたがる
検索するようなものを作るということになると、データベースエンジンなるものが、
いつ、どこで、何をやっているのか、一歩ずつ理解するほうが、かえって
勉強の近道になる。一見するとGUIは、簡単だけど、マウスを一発クリックする
だけで、初心者には理解不能なたくさんのコマンドが実行されてしまうから、
勉強しようにも手の付けようがない状態に閉じ込められたまま抜け出せなくなるよ。
Mysql 4.1系で「十」←数字の10って文字 「like %十%」でヒットしますか? 私の環境では何故かヒットしません。。。 navicat 2005でもヒットしませんでした。 DBの文字は default-character-set=binary で設定してます。 対策方法ご存知の方はご教授下さい。
mysql -u root -p Enter passward: ******* Can't connect to MySQL server on 'localhost'; 何もできん
375 :
NAME IS NULL :2005/09/29(木) 04:02:55 ID:xRNC5Ndx
>>373 charsetがbinaryだからでしょ。
create table t1 (c1 char(3)) default charset=cp932;
とかでテーブル作ったらちゃんとヒットしたよ。
intで10を放り込んで、like %十%でヒットしないという話かと思った。 最近ドシロウトな質問多いから、最初から「どうせしょうもない話だろ」と疑ってかかってしまう・・・・・
>>373 Shift_JIS では、「十」=0x8F5C、「\」=0x5C で、binary だとエスケープ記号と
認識されてしまう。
同様によく問題になるのが「能」=0x945C。
379 :
NAME IS NULL :2005/09/29(木) 11:19:19 ID:7+gpDoj7
>>376-378 ありがとうございます。
373です。
以下のSQLを実行したのですが反映されないです。
ALTER TABLE `table_name` CHANGE `yomi` `yomi` VARCHAR( 250 ) CHARACTER SET sjis NOT NULL
ALTER TABLE `table_name` CHARACTER SET = sjis
テーブルを作り直したほうが良いですかね。。。
>>377 まさか・・・
文字コードの *変更後* に登録したデータは「like %十%」でヒットするのではないか。 以前、SJIS -> EUC に変換したときに、WHERE で既存データがマッチしない現象に チト悩んだことがあったので(DUMP -> 文字コード変換 -> リストアで直った)。 binaryは使ったことないのでハズしているかもしれんが。。。
373です。 今気付いたのですが ALTER TABLE `table_name` CHANGE `yomi` `yomi` VARCHAR( 250 ) CHARACTER SET sjis NOT NULL ALTER TABLE `table_name` CHARACTER SET = sjis も反映されてましたが、10万レコードのyomiデータが「????」に なってましたorz
ulogdを使ってiptablesで弾いたログをMySQLのデータベースに格納するようにしてみたのですが、 これってどこまで記録され続けるんでしょうか。 普通のログファイルなんかだと、1週間ごとにローテーションさせたりとかしますが データベースだとどういう風に管理すれば良いんでしょう。 my.cnfにサイズの上限設定するのかと思っていたんですがそういう項目無いみたいだし・・・ 使用しているのはMySQL 4.1.14です。
>>383 記憶媒体の限度まで。
古いものは削除するように、ルーチン入れたら。
386 :
NAME IS NULL :2005/09/30(金) 02:22:24 ID:3xJ+N7MW
>>367 >>385 見れば分かるけど、英語マニュアルのほうは日々追加更新されてっている。
でも日本語のほうは更新されていないっぽいので、既に目次レベルで差がでてる。
だからまずは英語版をあたるのが良いと思う。
それに対応する日本語ページがあり、ぱっと見内容に差異がなさそうであれば、
もちろん日本語のほうが分かりやすいのでこっちを読むけど。
ttp://dev.mysql.com/downloads/mysql/4.0.html にあるMySQL 4.0.26をMac OS X 10.4.2にインストールしようとすると
インストーラが「インストールできません」と言います。
確かに「Installer package (Mac OS X v10.3)」と書いてありますが、
10.4.2にはどうやったら4.0.26をインストールできるのでしょうか?
(4.1はインストールできたんですが、認証形式がまだ特殊らしいので4.0にダウングレードしたいのです。)
389 :
NAME IS NULL :2005/09/30(金) 16:22:08 ID:wPRUUBnI
mysql.sockとは何ですか?プログラムですか? # /etc/init.d/mysql start すると、/var/lib/mysql/mysql.sockがチラっと見えます。 mysql.sockは一時ファイルだと予想しましたが、MySQLインストール直後に find / -name mysql.sock -print がヒットしなくてもインストールは正常?
391 :
NAME IS NULL :2005/10/01(土) 10:46:41 ID:sipdXsCV
>>390 君は自分のサイトを宣伝したかっただけかorz
392 :
NAME IS NULL :2005/10/01(土) 10:48:45 ID:sRgRD7pr
>>391 え? こんなことに Google の社長様がご降臨あそばしたの!?
面白いと思って切り返したんだろうな・・・
面白い突っ込みをしたつもりなんだろうな・・・
なんかMYSQL5がダウンできん・・・
ちょっとお聞きしたいのですが、空テーブルを作成することは可能でしょうか? もし、可能でしたらやり方を教えていただけませんでしょうか? 当方、MySQLのVer4.1使用です。
空テーブルって? 意味がさっぱり。 rowのないテーブルならいくらでもつくれるが。
398 :
NAME IS NULL :2005/10/03(月) 02:43:18 ID:09MzqyX1
カラムが1つもないテーブルは作れないよ。 ERROR 1090 (42000): You can't delete all columns with ALTER TABLE; use DROP TABLE instead
>>362 さん、
遅レスですが、回答ありがとうございました!
やっと休みがとれて・・PCの前に来れた次第です。。。。
mysqlのバージョンは4.0.10だったんですがどうもうまくいきませんでした
Version確認してちょ っていうエラーで。
4.1にバージョンアップする作業がんばってみます。
MyODBCを利用してVisualBasicから MySQLを操作する方法が分かりません。 データソースの設定は「ユーザDSN」タブにて行いました。 テスト用のテーブルも幾つかMySQLに作成しています。 次に、どのようなコードをVBで書けばいいかが 全くわからない状態です。 どなたかご教授お願いします。 環境は以下のとおりです。 MySQL: 4.1 MyODBC: 3.51 VisualBasic: 2003 (VisualStudio内の)
ホームページをつくって データをMSQLでアクセスして入力し、 データのソートとかをホームページ上で 実現させたいんですが これってPHPで実現させるんでしょうか?
別に好きなの使えばいいんじゃないの
396です。
>>398 やはり無理ですか、裏技的なものがないかなぁと質問してみたのですが・・・
ありがとうございました。
>>402 べつにPerlからMySQLを利用することだってできるけど・・・
問題は、そもそも402の使うウェブサイトがMySQLを提供しているか
という点ではないのか?
406 :
NAME IS NULL :2005/10/03(月) 23:04:02 ID:/hziuCvR
# mysqld_safe --datadir=hoge このようにして起動して、起動後にdatadirの値を 確認するにはどうしたらよいですか?
psコマンドにしかるべきオプションを食わせてやれば
又は起動スクリプトを使用してあとでそれを参照する
409 :
NAME IS NULL :2005/10/03(月) 23:21:59 ID:/hziuCvR
僕を叱って下さい。 # ps axu で、右の方に--datadir=/usが見えましたが コンソール右端で切れて見えません。 クスコで広げる方法を教えてください。
ps -efでダメかYO
411 :
NAME IS NULL :2005/10/03(月) 23:30:53 ID:/hziuCvR
ps -efでも同じように切れましたがフォントを小さくしたら見えました。 もしもっと長かったら>でリダイレクトして見ればいいのかな。 ありがとうございました。
413 :
NAME IS NULL :2005/10/04(火) 00:47:00 ID:3diVCpAB
>>412 ひろがりました。ありがとうございます。
>>406-413 MySQLスレなんだから、MySQL内でなんとかしようよ
SHOW VARIABLES LIKE "datadir";
これでいけるでしょ
415 :
400 :2005/10/04(火) 16:47:57 ID:RwnDnVsQ
初歩的な質問すいません。 No word value --------------- 1 name ああ 1 age 18 1 place 日本 2 name いい 2 age 19 2 place 日本 という構成のテーブルがあって、 word="name" and value="ああ" と word="place" and value="日本" を満たすNoの一覧を取得したいのですが、 どのようなSQL文になるんでしょうか? 以下を思いついたのですが、Emptyになってしまいます。 アドバイスお願いします。 select No from XXX where (word="name" and value="ああ") and (word="place" and value="日本")
>>417 いえ、両方の条件を満たすレコードのNo一覧が欲しいのです。
>>416 >>418 (word="name" and value="ああ") と (word="place" and value="日本") を
両方満たすという条件なんてありえんぢゃろ?
例で示しているテーブルから、どのレコードが返って欲しいのか書き出してみそ。
guest
>>419 確かに両方を満たすことなんて有り得ないですね。
かといってorではないです。
例の場合はNo=1だけがヒットして欲しいです。
422 :
419 :2005/10/04(火) 18:36:22 ID:???
末尾のSQLで期待の動作はすると思うが、そもそもテーブル設計がマズイような。。。 こんなテーブルの方が自然ぢゃね? No name age place -------------------- 1 ああ 18 日本 2 いい 19 日本 SELECT XXX.no FROM XXX INNER JOIN XXX AS t ON XXX.no = t.no AND t.word = 'place' AND t.value = '日本' WHERE XXX.word = 'name' AND XXX.value = 'ああ';
INNER JOINする必要ある?
漏れも、自分自身のテーブルを結合するのがスマートだと思ったけど・・・・他に方法ある?
425 :
419 :2005/10/04(火) 23:00:01 ID:???
>>423 ・MySQLのバージョンが記載されていなかったのでサブクエリが使用できるかどうか不明
・SELECT XXX.no FROM XXX, XXX as t WHERE ... だとレコード数の2乗がWHERE対象になる
という理由で自己結合で書いたんだが。。。
他に良い方法があればご教示ヨロ。
426 :
NAME IS NULL :2005/10/05(水) 01:02:34 ID:JTV4Wb06
MySQLにXML文書を格納したいんだけどXMLサポートしてないんだよね?MySQLって。 Oracleなどはしてたような気がするけど
428 :
NAME IS NULL :2005/10/05(水) 17:30:31 ID:7ZhDZrog
grant select,insert on testdb.* to testuser@localhost identified by 'xx'; この後testuserの設定値のselect,insertを得るコマンドを教えてください。
dev.mysql.comの日本語マニュアル、更新してくれないかなぁ プリペアドステートメントの仕様の辺りなんか、仕様変更のせいで大嘘書いてあって大混乱したし・・・・・ 他人本願と言われればそれまでなんだが。
430 :
NAME IS NULL :2005/10/05(水) 23:58:25 ID:udn/pwKt
ちょっと教えてください。 スレッド数=クライアント数なのでしょうか。 I/OスレッドってInnoDB用の何かの領域なのでしょうか。 スレッドとI/Oスレッドの機能がいまいちよくわからないのです。 よろしくお願いします。
>>429 とりあえずMLに投げれよ。
おまえから初めればよかろう。期限やノルマなんて無いんだからさ。
>>430 スレッド数=クライアント数+α
InnoDBは確か専用のI/Oスレッドを持っているはず。パラメータで変更も可能。
デフォルトは4か2かだった気がする。詳しくは自分で調べれ。
基本的にはクライアントが新しく接続にくるたびに、そのクライアント専用のスレッドが
用意されて対応する。
ただしスレッド自体はクライアントが切断しても消えることなくキャッシュされていて、
別のクライアントが接続にきた時に再利用されるなどの仕組みがある。
したがって今この瞬間に同時にクライアント10台から接続を受けているからといって、
mysqld内のスレッド数が10+αで一意に決まるってわけじゃない。
で、やっぱり詳しくは自分で調べれ。
>>428 mysql> grant select,insert on testdb.* to testuser@localhost identified by 'xx';
Query OK, 0 rows affected (0.02 sec)
mysql> SELECT select_priv, insert_priv FROM mysql.db WHERE db='testdb' AND user='testuser' AND host='localhost';
+-------------+-------------+
| select_priv | insert_priv |
+-------------+-------------+
| Y | Y |
+-------------+-------------+
1 row in set (0.03 sec)
>>428 おまいさんはmysql権限データベースも知らんのか?
知らんくってわるいか!!このボケナスが!!
知らないから聞いてるんじゃねーか!!このバカンスが!!
ミナミの〜島のカメハメハ・・・
438 :
NAME IS NULL :2005/10/06(木) 23:51:39 ID:oJrMDeAZ
>432 430です。ご意見ありがとうございます。 助かります。
439 :
NAME IS NULL :2005/10/07(金) 11:24:09 ID:OeMZClMO
rootの権限が全部なくなった。 再インストール以外の復活方法や、MySQLをインストールする時に 行われるrootユーザの作成プロセス部分だけを漏れが任意に 実行する裏技キボン。
低レベルな質問で申し訳ございません。 MySQLにてデータを保存しているデータをHTMLの<SELECT>の<OPTION value=""> で呼び出すにはどうしたらよいでしょうか? よろしくお願い致します。
Perl, PHP, Java 等の何かしらの言語を使って 1) MySQLからデータを取り出し 2) <SELECT><OPTION value="">を生成 というプログラムを作成する
>442 ごめんなさい。ちょっとよくわかりません。 使用言語はPerlを使用しています。
444 :
p :2005/10/07(金) 15:40:18 ID:pnKsQtLU
5
>>439 権限データベースを削除して、mysql_install_dbを実行すれば
最初の状態にはなると思う。
446 :
NAME IS NULL :2005/10/07(金) 15:56:25 ID:OeMZClMO
>>445 ありがとうございます。おかげで復活いたしました!
名前見るからに日本人だよな・・・・・ バグに引っかかってるかどうか知らんが、 width → with show grantsの使い方くらいは覚える flush privilegesの使い方くらいは覚える バグに引っかかっているのなら、アップデートの仕方を覚える
449 :
NAME IS NULL :2005/10/07(金) 23:17:51 ID:xS73BXyY
you mother fucker!!
(;´Д`)ハァハァ
>>443 そういうのはCGIなPerlのトコで聞いてください。
452 :
NAME IS NULL :2005/10/08(土) 01:45:13 ID:gUciMCWp
453 :
NAME IS NULL :2005/10/08(土) 01:46:26 ID:8KBHw8AA
>>439 単にrootパスワード忘れちゃっただけとかなら"--skip-grant-tables"指定してmysqld再起動すれば
パスワード認証無しで入れるからそれでもいいとおもうけどな。権限設定終わったらもちろん
--skip-grant-tables無しで再起動で通常状態に。
454 :
NAME IS NULL :2005/10/08(土) 05:01:45 ID:N+iSLgRb
トランザクションが必要ではないのですが、 大量の更新作業があるテーブルはMyISAMとInnoDBのどちらがいいでしょうか? 大量に更新する部分のカラムはsmallint,mediumint,varcharの3種類です。
>>454 大量の更新がある場合は、フラグメンテーションの
起こりにくいInnoDBの方がいいでしょう。
>>454 『High Performance MySQL』(実践ハイパフォーマンスMySQL)には確か以下のように書かれていた。
Read/Writeの比率
・Readが90%以上 → MyISAMが一番速い
・Readが80%から90% → BDBが一番速い
・Readが80%未満 → InnoDBが一番速い
間違ってたらゴメソ。参考程度にな!
457 :
454 :2005/10/08(土) 05:29:24 ID:???
458 :
NAME IS NULL :2005/10/08(土) 09:58:47 ID:DbukFtVS
InnoDBって名前がまず気に入らない まるでチンコ不能なDBみたいじゃないか。
陰嚢db なのか?!
おまくる
中学生かお前は。 イノベーション(innovation = 技術革新)以外、今の今まで考えもしなかっ たよ。
中学生はイノベーションよりマスターベーション
すまん俺も in と no を分けて呼んでた orz
>>458 まあ下手に敵対的なコメント出しても裏目に出るだけだろうし<Welcome
やばいかもしれんね。特にコマーシャルライセンスの位置づけ。
IBMやSUN、最近はMicrosoftでさえオープンソースコミュニティや
ハッカー(悪い意味じゃない方の)と折り合いを付けようとしているけど
Oracleにはその香りがしない。
Innobaseを資金的に補助するっつー絵が想像できない。
有り体に言って、潰す気だろう。
InnoDB使えなくなったらMySQLから離れるって人はかなり多いはず。
466 :
NAME IS NULL :2005/10/08(土) 18:49:23 ID:Jqmxvx7i
ライセンスのGPLは変えないと思うけど。 俺来るのポ優れ対策ではと。。。
467 :
NAME IS NULL :2005/10/09(日) 01:25:04 ID:qXIKHGf+
もしかした「イノベーションのジレンマ」を何とかするために Oracleが考えた秘策だったり?
in no DB inn p oDB
居乃出美
真面目な話、OracleでのHeikkiの待遇ってどうなるんだろうね。 HeikkiはInnoDB作った人ね。
ヒッキー?
473 :
NAME IS NULL :2005/10/10(月) 10:05:28 ID:+XVZSTvE
InnoDBのダイナミックダンプは有償だったが,これをOracleが販売サポートするのだろうか?
InnoDBってGPLだったような・・・ だとしたらライセンス的にはOracleには取り込めないんじゃないのか? 取り込んだらOracle本体のソースコードもGPLにしなきゃいけないはずだから。。。
んなわけないべ。ここまで露骨なMySQLつぶし。
>>474 Oracleに取り込むかどうかは置いておいて、
>InnoDBってGPLだったような
が間違い。GPLだけじゃなくてソース隠蔽可能なコマーシャルライセンスもある。
でなければそれを組み込んだMySQLで、コマーシャルライセンスなんて出来ないでしょ。
こうなるとInnoDBに代わる強力なDBがほしい。 案1.BDBを更にチューニング 案2.InnoDB開発陣をBDBあるいはmysql本体への取り込みを画策・・・ 現実的じゃないなぁ・・・
data\cshost96.err data\cshost96.pid data\ib_logfile0, data\ib_logfile1 data\ibdata1 などのファイルは削除しても問題ないんでしょうか? サイズが大きいので出来ればけいしたいのですが。
480 :
NAME IS NULL :2005/10/11(火) 01:31:57 ID:vPBIE0Xh
>>479 ホスト名.err → エラー出力ログファイル 消してもOK
ホスト名.pid → MySQLが起動しているかどうかの判定に使用されるファイル 消しちゃ駄目だって
ib_logfile0およびib_logfile1 → これはInnoDBのREDOログファイルだよ 消したら動かなくなるっつうの
ibdata1 → これはInnoDBのデータファイルだよ 消したらデータ無くなるっつうの
InnoDB使わないから要らないってのなら --skip-innodb オプションを指定してサーバを起動した後、
上記InnoDB関連ファイルを削除すべし。
481 :
479 :2005/10/11(火) 03:32:48 ID:AfTi8Fmy
>>480 どうも
なんかややこしいっすね
とりあえずerrだけ消しときます。
それと、新たに別のPCにMySQLを入れたので
そっちにもデータをコピーしたいんですが
Dataフォルダの中を全部コピるだけでOK?
483 :
NAME IS NULL :2005/10/11(火) 09:49:34 ID:/XI8s+SH
InnoDBってdata以下のファイルでコピーして他の環境に持ってゆくと使用中です!とか言われるんだけど、 MySQLをシャットダウンしてからコピーしても駄目なの? data以下をコピーしてWin <-> Linux間を移動出来る形式ってどれだろう・・・
4.1って、復問い合わせとビュー使える?
>>484 ありがとうございます。
稼動状態であれば有償ツールを使うしかないようですね(--; 高いって。
mysqldumpを利用した場合、mysqldump --single-transaction オプションを付ければ
innoDBもバックアップ出来そうですが、こちらは外部キーを設定しているinnoDBテーブル
の一部でリカバリに失敗する可能性があるらしいですね。
もう少し詳しく調べてみたいと思います。
487 :
NAME IS NULL :2005/10/11(火) 13:51:23 ID:vPBIE0Xh
とりあえずOS非依存でコピペだけでどこに持っていっても動くことで知られているのはMyISAM。
>>484 副問い合わせは4.1から、viewは5.0からだった希ガス。
>>488 なるほど。d。
5.0って、まだα版って感じですかね?
>>489 ver5.0.13がRC(Release Candidate)版だよ。
Stable > RC > beta > alfa
alfa
本当の stable は x.1 からだよ
494 :
NAME IS NULL :2005/10/11(火) 16:34:05 ID:vPBIE0Xh
>>493 x.y.zとした場合、xがカウントアップされるのは大幅機能追加、
yも機能追加、zがバグ修正だと思うけど。
ver5.0.13は安定しつつあるけどver5.1.xはまだまだでしょ。
495 :
NAME IS NULL :2005/10/11(火) 18:44:21 ID:0dv9mXs5
すいません。質問させて下さい。 あるテーブルの中の情報を他のホストの同じテーブル構造にinsertしたいと 考えています。そこで、テーブルの中の情報をSQLに落とし込みしたいのですが 可能でしょうか? some_tableをsame_table.sql にし、違うホストで、source some_table.sql する。他に良い方法があればアドバイス頂ければ助かります。宜しくお願い 致します。
496 :
NAME IS NULL :2005/10/11(火) 20:23:15 ID:82ho+KsK
MySQL4.1です。 日付データ(YYYY-MM-DD HH:MM:SS)を使って、月毎の行数を知りたいのですが SELECT count( formatDate ) , formatDate FROM ( SELECT date_format( date, "%y/%m" ) AS formatdate FROM `test` ) AS sub GROUP BY formatDate よりも、もっとスマートなやり方はないのでしょうか?
>>496 サブクエリは別にいらないと思う。
SELECT count(*), date_format(date, "%y/%m") AS formatDate
FROM test
GROUP BY formatDate;
SELECT date_format(formatDate , '%Y-%m') , count(*) FROM test GROUP BY date_format(formatDate , '%Y-%m') とか
499 :
496 :2005/10/11(火) 20:46:28 ID:???
>>497-498 ありがとうございます。
そうですね、普通にそれで出来ました。しかも早くなって嬉しい限り。
>>495 ある時点でのデータを別のサーバに持っていきたい場合は、
myisamなら単にテーブル(FRMファイル、MYIファイル、MYDファイル)をコピー&ペースト。
それ以外はとりあえずmysqldumpの使用を検討か。
常時それを行いたいならレプリケーションを使う。
501 :
NAME IS NULL :2005/10/12(水) 16:50:32 ID:Nn1nCqw6
mysql 3.23.58 のデータをmysqldumpで取って4.1.14に入れようと思ったら互換性がないみたいで入らないのですが 何かいい方法ありませんでしょうか?
502 :
NAME IS NULL :2005/10/12(水) 18:18:53 ID:YJf8iZjT
>>501 mysqldumpのバージョンが3.23系に付属のそれということでは?
4.1系のmysqldumpで3.23のデータをダンプしたものを
4.1にインポートすればたぶん動くとおもう
>>503 501はMySQL3.23と4.1の仕様の違い、例えばcharの長さの考え方が変わったとか
そんなのを簡単するマイグレーションツールないの?ってことかと思った。
505 :
501 :2005/10/13(木) 12:31:16 ID:WBVtPxcB
>>502 /*! 〜 という行が数行流れて止まるのです。
>>503 ってことは現3.23代をバージョンアップしてからってことになるのですね
結局 dumpコマンドとしてでなく sql文として実行してやればなんとかデータを入れたりはすることができました
ありがとうございました。
が又別の問題が発生したのですが
データ元のsql文字コードはlatin1 ここにEUCコードとしてデータを登録して使用しておりdumpしてとったファイルはそのまま
4.1側のsqlに入れようとすると文字化けします。 4.1側の文字コードはujisでshow character set コマンドでみるとEUC-JP と書いているので
あっていると思うのですが何故なんでしょうか?
質問させてください。 MySQLでユーザ毎に容量制限するにはどうしたらいいでしょうか?
>>505 その説明だけだと状況がいまいちわからんので一般的なアドバイスのみ。
SQL文としてデータを持っているのなら(INSERT文の列挙)、次のようにやれば文字化けはしないはず。
1. テーブルをujisで作成する。 CREATE TABLE t1 (c1 char(1)) default charset=ujis;
2. SQLを実行するクライアントの文字コードをujisにあわせる。 set names ujis;
3. 流し込み実行。
あと文字化けにもいろんなパターンがあるんだが、どういう文字化けになってる?
半角クエッションマーク"?"に成っているのか、なんともいえないぐちゃぐちゃなやつなのか。
あと文字化けの原因を突き止める上でGeneral Logを見るのは結構重要。
General Logを出すようにServerを設定して(起動オプションに--logをつける等)
まずMySQLサーバに文字化けせずに届いているのか、あるいはその前の時点で化けているのか調べるべし。
>>506 MySQL自体にはそういう機能はないと思う。
MySQLでのIndexの張り方について質問です。 特にマルチカラムインデックスについていまいちよくわかってないのですが、 「ID (主キー), 氏名, 都道府県, 市区町村, 住所以下」 という構成のテーブルがあるとして(データ量は1000万件程度)、 都道府県から検索したり、氏名and都道府県の組み合わせで検索したりと、 それぞれのカラムを自由に組み合わせて検索できるようにする場合は どのようなインデックスの張り方が考えられるでしょうか? MySQLは一度の検索にひとつのインデックスしか使用しないとのことなので、 複数のwhere条件を組み合わせる場合はマルチカラムインデックスを使用する必要があると 理解しているのですが、すべてのカラムが検索条件になりうる場合は単純に すべてのカラムをひとつのマルチカラムインデックスに含めれば良いのでしょうか?
510 :
NAME IS NULL :2005/10/13(木) 23:48:45 ID:A31Z9e2F
>>509 もしそれが例えじゃないなら・・・それ以前になんかがおかしくないか???
511 :
509 :2005/10/13(木) 23:57:55 ID:???
えっ すいません、恥を忍んで聞きます。 どこがおかしいのかわかりません。 教えてください。
>>509 とりあえず・・・
> 複数のwhere条件を組み合わせる場合はマルチカラムインデックスを使用する
> 必要があると理解しているのですが、
これ、違うと思う。インデックスなしで検索はできるでしょ?
514 :
509 :2005/10/14(金) 12:17:01 ID:???
>>512 >mysql> SELECT * FROM tbl_name WHERE col1=val1 AND col2=val2;
>col1 と col2 に複合インデックスが存在する場合、対応するレコードを直接読み取れます。
これを「col1とcol2が検索条件のときにそれらを含むマルチカラムインデックスがあればベスト」と読んだのは間違い??
すなわち「複数のwhere条件を組み合わせる場合はマルチカラムインデックスを」と理解してたんですが・・・。
>>513 インデックスなしで検索って・・・?
説明が足りなかったけど、少しでも負荷を減らしたいとおもってて。
現実にインデックスなしで1000万件のテーブルに検索かけることって無いですよね。
col1 だけの索引で十分に絞り込めるならマルチにする必要は無い。 col1+col2 の索引がある場合に col2 だけが検索条件の場合は索引は使われない。 氏名, 都道府県, 市区町村, 住所をいろいろな組み合わせで検索したいということなら それぞれで単一の索引を作ったほうがまだ実用的。
516 :
509 :2005/10/14(金) 12:48:02 ID:???
>>515 なるほど、とてもわかりやすい。どうもありがとう。
>>515 MySQL でマルチカラムのインデックスを作ったことはあるのかな。
col1+col2 のインデックスを作ろうとしても、
col1, col2 のそれぞれを検索するものも作られるよ。
この例だと3つ作られるわけだが、実際にどれが使われるのかは場合によるみたい。
ヒントをうまく与えられるといいんだけど、MySQL にはないらしい。
519 :
517 :2005/10/15(土) 00:36:38 ID:???
>>518 それは同じ。
ただ、
>>517 のはちょっと間違って覚えていたよ。
col1+col2 の複合インデックスで作ったときは、
col1 もしくは col1+col2 のときにINDEXが使われる。
col2 に対しての検索には使われない。
逆順に、col2+col1 という複合インデックスも同時に作れる。
このときは、col2 もしくは col2+col1 という検索になるね。
>>509 のようにどれでも検索したいというときは、
順番を入れ替えて作った複合インデックスをいくつか作る
ということになりそうだけど、何か変だとは思う。
郵便番号とか(ある意味インデックスだね)を入れて簡単にしたほうがいいような。
520 :
509 :2005/10/15(土) 04:05:13 ID:???
>>519 そーか、郵便番号使えば大量にインデックス張らなくて済む話ですよね。
>>510 や
>>513 が言ってたのもこのことか。そもそもMySQL関係ない話だった。。
けど勉強になりました、どうもありがとう。
初歩的な質問ですいません IDを10桁で、文字列型ではなく、整数型で、 0から始まる番号で表示するにはテーブルはどう設定したらいいのでしょう? 100→0000000100 計算式が必要なので文字列型は使えないんです。 どうぐぐってもわからなかったので、お願いします。
zerofill
>>523 うわ〜
あれだけ悩んだのにあっさりできました。
ありがとうございました。
DATE型で年月日入っているカラムから年と月で検索をかける方法がわかりません・・・orz MySQLだとto_dateとかって使えないんでしょうか?
526 :
NAME IS NULL :2005/10/18(火) 01:00:05 ID:Bivs9YNM
528 :
NAME IS NULL :2005/10/18(火) 06:16:56 ID:M02ZUYqC
オプチマイザによるキーの決定は、 テーブル全体の行数も判断材料になってるのでしょうか? それとも行数の少ない時に選ばれるキーが、 行数が増えても使用されるのでしょうか?
>>525 検索対象のフィールドに関数を使うのは避けるべきで、
例えば2005年10月で検索したいなら範囲条件で問い合わせるのが常套。
where xxx >= '2005-10-01' and xxx < '2005-11-01'
530 :
NAME IS NULL :2005/10/18(火) 19:02:21 ID:PGtIQnsH
531 :
530 :2005/10/18(火) 19:24:37 ID:???
補足です。 そのカラムに、できればTIMESTAMP型は使いたくありません。 なぜなら、先の、登録日時を保持するカラムとは別に、更新日時を保持する カラムを TIMESTAMP 型で持ちたいからです。
>>531 INSERT の時にnow()じゃダメなのか?
533 :
530 :2005/10/18(火) 21:16:53 ID:???
>>532 現在はそれでやっておりますが、それを忘れるプログラマがおりますので、
カラムにデフォルト値を指定したいのです。
テーブル設計をしっかりやることで、プログラマのミスを回避したいと
考えております。
535 :
530 :2005/10/18(火) 22:56:18 ID:???
>>534 独自のフレームワークによってORマッピングは行っておりますが、手作業で
INSERT文、UPDATE文を書かなければならない場合もあります。
なお、このフレームワーク以外を使うことは、今のところできません。
>>537 最初そっちみて販元の情報確認したらパッケージ版なんだけど
ソフト流通系に乗らないで、直販のみみたいなんだよね。
ところでfreeの方(ML)でも書かれてたが、
>CD-Rを読み込める環境
売る気(売れる気)ナンシングですか(w
まあパッケージはバージョン依存しないが、
メディアはバージョン依存するから、出荷時出来るだけ最新のものを
ということではあろうが、マスター制作費&スタンプコストも下がってるし
ROMでやるべきだと思うのだが。
539 :
NAME IS NULL :2005/10/19(水) 13:45:08 ID:HDkB7SHq
商売で使っているわけではないので、ライセンスを買ったことは無いのですが・・・・ やはりMySQL6が出たときには、ライセンスを買いなおさないといけないのでしょうか?
540 :
539 :2005/10/19(水) 13:46:22 ID:HDkB7SHq
ごめんなさい、訳のわからないことを書いてしまいました。 いつか使うかも知れないので、17800円の安いライセンスを買ってほったらかしておこうと思うのですが、 やはりMySQL6が出たときには、ライセンスを買いなおさないといけないのでしょうか?
>>540 MySQLは知らないけど、普通はメジャーバージョンアップで買い直しじゃない?
商用ライセンスに永久ライセンスみたいなの付けるなんてあんま意味ないし。
どっちにしても、必要な時に買えば?
542 :
NAME IS NULL :2005/10/19(水) 15:09:26 ID:kLd0WyTB
お願いいたします。 結構調べたのですが、見つからず、、、 今DBが一個ありまして、その中に、テーブルが10個ほど入っております。 いいままでのデータが、SJISで入力されており、それを、EUCに変更したいのですが、 コマンド一回で一気に変換するようなコマンドありませんでしょうか?
nkf
>>539 MySQL3→MySQL4の話で言えば、ライセンスは持ち越し。
(InnoDBかBDBの使用料を含むか含まないかの区別しかない)
ライセンス料は特に値上げしてないから必要な時に買えば良いと思うよ。
でも
>17800円の安いライセンス
って多分Navicat2005単体のライセンスと勘違いしてる。
良いソフトだけど正直高いので、MySQLとパックになってる記念パッケージが
今回のお買い得かな。でも商用ライセンス不要ならお買い得にはならんしね。
545 :
NAME IS NULL :2005/10/20(木) 01:22:55 ID:k19Aufr4
YYYYMM形式の年月の文字列の項目を検索項目とした場合 ある期間の範囲のデータを抽出するのに 単純に>や<を使うやり方は駄目なんですかね?
訊く前にやってみるんだな
4.1.15
on duplicate key updateについて教えて下せぇ。 MySQL 4.1.12 + Excel2002でVBAからシートにあるデータをインサート しようとしています(insertは正常に出来る事を確認しています) テーブルは mcode int(9) unsigned not null, mkt int(2) unsigned not null, is_kbn int(2) unsigned not null, mg_name varchar(40) not null, t_unit int(9), primary key (mcode) With unionjouhou(idx) strSQL = "" strSQL = strSQL & "insert into meigara (" strSQL = strSQL & " mcode " strSQL = strSQL & ", mkt " strSQL = strSQL & ", is_kbn " strSQL = strSQL & ", mg_name " strSQL = strSQL & ", t_unit " strSQL = strSQL & " ) " strSQL = strSQL & " values " strSQL = strSQL & " ( " & .strMCode strSQL = strSQL & " , " & .strmkt strSQL = strSQL & " , " & .stris_kbn strSQL = strSQL & " , '" & .strmg_name & "'" strSQL = strSQL & " , " & .strt_unit strSQL = strSQL & " ) on duplicate key update " strSQL = strSQL & " mkt = " & .strmkt strSQL = strSQL & ", is_kbn = " & .stris_kbn strSQL = strSQL & ", mg_name = " & .strmg_name strSQL = strSQL & ", t_unit = " & .strt_unit End With それでon duplicate key updateをつけて上のコードを流したところ、 実行時エラー 214721900(80040e14)' Unknown column 文字化け in 'field list' と言うメッセージが出てしまいます。文字化けの部分はmg_name みたいなんですけど、どう直せばいいんでしょうかね。 よろしくお願いしますm(__)m。
自己解決しました。お騒がせスマソ strSQL = strSQL & ", mg_name = '" & .strmg_name & "'" と日本語の部分をくくったら正常にon duplicate key update で更新できました。
MYSQL ADMINを使っていますが質問をさせてください(NTTスマートスクウェア) 鯖側はEUCでクライアント環境はSJISですが、 データをDBに挿入する際にSJIS変換をしても 特定のデータだけ一部文字化けをしてしまいます こういった場合どのような解決方法がありますか? よろしければ教えてください。
>>550 MYSQL ADMIN → phpMyAdminのことだよな?こういうことは正確に…
以下を書いた方がいいと思う。
・MySQLのバージョン
・化ける文字
・データの挿入方法(phpMyAdminから行うにしてもSQL、手入力、ファイルからインポート等がある)
・どのように文字化けを確認したのか(phpMyAdmin or 何かのアプリ etc)
とりあえずあやふやな状態でのエスパー回答になってしまうけど
データをファイルに作成してEUCで保存、保存したファイルをphpMyAdminでファイルを
インポートすればいける鴨。
後、phpMyAdminはUTF8固定で動作するのでクライアント環境がSJISうんぬんは
忘れた方がいいと思われ。
552 :
551 :2005/10/22(土) 23:46:01 ID:???
書き忘れ。 例えば "" なんかの文字はEUCのデータベースに正しく書き込まれていても phpMyAdminで表示すると "?" になるので注意
553 :
550 :2005/10/23(日) 00:18:01 ID:???
>>551 さん
断片的な情報ですみません
PHP MYADMINでしたorz
mysqlのバージョンは3.23.58
化ける文字は ガリクソン という単語の"ソン"ですね
データ挿入方法はSQLフォームからの手打ちです。
確認方法はブラウザです。他のデータは正常なのですが…
他のデータもブラウザで表示させたときは正常なのですが
phpMyAdminの中で確認する限りは殆どのデータが文字化けしています・・・
554 :
NAME IS NULL :2005/10/23(日) 06:59:15 ID:L1Evw2iW
Warning: mysql_connect() [function.mysql-connect]: Access denied for user: 'ppp@localhost' (Using password: YES) in /virtual/xxx/public_html/mymysql.php on line 13 Access denied for user: 'ppp@localhost' (Using password: YES)
555 :
NAME IS NULL :2005/10/23(日) 07:00:09 ID:L1Evw2iW
上記エラーの対策をおながいします。
>>555 ・英語を勉強する。または技術担当者を英語が読める者に切り換える。
・マニュアルを読む。またはドキュメントが読める技術担当者に切り換える。
557 :
NAME IS NULL :2005/10/23(日) 09:41:34 ID:L1Evw2iW
そういうの役に立たん。別の人にパイプ 554|
>>557 localhostから接続できるようにすれば直る気がする。
559 :
NAME IS NULL :2005/10/23(日) 10:06:10 ID:L1Evw2iW
localhostからはphpでは試していませんがコンソールからなら 普通にいじれました。
560 :
NAME IS NULL :2005/10/23(日) 10:16:48 ID:L1Evw2iW
>>559 localhostからphpで試せば同じようなエラーが出る気がする。
コンソールからの操作時、パラメータでユーザーpppを指定して 正常に接続できたんだろうか…
563 :
NAME IS NULL :2005/10/23(日) 10:47:28 ID:L1Evw2iW
Linux再起動したら状況が変わりました。 Linuxのコンソールから #mysql -u aaa -p アクセス ディナイ フォー ユーザ aaa@localhost (ユージングパス YES) になりました。 既出エラーのClient does not support authentication protocol....が 出てから、aaaのパスワードをold_passwordにしたのが関係しているかもしれません
既出エラーのClient does not support authenticationって書いてるけど 全然既出じゃないでしょ。ユーザーaaaもここで初めて出てきたし。 もう、一人で勝手にすれば?
パスワードを空にしたらWinのブラウザのPHPで接続できました。
でまた4.1タイプのロングパスワードを設定したら既出エラーの Client does not support authenticationが出ました。 この状態ならLinuxの#mysql -u aaa -pでログインできます。
hogeDBの中にhoge1,hoge2とテーブルがあって hoge1には id name hogehoge hogehoge2 1 hoge あいう かきく 2 aiu かきく さしす 3 kaka ほげげ あばば hoge2には id name hogehoge3 1 hoge 05/01/01 2 aiu 3 hoge 05/02/02 4 hoge 05/02/03
571 :
570 :2005/10/23(日) 13:09:35 ID:???
途中で飛んじゃった(´・ω・`) hogeDBの中にhoge1,hoge2とテーブルがあって hoge1には id name hogehoge hogehoge2 1 hoge あいう かきく 2 aiu かきく さしす 3 kaka ほげげ あばば hoge2には id name hogehoge3 hoge4 1 hoge 05/01/01 あいうえお 2 aiu 05/01/01 かきくけこ 3 hoge 05/02/02 さしすせそ 4 hoge 05/02/03 たちつてと 5 kaka 05/02/03 なにぬねの こんな感じなってて hoge1テーブルにhoge2のnameが同じ物をくっつけて 且つhogehoge3の最新の物だけをくっつける場合どうすればいいのでしょうか? SELECT * FROM hoge1 INNER JOIN hoge2 ON hoge1.name=hoge2.name これをすればくっつける事はできるのですが hogehoge3の値が最新の物意外もくっついてしまいます(´・ω・`)
MySQLで全角のデータ入れたら文字化けした どうしたらなおるですか?
OSが何とかどういう状況でとか一切書かずにそんな事言われてもどうなの?と言いたいけど OS: WinXP MySQL 4.1.11 で接続時の文字列に STMT=SET CHARACTER SET SJIS を追加したら俺の場合は文字化けはしなくなった。
そういえばIDEとかでMysqlを利用出来るものがありますが 今の所大抵は送信側のエンコードが固定なためにクエリ上の日本語が???化しますよね 自分の場合Mysql4.1上ではUTF8で統一して スクリプトから上ではクエリ毎にUTF8⇔EUCの変換をやってるんですが こういう環境でIDE(EUC-JP)からの接続時だけEUCで受け入れるようにしたり 出来ないもんでしょうか 特定のユーザとの接続時だけ文字セット変える設定とか・・・
補足。。574は全て4.1上での話です
576 :
NAME IS NULL :2005/10/23(日) 19:48:34 ID:i27SxMcs
PHPからEUCで入力されたのをencodingでSJISへ変換はしてるんですけど コマンドラインで確認すると文字化けしてる (´・ω・`)ショボーン 何故? Windowsのlocalhostでの問題です 初心者の質問に誰か救いの手を
InnoDBって、なんか壊れやすくね? 1千万レコードほど(ダンプサイズで700MBちょっと)入れたら、まともに取り込めない。 小分けにしても駄目だった。 なんか他に大量レコードに適した形式とか有るだろうか?
Oracleのdesc(条件分岐)に代わるような処理ってありますか?
テーブルによってテーブルファイルを保存する場所を変更することはできますか? /var/db/mysql/DB名/テーブル名.XXX って感じになると思うのですが、 /var/db/mysql/DB名/YYY/テーブル名.XXX としたいのですが・・・。
582 :
NAME IS NULL :2005/10/25(火) 02:04:48 ID:uyrWOZ4l
5.0.15正式リリース。 どうなの?
>>582 内容的にはRCと変わってないんジャマイカ。
そうそう、漏れ勘違いしてたんだけど5.0でViewとかSPとか追加されてMySQL遅くなったんだと思ってたら 実はver4.1よりもver5.0のほうが速いらしいね。
585 :
NAME IS NULL :2005/10/25(火) 08:54:50 ID:iy8JxhV4
>>576 ついでに、DB接続時に
$result=mysql_query("SET NAMES キャラクターセット");
ってするともっと幸せになれると思うよ。
>>576 俺もよく分かってないが、PHP+MySQLで日本語のレコードが化けてたけど
MySQL側をUTF-8、PHPのmbstringをhttp.output = passで化けなくなった
mysql -u root -p Enter password: **** をやったのですが結果が ERROR 1045: Access denied for user: 'root@localhost' (Using password: YES) と出て中に入ることができません いったいどうすればいいのでしょうか?
>>587 元々rootユーザーで正常に接続できていたのかな…
疑うわけではないが、良からぬ事をしようとしているのを
フォローしてしまうとアレなのでヒントだけ。
"mysql skip-grant-tables" 辺りでググッくださいまし。
589 :
587 :2005/10/25(火) 23:20:46 ID:???
>>588 さん
検索していろいろ見てきた結果、解決しました。
本当にありがとうございました。
ものスゴイ嫌がらせ思いついた 1 :以下、名無しにかわりましてVIPがお送りします :2005/04/25(月) 04:44:27 ID:cxwJSDGr0 例えばさ、ID非表示の板で質問したやつがいるとするじゃん? で、その答えがくる前に名前欄にそいつのレス番入れて 「すみません、自己解決しました」って入れるんだよ マジコレはハマるwwwwwww
そのレスしたやつに自分で「類似のトラップにひっかかる奴もいるかもしれな いからちゃんと説明しる」とかツッコミ入れたらいいんじゃね。 よっぽど過疎化したスレ以外は、ほかの親切なやつが答えてくれるだろう。
まずは答えたくなる質問をすべきだな。
593 :
592 :2005/10/26(水) 18:53:16 ID:???
すみません、自己解決しました
594 :
592 :2005/10/26(水) 19:04:13 ID:3DVzptjP
595 :
592 :2005/10/26(水) 19:15:49 ID:???
すみません、自己解決しました
誰が本当の592なのか、見分ける方法を教えてください。
598 :
596 :2005/10/26(水) 20:30:53 ID:???
すみません、自己解決しました
InnobaseってOracleに買収されたんだね。 InnobaseとMySQLは来年契約の更改を控えており, 米OracleはMySQL社との契約を継続する意向という。 MySQL社は今回の買収を歓迎するという声明を出したものの, 関係者によればMySQL社内でOracleの今後の出方に対する警戒も高まっているという。 だって。InnoDBが使えなくなることも考えられる? オラクルウゼー
601 :
599 :2005/10/26(水) 21:02:08 ID:???
すみません、自己解決しました
すみません、事故りました
5.0.15になりましたね。 ところで、SQLでバージョンを知るにはどうすればよいのでしょうか。 SELECT なんとか FROM かんとか でVerをとるようなことっってできないのでしょうか。
以下の4人が何かを試した回数と成功(成功回数)した回数を記録しました。 回数と成功の数値は随時更新されるので、成功率は実際にはデータとして入力せずに select 名前,回数,成功,回数/成功 as 成功率 from 結果テーブル order by 成功率 というクエリでその都度出して成功率でソートしてます。 結果テーブル 名前|回数|成功|成功率%|順位 山田| 12| 12| 100|1 田中| 4| 3| 75 |2 伊藤| 100| 20| 20 |3 西村| 80| 8| 10 |4 で、順位ですが、単に成功率でソートした場合に順位をつけるのはループ回した回数そのものなので簡単なんですが、これを select 名前,回数,成功,回数/成功 as 成功率 from 結果テーブル order by 回数 と言う感じで、成功でソートしつつも、順位カラムには成功率での順位を表示させたい、 名前|回数|成功|成功率%|順位 伊藤| 100| 20| 20 |3 山田| 12| 12| 100|1 西村| 80| 8| 10 |4 田中| 4| 3| 75 |2 ときにうまい方法は無いでしょうか? あくまでDBに入力するのは、名前、回数、成功(成功回数) 回数と成功は随時更新されるので、それによって、成功率が変わると同時に順位(成功率の)も動的に変わりますのでそこをなんとかうまくやりたいんです。
607 :
NAME IS NULL :2005/10/26(水) 23:45:52 ID:3rNqv6NN
現在、基本表の数が50ほどのシステムを制作するのに MySQLかACCESSのどちらが良いのか悩んでいます。 プログラムはVisualC#.NETを用いて記述する予定です。 どちらの方がコーディング時・DB操作などにおいて 便利でしょうか。アドバイスお願いします。
>>606 AUTO_INCREMENTカラムを持ったテンポラリテーブルを使用してみては?
CREATE TEMPORARY TABLE WORK(
名前 VARCHAR(XX),回数 INT,成功 INT, 成功率 INT, 順位 INT AUTO_INCREMENT NOT NULL PRIMARY KEY);
INSERT INTO WORK(名前,回数,成功,成功率)
SELECT 名前,回数,成功,回数/成功*100 AS 成功率 FROM 結果テーブル ORDER BY 成功率 DESC;
SELECT * FROM WORK ORDER BY 成功 DESC;
>>607 ADOで接続するのならコーティングの手間は変わらないんじゃないかな?
双方のSQLの独自関数を理解、解消すれば大丈夫かと。
DB操作は当人の慣れ次第だし、MySQLにしてもODBC接続でAccessからデータの操作はできるしね。
選択基準としては
・複数のクライアントから接続するなら MySQL > Access
・配布の手間が楽なのは MySQL < Access
・MySQLは使用方法によってはフリーではない
辺りではなかろうか?
DBサーバーがWindows固定ならMSDEという方向性もあると思うよ。
MySQLのスレでなんだけど、漏れは
・スタンドアロンならAccess
・C/Sなら規模によってPostgresかMSDE
を使うことが多いかな。
611 :
606 :2005/10/27(木) 00:51:20 ID:???
>>608 うわ、なんかいきなり難しそうなことに。
例はかなり簡単に書いたんですが、もっと件数が多くてページングの処理とかも入ってます。漏れの手に負えるかどうか・・・・頑張ってみます。
回数、成功のデータ更新時に、成功率を実データとしてinsertしちゃうってほうが手軽ですかね。
612 :
607 :2005/10/27(木) 09:59:59 ID:???
ありがとうございます。 複数クライアントでの使用や配布などは 一応想定はしていますが、これは卒業研究として作成するものなので、 実際は途中まで実装して終了になると思います。 コーディングの際の手間が同じレベルなら レコードの追加などの表操作がより簡単に行えるACCESS の方を選択したいと思います。
613 :
NAME IS NULL :2005/10/27(木) 20:11:13 ID:EyBRBt/B
Unix系OSでmysqlの負荷状態を詳細に調べる方法ってないでしょうか? topやpsではmysql全体の負荷しか分からないので、困っています。 mysqlをユーザ単位の動作権限で動かせればいいのですが、 少数でない場合、その数のmysqlをインスコするのは現実的に厳しいのです。
>>613 求めているものが全然判らん。
mytopでカバーできるものじゃないの?
--with-charset=ujisでコンパイルしてなかったlatin1な環境で EUC前提のスクリプトを運用しちゃってました。 これをujis環境に変更して、データも正しく持ち越したいのですが うまくいかないので困ってます。バージョンは4.1.15で、FreBSD4.11です。 mysqldumpして、ujis環境ででDB作り直してリストアすればよいと考え、 やってみたら文字化けしてました。 mysqldumpが、中身はEUCのものを latin1からutf8への変換をして出力しているようです。 元のDBがlatin1だから当然の挙動だとは思うのですが、 この変換を無効にする方法は無いでしょうか。 無変換の状態で取り出してやればそのままEUCのダンプデータになると思うので。 あと、逆変換すればいいやとおもって、 lv -Iu8 -Ol1 で変換したところ、ほぼうまく戻ったように見せて やはり一部文字化けしているようでした。
617 :
NAME IS NULL :2005/10/27(木) 21:37:15 ID:gBSh0AKt
ageわすれた。
>>616 ちょっと試せる環境がないのでスマソだがmysqldumpに
--default-character-set=ujis オプションを付けてみるとどうだろう?
ひょっとしたら --default-character-set=binary の方がいいかもしれんが。
ver5ぜんぜん話題にならないなー
5終わってるのかよw
>>621 へぇ〜、そうなんだ。 ストアドが使えるのが5から? これが使いたくて
総合性能に興味合ったんだけど、全体性能はやっぱまだとりあえず動く
初期バージョンって感じですね。まだ導入は見送ろうかな。
MLの情報によると、innodb_thread_concurrency のデフォルト値が 変わった事が原因だそうだ。 デフォルトの20から、元の8に戻すとそれなりの性能が出る模様。 ちゅうワケで興味ある椰子はさっさと導入してレポよろ。
625 :
:2005/10/28(金) 19:37:50 ID:pY4Joffh
PHPとmySQLの組み合わせの本はおおいけど JSPとMYSQLの本は少ない気がする。なにかいいのないですか。
pythonがいいと思う
>>621 同じ構文を走らせた時に、5系の方が微妙に速い という噂を聞いたんだが、
現状では、「5の機能を使わないなら4.1最強」ってことなんだな。
MySQLが激しく苦手なランキング処理が解消できるなら5系の選択肢もありえるかもしれないけど。
>>621 うちらもこれじゃ5.1まで待ちだなす。
んでもって、またmultibyte char実装が
変更してごたついたりでもしたら、今度
こそpostgresに逝ってまうでゴルァ。
629 :
616 :2005/10/28(金) 21:41:23 ID:???
>>618 ,619
ありがとうございます。
mysqldump --default-character-set=binary database
で取り出して
テーブルのcharset部を s/latin1/ujis/g してリストアしたらうまくいきました。
>>621 現実逃避モードなのでウチでもやってみた。共にInnoDBでmy.iniはデフォルトのまま。
う〜む、4.1.15 < 5.0.15 になってしまった…。
4.1.15
transaction type . . . : TPC-B (sort of)
scaling factor . . . : 1
number of clients . . : 10
number of transactions per client : 100
number of transactions actually processed : 1000/1000
tps ( include connections establishing) : 131.599518
tps ( exclude connections establishing) : 131.732312
5.0.15
transaction type . . . : TPC-B (sort of)
scaling factor . . . : 1
number of clients . . : 10
number of transactions per client : 100
number of transactions actually processed : 1000/1000
tps ( include connections establishing) : 332.911867
tps ( exclude connections establishing) : 333.817146
うちでもやってみようかな
>>630 CPU(モデル、クロック、L2キャッシュ容量)
HDD(モデル、型番)
メモリ容量
OS
以上項目ぷりーず
何か条件があるはず・・・・
633 :
606 :2005/10/29(土) 00:41:08 ID:???
>>608 ちょっとアフォなことを考えてみますた。
ループ回しながら、自分(ある一つのレコード)の成功率より、成功率が高いレコードの数を数えれば、そのときの自分の順位が出せますね。
ループの中で1レコード毎にクエリ出すことになるけど。
まだ試してないのでうまくいくかわからないし、バカっぽいけど、やってみます。
634 :
630 :2005/10/29(土) 09:14:38 ID:???
>>632 サーバー
CPU Pentium4 2.4C(2.4GHz, L2 512KB)
HDD IBM IC35L040AVER07-0(40GB, 7200rpm, EIDE)
MEM 512MB
OS WindowsXP SP2
ベンチクライアント
CPU Pentium4 520(2.8GHz, L2 1MB)
HDD SEAGATE ST380013AS(80GB, 7200rpm, SATA)
MEM 512MB
OS Solaris10
MySQL ServerはMySQL ABからダウンロードしたWindows版バイナリを使用。
ベンチはmysqlbenchは自前コンパイル。
635 :
630 :2005/10/29(土) 09:16:02 ID:???
続き。 ついでだからサーバー、ベンチクライアント共に同じマシンで動作させた時の結果も貼り付けておくね。 サーバー、ベンチクライアント CPU Pentium4 520(2.8GHz, L2 1MB) HDD SEAGATE ST380013AS(80GB, 7200rpm, SATA) MEM 512MB OS Solaris10 MySQL ServerはMySQL ABからダウンロードしたSolaris10版バイナリを使用。 ベンチはmysqlbenchを自前コンパイル。 4.1.15 transaction type . . . : TPC-B (sort of) scaling factor . . . : 1 number of clients . . : 10 number of transactions per client : 100 number of transactions actually processed : 1000/1000 tps ( include connections establishing) : 542.650719 tps ( exclude connections establishing) : 544.134179 5.0.15 transaction type . . . : TPC-B (sort of) scaling factor . . . : 1 number of clients . . : 10 number of transactions per client : 100 number of transactions actually processed : 1000/1000 tps ( include connections establishing) : 895.553398 tps ( exclude connections establishing) : 900.518789
636 :
630 :2005/10/29(土) 09:28:17 ID:???
あっと、念のため
>>635 の結果は、
>>630 からの流れなので
テーブルタイプ InnoDB、クライアント数 10、トランザクション数 100で
my.iniはデフォルトのままで行った結果ね。
うちもまぜてくれぃ。といっても、MySQL 5は、なんか おっかないんでまだインス子してないから、 4.1 でのmyisamとinnodbの比較だけよん。 鯖:Linux kernel 2.6.14 P4 1.8GHz cache256kB memory 1GB HDS724040KLAT80 (HGST 400GB U100 7200, uATA/100) クライアント:同じマシンから MySQL 4.1.15 ... myisam transaction type . . . : TPC-B (sort of) scaling factor . . . : 1 number of clients . . : 10 number of transactions per client : 100 number of transactions actually processed : 1000/1000 tps ( include connections establishing) : 319.885762 tps ( exclude connections establishing) : 635.494396 MySQL 4.1.15 ... innodb transaction type . . . : TPC-B (sort of) scaling factor . . . : 1 number of clients . . : 10 number of transactions per client : 100 number of transactions actually processed : 1000/1000 tps ( include connections establishing) : 190.563886 tps ( exclude connections establishing) : 270.924003
OS Redhat Linux CPU MMX Pen 166MHz MEM 32MB HDD 2.4GB 結果 インスコ失敗
>>638 Makefile 編集してがんがる。Linuxなら
CC = gcc
CFLAGS = -O2 -D_REENTRANT
LDFLAGS = -Wl,-R/usr/local/mysql/lib
MYSQL_INCLUDE= -I/usr/local/mysql/include
MYSQL_LFLAGS= -L/lib -L/usr/local/mysql/lib
MYSQL_LIBS= -lm -lz -lnsl -lcrypt
. . . .
640 :
NAME IS NULL :2005/10/29(土) 15:57:23 ID:QmmIUHx9
OS Windows XP + SP2 MySQL 5.0.15 MyODBC 3.51 ACCESS 2003 # CLIENT SECTION default-character-set=sjis # SERVER SECTION default-character-set=utf8 結果 文字化け発生!解消方法求む!!!
641 :
640 :2005/10/29(土) 16:04:00 ID:???
すみません、自己解決しました
どういう風に解決したかぐらい書いてよ
643 :
640 :2005/10/29(土) 17:07:56 ID:???
# CLIENT SECTIONと# SERVER SECTIONを 同じdefault-character-set=sjisにしたら直りました。 お騒がせしました。
644 :
NAME IS NULL :2005/10/29(土) 18:56:30 ID:QmmIUHx9
640だけど641、643誰? ID違うし・・・
646 :
NAME IS NULL :2005/10/29(土) 22:11:29 ID:QmmIUHx9
>>630 丁寧に報告してくれてサンクス
CPUのL2の量によって4.1有利か5.0有利か変わるのかと思ったんだが、
条件は全然違う所にあるみたいだなぁ
突き詰めていったら、ディスクのフラグメント状況によるとか、しょーもない要因の気もしてきた・・・・
648 :
NAME IS NULL :2005/10/31(月) 12:10:04 ID:EtZ8MLQ0
mySQLをインストールしたのですが 信号が青くなりません。 スタート ザ サービス を押しても一瞬青になってすぐ赤になります。 そして「variables」という項目になにも書かれていません。 かなりネットと本で調べたのですが解決できません。 どうしればよいか教えてください
>>648 MySQLのログにエラーが出力されてないか?
650 :
NAME IS NULL :2005/10/31(月) 14:04:12 ID:Exjn2IvW
すみません。 MySQLのデータベース名を変更したいのですがどうすればよいのでしょうか?
652 :
NAME IS NULL :2005/10/31(月) 18:18:33 ID:Exjn2IvW
653 :
NAME IS NULL :2005/10/31(月) 18:22:09 ID:Exjn2IvW
MySQL5.0.15 への移行を検討していて分かったこと。
○JOIN に 4.1以前との互換性が無い。
従来、JOIN で USING を用いるとき、指定できるカラム名は、そのすぐ前(す
ぐ左?)のテーブルにあるカラムだけだった。しかし5.0.12からそれが変更さ
れ、それ以前に出現したすべてのテーブルのカラムが指定できるようになった
(SQL:2003互換)。
http://dev.mysql.com/doc/refman/5.0/en/upgrading-from-4-1.html しかし、恐ろしいことに、あるJOIN以前の複数のテーブルに同一のカラム名が
存在していた場合、そのカラム名をUSING区で指定しているSQLは
ERROR 1052: Column '***' in from clause is ambiguous
というエラーになることに。
当方は、従来のMySQLのUSING句の使いづらい文法に依存したコードをたくさん
書いていたので、SQLをすべてチェックして書き直さなければ移行できないこ
とが判明。ああくやしい。
○Connector-J 3.1.11 はメモリリークする。
※ただし、Tomcat/4.1.29, j2sdk1.4.2_03 との組み合わせ。
JDKが有名なバグありバージョンなので、微妙。
(Connector-J 3.0.17 は問題なかった。)
>>654 例文にあったSQL
SELECT CHAR(ORD('A') USING latin1) = 'a';
が('A`)に見えた
というのは、置いといて、5.0入れてないから分からないんだけど
サブクエリーで使うような場合も、メインクエリーに出てきたテーブルが影響するってこと?
まあ、たいていカラム名にテーブル別名も指定してるから、俺は問題ないかな。
テーブル名も指定する癖を付けた方がいいと思われ。
656 :
NAME IS NULL :2005/11/01(火) 23:59:11 ID:XkixHZ9d
>>655 USING 句で、各カラムの所属テーブル名を指定することは、不可能だと思うが。
657 :
NAME IS NULL :2005/11/02(水) 00:33:04 ID:zmkwaL0C
現在、大学のPCと自宅のPC、両方にMySQLを入れています。 二つのPCは接続しておらず、単体でレコード入力・表定義をしています。 dataフォルダに表情報が全て入っていると思ったので 一方のdataフォルダをそのままもう一つのPCにコピーし データの同期を図ろうと思ったのですが コピーはうまくできましたが、パスワードを入れて ログインした途端、強制終了してしまいます。 これの原因はなんでしょうか。 大学でやった続きを家でやりたいので何とかしたいのですが・・・。
658 :
654 :2005/11/02(水) 00:34:06 ID:???
追加報告。
Connector-J3.1.11 は、j2sdk1.4.2_08 と組み合わせてもやっぱりメモリリー
クした。Tomcat が OutOfMemoryError を吐いてしまう。
>>655 JOIN の中の USING の話だぞ。勘違いしていないか?
こんなテーブルがあったとして | ID| い | ろ | | 1| 10 | 20 | | 2| 35 | 15 | 「は」フィードを増やして、「い」+「ろ」の値を一気に「は」フィードに入れたい。 | ID| い | ろ | は | | 1| 10 | 20 | 30 | | 2| 35 | 15 | 50 | $sql = "select from TABLE"; $result = mysql_query($sql); while ($row = @mysql_fetch_array($result)){ $temp_val = $row['い'] + $row['ろ']; $sql = "INSERT INTO `TABLE` (`は`) VALUES ({$temp_val}) where ID = {$row['ID']}"; } これを一発でやる方法というとどんな手があるでしょうか? ↑こんな感じでmysql_fetch_arrayでループを回して一行分ごとに insertのクエリを発行、実行してみたけど、エラーになってうまくいかないです。
>>659 まずは、どこでエラーが出ているのかを考えたほうがいい。
661 :
655 :2005/11/02(水) 01:05:21 ID:???
>>658 詳しく。 大抵の場合、アプリ側の問題だと思うのだけど。
663 :
NAME IS NULL :2005/11/02(水) 03:05:51 ID:Rkbs4Zeo
>>657 MyISAM型テーブルなら *.FRMファイル、*.MYIファイル、*MYDファイルをコピペするだけでどの環境のMySQLにも持ち運べる。
使っているのがInnoDB型テーブルなら、"create table as select * from ... engine=myisam"で元のPC上でMyISAM型のコピーを作成して別のPCに持ち運んで、別のPC上でまた"create table as select.."するか"alter table"すればいいんでない。
テーブルが大量にあると面倒だけど・・・。
>>659 update を使う方法は?
言語はphpか...
$sql="UPDATE `TABLE` SET `は`=`い`+`ろ`";
mysql_query($sql);
ではだめ?
>>657 ちゃんとmysqldを落としてからコピーしました?
>>663
テーブル数は50以上です・・・。
>>665 binフォルダにmysqld.exeが入っていますがそれのことですか。
入れたままでなく、コピー時に起動させて何らかの処理を
行わせなければならないんでしょうか。
667 :
654 :2005/11/02(水) 11:40:58 ID:???
>>662 > 詳しく。 大抵の場合、アプリ側の問題だと思うのだけど。
自分も不安になって、コードを確かめた。ResultSet#close() を忘れている個
所があったので修正した。しかし修正後も結果は変わらず、OutOfMemoryError
だ。
環境はWindows2000, Eclipse3.1.1, JDK1.4.2_08, Tomcat4.1.29, Connector/J
3.1.11 だ。まだLinux では試してないが、たぶん同じだろう。
アプリは、一種のシミュレーションで、似たようなSQLを数千回も発行する。
一つの PreparedStatement に、セットする値を変えて execute()、これの繰
り返し。タスクマネージャでプロセスを監視していると、Tomcat の
javaw.exe のメモリ使用量がみるみる膨らんでいく。90メガを超えたあたりで
OutOfMemoryError。
Connector/J 3.0.17 にすると、エラーは起こらなくなる。Tomcatのメモリ使
用量も38メガ程度で安定している。
どうやら Connector/J 3.1系にはとんでもないバグが頻発しているらしいし、
http://diary.jp.aol.com/applet/27c2d4uyd/20051014/archive 今回のような現象も不思議ではないと思う。
しかし最新のConnector/Jを使わないと、MySQL5.0(おそらく4.1以上)では
"Illegal mix of collations" というエラーになるから、古いJarを使いつづ
けるわけにもいかない。
http://www.mysql.gr.jp/mysqlml/mysql/msg/9515 とりあえず以上。
>>666 InnoDBを使っていて、しかもテーブル数が多いなら、ディレクトリコピーより、
mysqldump を使ったほうが楽だ。mysqld を止める必要もないし。
http://dev.mysql.com/doc/refman/4.1/ja/mysqldump.html 最新のDBを mysqldump でファイルに落とし、移行先のDBを一旦 DROP, CREATE
しなおし、
mysql -u ユーザ名 DB名 < ダンプファイル名。
あとは待ってればいい。
当方は、遠隔地にある計60メガ近い容量のDBと同期させているが、Linux上 なら
10分程度しかかからない。
ただし Windows上の MySQL だと2時間かかる。やってられん。
>>668 どうもご指導ありがとうございます。
いま大学で作業中なので、今晩家でやってみたいと思います。
Windowsなので2時間かかるのか・・・
ところでココってsage進行ですか?
670 :
666 :2005/11/02(水) 13:52:57 ID:???
>>668 もう一点確認させて欲しいのですが、
移行先のDBを一旦 DROP, CREATEしなおし、
> 移行先のDBを一旦 DROP, CREATEしなおし、
とは、移行先の各DBに幾つかの表が既にあっても
とりあえずDBごとdropして、その後再び同じ名前のDBをcreate。
(この時点で、DBに表はない。)
> mysql -u ユーザ名 DB名 < ダンプファイル名。
については、
mysql -u root 顧客 < UnivPC-1
mysql -u root 店員 < UnivPC-1
・・・。
という流れでしょうか。
671 :
668 :2005/11/02(水) 14:02:47 ID:???
>>670 それで合ってる。
念のため細かい点を補足。
・DBの容量が小さければ、Windowsでもリストアにそんなに時間はかからない。
・InnoDBよりMyISAM の方が、リストアは圧倒的に速い。
・DBが複数あるんなら、--databases や --all-databases オプションを
検討されたし。
672 :
666 :2005/11/02(水) 14:18:09 ID:???
長文スマソ
>>667 問題の切り分けをしたほうがいい。Tomcat越しにアクセスさせるのではなく単純なJavaコードからConnector/Jを使ってみそ。
Win2000, JDK1.4.2_08, Connector/J 3.1.11, Eclipse3.1.0で以下のようにPreparedStatementを100万回繰り返したが、
"-verbose:gc"で得られたGCログからはメモリーリークは発生しなかったぞ。
public void testMemory() throws Exception {
String url = "jdbc:mysql://localhost/test";
Class.forName("com.mysql.jdbc.Driver").newInstance();
Connection conn = DriverManager.getConnection(url);
Statement stmt = conn.createStatement();
stmt.executeUpdate("DROP TABLE IF EXISTS t1");
stmt.executeUpdate("CREATE TABLE t1 (c1 int) engine=MEMORY");
stmt.executeUpdate("INSERT INTO t1 VALUES(0)");
PreparedStatement pstmt = conn.prepareStatement("UPDATE t1 SET c1 = ?");
int tryal = 1000000;
for (int i = 0; i < tryal; i++) {
pstmt.setInt(1, i);
pstmt.execute();
}
stmt.close();
pstmt.close();
conn.close();
}
[GC 1139K->627K(1984K), 0.0001869 secs]
[GC 1139K->627K(1984K), 0.0001880 secs]
[GC 1139K->627K(1984K), 0.0001861 secs]
・・・
[GC 1139K->627K(1984K), 0.0001922 secs]
[GC 1139K->627K(1984K), 0.0001875 secs]
[GC 1139K->627K(1984K), 0.0001900 secs]
674 :
666 :2005/11/02(水) 16:27:14 ID:???
先程教えて頂いた方法をログイン直後い実行しましたが 以下の文全てに対して"syntax error"になってしまいました。 ユーザはroot,パスもroot,customerdbはDBの一つです。 mysql> mysqldump --all-databases; mysql> mysqldump -a -u root -p root > C:\kari; mysql> mysqldump customerdb -u root -p root > C:\kari; なにがダメなのでしょうか…。
675 :
668 :2005/11/02(水) 18:00:25 ID:???
>>674 mysqldump は mysql にログインして実行するんじゃないよ。
UNIX ならシェル、Windows ならコマンドプロンプトの画面でそのまま実行する。
つまり、プロンプトは、Windowsなら
mysql> じゃなくて、c:\mysql> の状態で実行。
676 :
654 :2005/11/02(水) 18:27:41 ID:???
>>673 わざわざありがとう。しかし、PreparedStatement#executeUpdate()ばかりな
のが気になる。ResultSet を返す PreparedStatement#executeQuery() だとど
うだろう?
時間が無いのでこれだけ。すまん。自分もあとで試してみる。
677 :
666 :2005/11/02(水) 18:55:41 ID:???
単純ミスでした(__) コマンドプロンプトにて C:\Program Files\MySQL\MySQL Server 4.1\bin>(続) (続)mysqldump --all-databases -u root -p root > C:\tttt; を実行したところCのトップにttttというファイルができました。 これで良かったのでしょうか?あと、拡張子が分かりません…。
>>677 それでいいよ。
ただのテキスト(SQL)だから、エディタで中を見て、正常にデータが入って
いるかを見てごらん。
拡張子は何でもいい。*.dmp とか、*.sql とか、好きにして。*.txt でもいいよ。
みんなやさしいな。 こんなカスみたいな奴を良く相手にできるもんだ。
>>677 拡張子はファイル名として指定。
(続)mysqldump --all-databases -u root -p root > C:¥tttt.txt;←
中身はメモ帳かノートパットから開いて確認
682 :
666 :2005/11/02(水) 20:09:33 ID:???
中身は下記のようになっていますが…これはおかしいですよね。
Usage: mysqldump [OPTIONS] database [tables]
OR mysqldump [OPTIONS] --databases [OPTIONS] DB1 [DB2 DB3...]
OR mysqldump [OPTIONS] --all-databases [OPTIONS]
For more options, use mysqldump --help
(実行時のコマンドは
>>677 のとおりです。)
-p と root の間にスペースを空けちゃ行けない気がした。 未確認ですまそ。
-p root ではなくて --password=root だな。
みんなやさしいな。 こんなカスみたいな奴を良く相手にできるもんだ。
底辺が大きくならないと上に伸びないからな。
687 :
NAME IS NULL :2005/11/02(水) 21:35:13 ID:cakceBv0
phpmyadminでは下のように表示されているテーブルを PHPで作成したいのですが、どう 書けばいいのでしょうか? エラーばかり出てわかりません。 よろしくおねがいします。 フィールド、フィールドタイプ、表示、空の値(NULL)、基本値、追加、実行 dt datetime いいえ 0000-00-00 00:00:00 lup mediumint(8) UNSIGNED いいえ 0 tu smallint(5) UNSIGNED いいえ 0
>>687 phpmyadminでそのテーブルのエクスポートを実行すればSQLが表示されるので
それをコピーして、PHPで実行(mysql_query等)すればいい。
多分、こんなSQLが表示されるはず。
`testtable`, MyISAM, ujis の部分はオマイさんの環境によって変わるはずだから、
このまま使用しないように。
CREATE TABLE `testtable` (
`dt` datetime NOT NULL default '0000-00-00 00:00:00',
`lup` mediumint(8) unsigned NOT NULL default '0',
`tu` smallint(5) unsigned NOT NULL default '0'
) ENGINE=MyISAM DEFAULT CHARSET=ujis;
689 :
666 :2005/11/02(水) 22:00:35 ID:???
>>684 以下のように実行し、
C:\Program Files\MySQL4.1\bin>
mysqldump --all-databases -u root --password=root > C:\fair.txt;
C:\Program Files\MySQL4.1\bin>
ファイルを確認しましたがその内容は
>>682 と同じでした。
現在MySQLにあるDBは"mysql""test2"で、test2に
テスト用にテーブル"1st"を定義しています。
う〜ん・・・
>>689 もしファイルに出さないでちゃんと出てくるんだったら何か環境が悪い。
これ以上は MySQL の質問ではなくて
Windows のコマンドプロンプトの使い方だから、
他で勉強してくれ。
>>689 何か文法が間違っているんだろうけど、もうネット越しではわかんないねえ。
デスクトップ共有でも出来たらいいんだけど。
いちいちファイルの中身を確認するのも面倒だろうから、末尾の
>c:\fair.txt を外して、いろいろ試行錯誤してみてよ。
テーブル定義のSQLなどが画面にあふれ出したら成功だから、Ctrl + C を押して
中断。今度は > c:\fair.txt をつければ、さっき画面にあふれたテキストが
ファイルに収まる。
あと、最後の「;」は要らないからね。
-uの後のスペースもいらんな
694 :
666 :2005/11/02(水) 23:02:29 ID:???
>>691 その方法でできました。ファイルの中身が正しく書き込まれました。
明日もう一つのPCにてコピーしてみます。
たくさんの助言どうもありがとうございました。
>>691 の指摘の通り、最後の「;」を入れなければOKですね。
私も詳しくないのですが、;をいれるとUsageがでました。
696 :
691 :2005/11/02(水) 23:23:25 ID:???
>>694 うまく行って良かった。お疲れさん。
こういうのを一人で身につけるのは大変だ。詳しい人が近くにいれば、5分で
終わることなのに。今後も苦労するだろうけど、まあ頑張れ。
あとは、誰かが些細なところで引っかかってたら、かつての自分だと思って
助けてやってね。
>>695 あ、やっぱりそれでしたか。私はリダイレクトさせて試してたんで、セミコロンが
付いててもダンプ出来ましたが、あやしいのは他になさそうでしたしね。
「Before start of result set 」というエラーが作業をさえぎり、 課題がさっぱり進みません。 String ititle = rs.getString("title"); という記述を入れると出てきやがります。 result set の定義とかその辺は問題ないと思うんですが、 どなたがお分かりになる方いらっしゃいますか?
698 :
NAME IS NULL :2005/11/02(水) 23:57:23 ID:cakceBv0
ありがとうございました! やってみます!
699 :
NAME IS NULL :2005/11/02(水) 23:58:11 ID:cakceBv0
>>688 ありがとうございました!
やってみます!
今日はクソ野郎ばかり現れるな。スレ違いだし。 result setが空じゃないのか? >result set の定義とかその辺は問題ないと思うんですが そう思い込めるオマイがうらやましいよ。
>>700 文句あるならこのスレにこなければいい
雰囲気乱すな
この野郎、絶対てめぇの手はかりねぇぞ。 意地でも自力でやってやる。
なんだこりゃ
分からん所は素直に聞くのも勇気だ。 どつぼにはまる前にソース見せれ。
一応 --xml で XML を吐くけど、これって XML DBMS として実用に耐え得るの?
706 :
697 :2005/11/03(木) 00:45:53 ID:???
すみません、自己解決しました
707 :
697 :2005/11/03(木) 00:49:08 ID:???
いや、マジで自己解決した。 やっぱrsは関係なかった。 rs.next()を書いてなかった。 なきそうになった。 そら動かねーよ。
710 :
654 :2005/11/03(木) 13:09:45 ID:???
>>709 了解。明日、試してみる。
ところで、
>>654 の JOIN 〜 USING 句の話には、誰も食いつかないなあ。5.0
に移行するには、環境設定を変えるだけじゃ済まず、既存のSQLそのものをチェッ
ク、修正しなければならないわけで、これは重大な問題だと思うんだが。
MySQLの従来の USING句の仕様があまりにもタコだったのを、5.0から世間の標
準に合わせたわけで、その点自体はありがたいことだけど、移行コストが跳ね
上がってしまったことには正直参っている。
4.1への移行は、既存のシステムはほとんどの場合、コードの手直しなしに可
能だったけれど、5.0だと、手直しなしで移行できるシステムはほとんど無い
だろう。これほど基本的な構文の仕様が変わったのだから。
皆はどうやっているんだろうか?
711 :
NAME IS NULL :2005/11/03(木) 13:50:04 ID:7VfeavMH
初歩的な質問なのですが,データベース名の変更は どうすればいいのでしょうか.Alter databaseで 検索はしてみたのですが,それらしいのが無くて分かりません. それから,あるDBの表を別のDBに移動,コピーするには どうしたらよいのですか.
>>710 おれは4.1へも移行しなかったからな。5.0も多分パス。
新規案件はPostgreSQLで行くことが決定しているし。
MLの問題吐き出しOFFの結果がフィードバックされて
日本語周りが改善されたら考えるかな>移行
>>710 俺のところではMySQL4.1はスルーしてた。
所謂新機能を実務で使うのはこれからってところなので
今後似たようなことがなければ大丈夫。
最新情報を追いかけていないんだけど、MySQL5.0の日本語周りって 4.1ベース?4.0に戻ったりしてたらうれしいんだけど。
joinによる表結合を今知った… 俺の使ってた解説書や解説サイトに等価結合の方法しか書いてなかったので 結合条件のうち片方がない場合はif()で条件分けしたりしてた
>>715 (当たり前だが)MySQL4.1ベース。
MySQL4.1.15、MySQL5.0.13からは
MySQLサーバに--skip-character-set-client-handshake
というオプションが追加された。これはある意味
S/C間での文字コード変換についてはMySQL4.0以前と
似たような動作をするオプション。
>>717 さんくす。
>(当たり前だが)MySQL4.1ベース。
ですよねw
--skip-character-set-client-handshake
こんなオプション付けたんですか。
テスト機でも作ってみるか。
char(6)は六文字とかそこら辺の変な仕様もOFFできると
良いのだけど。
>>711 WEBサーバーとPHPが必要だけど、phpMyAdminを使えば簡単な操作で可能。
内部でゴリゴリとCREATE TABLE, DROP TABLEをやっているだけだが。
select * from table_name で表示した内容をテキストファイルに出力するコマンドってあります?
コマンドプロンプトの画面って全画面にしても 横が半分までしか行かないから,改行されて見づらい. その状態でコピペしてもアレだから出力してくれると ありがたいんだが
>>722 Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
って起動時に出てくるのは読まないの?
\h とかしてみないの? なんで? それってアレじゃない?
>>721 そこ見やすいですね
俺は既にmysqlの独自拡張に汚染されて他のRDB行くのが億劫w
4.1以降は特にGroup by周辺が便利で
>>717 ををを、すばらすい。
PHPを出来合いの 4.1系mysql ライブラリと
リンクしてるもんで、いつも
"SET NAMES キャラセット名"
で日本語文字化け対策しないと
いけんかった。
あの、素朴に質問なんですが、 MySQLって、、、 root(若しくは同等の権限を持つユーザ)からの、 『drop database mysql』 を受け付けるますか? 自分でやる勇気ないので、知ってる方お願いします・・。
$sql = "まあ、ふつうのsql文"; $result = mysql_query($sql); $rows = mysql_num_rows($result); って書いてるところを $sql = "まあ、ふつうのsql文"; $rows = mysql_num_rows(mysql_query($sql)); って書くのは、パフォーマンス的にはどうなんでしょう? $sql = "まあ、ふつうのsql文"; while ($row = mysql_fetch_array(mysql_query($sql))) { いろいろ } なんてのもいかがなもんでしょうか? ずっと上の書き方してたけど、一行でも減らしたいと思うんですが。
PHPの質問じゃないの?
>>729 普通にデータベースなんでDROP出来るよ。
させたくないなら、それこそDROP権限を剥奪しておく。
>>730 質問する前に実行して時間計ったほうが早くない?
>>731 そうかもですね。web prog板で聞いてみた方がいいかな?
>>733 そんな難しい事のやりかた解りません。
時間はかるのが難しいぐらいなら、早くなっても気がつかないだろう。
736 :
733 :2005/11/04(金) 01:53:43 ID:???
>>734 ちょwおまwww
<?php
$time1 = mtime();
// ----- ここから -----
(1)
// ----- ここまで -----
$time2 = mtime();
echo $time2 - $time1;
function mtime() {
list($usec, $sec) = explode(" ", microtime());
return ((float)$usec + (float)$sec);
}
?>
の(1)の部分に時間を計測したい処理を書けばいいんじゃね?
処理が軽い場合はループするなどしてな。
スレ違いだけどPHP5なら $time = microtime(true); でok
738 :
654 :2005/11/04(金) 12:23:03 ID:???
>>709 やっと Connector/J 3.1.11 の実験が出来たので、報告する。
○dontTrackOpenResources=true を指定すると、Connector/J 3.1.11 でもメ
モリリークしなくなった。
○
>>673 のテストコードのテーブル型を InnoDB に変え、次に ResultSet を
返すような PreparedStatement を追加して、同様にこちらもループの中で値
のセット、実行を繰り返してみた。結果は、やはりメモリリークしない。
この二つの実験結果からは「Conector/Jではなくて、当方のアプリがダメダメ」
という結論しか導き出せそうに無い。しかし、どうか信じてくれ。ResultSet
はすべて使用直後にclose している。行儀の悪い作りにはしていないのだ。
ならこの結果をどう考えるべきか。テストコードと違ってアプリは複雑だから、
そういう複合的な条件でしか再現しないバグが Connector/J にあるのかもし
れない。我ながら説得力が無いが。
ただ、dontTrackOpenResources=true と指定すれば問題は回避できることは確
認できたので、とりあえずそれで行こうと思う。こういうプロパティを true
にしなければならないのは少々残念だが。
ということで、いろいろお世話になりました。深く感謝いたします。
10000行程度の関連テーブルが3つある場合、3度クエリするより 3つをINNER JOIN等で結合して1度でクエリしたほうがコストは低いですか?
場合によるんじゃね?
Connector/J 3.1.11 バグ報告(文字化け)。 SELECT CONCAT(文字列型のカラム名, 数字型のカラム名) FROM テーブル名 ↑の結果が文字化けする。 (useUnicode=true&characterEncoding=MS932、MySQL5.0.15。) バグ回避策としては、「数字型のカラム名 + ''」と書くと化けなくなる。見 苦しい記述だが。なお、--skip-character-set-client-handshake を指定して も効果は無かった。 これは MySQL Bugs には載っていないようだが、既知のバグだろうか? また、何かもっときれいな回避策は無いだろうか?
>>742 試してないけど、これではダメ?
SELECT CONCAT(文字列型のカラム名, CAST(数字型のカラム名 AS CHAR)) FROM テーブル名
or
SELECT CONCAT(文字列型のカラム名, CAST(数字型のカラム名 AS CHAR CHARACTER SET 文字コード)) FROM テーブル名
個人的には文字列型と数字型をCASTせずにCONCATする方が気持ち悪い。
744 :
742 :2005/11/04(金) 19:18:34 ID:???
そもそも、SQL の標準的な文字列結合演算子は || だ。 MySQL ではそれが使えなくて、代わりに CONCAT() なんていう関数を用意して いるわけで、こんな関数の存在自体が気持ち悪い。 なら mysqld に --ansi オプション付けろって?ゼロからの開発ならそうしたいよ。
746 :
NAME IS NULL :2005/11/04(金) 20:03:58 ID:NTx28D3F
尾に初心者の質問と思うけど、一つだけ許して。ぜんぜん分からん。 データベースの中身をセレクトで引っ張ってきて、 テキスト領域に出力すると、スペース後の文字列が出てこない。 を使ってやればいいの?
747 :
746 :2005/11/04(金) 20:06:27 ID:NTx28D3F
消えてる・・・ ×> を使ってやればいいの? ○>&nbsp;を使ってやればいいの?
>>746-747 こちらも、君が何を聞きたいのか、全然分からん。
テキスト領域ってなんだ?TEXTAREA のことか?
DB の内容を PHP か何かで出力させているのか?
もしそうなら、ブラウザのHTMLソースには、DBの内容は出力されているか?
君の質問をここまで解読しようとした自分を誉めてやりたい。
すみません。困っているので質問させてください。 FedoraCore + Apache + PHP の環境でCGIを動かしてまして、 その中にデータベースを利用するアプリケーションがあります。 問題は、ウェブ上でCGIを通して更新されたはずの情報が、 何故かシェルから見たときに更新されていないんです。 特定のテーブルのみで起こる現象で、同じデータベース内の別のテーブル、 他のデータベースの内容は更新された内容が確認できますが、 該当テーブルのみは何日も前に更新されているはずの古い情報が表示されます。 こういう場合について何か解説したサイトなんかはありますでしょうか?
751 :
746 :2005/11/04(金) 21:53:41 ID:NTx28D3F
752 :
746 :2005/11/04(金) 21:57:26 ID:NTx28D3F
>>748 ごめん、シカトしてしまったorz
テキスト領域はお察しのとおりTEXTAREAの事です。
そしてJSPで出力してます。
確認した所、ソースにはちゃんと出力されていました。
手間かけてすいません。
753 :
746 :2005/11/04(金) 22:11:17 ID:NTx28D3F
あーすいません自己解決しました。 ダブルコーテーションが抜けてただけでした。 お騒がせしました。
>>750 しぇるからmysqlかなんかで見たところ、
更新したつもりのテーブルが書き替わって
ないことですか?それは単にちゃんとデータベース
更新されてないから、というオチでわ。cgiスクリプトの
ばぐをまず疑うべきでしょう。
テーブルが書き換わってるのに、web上の表示が
更新されないという話しなら、キャッシュとか。。
でもたぶんそっちのことじゃないよね。
755 :
NAME IS NULL :2005/11/05(土) 07:32:42 ID:g1Ja5KZb
5.0.15使ってみた。 アウター結合の仕様とか変わってるぽい。 select … from table-A left join table-B 結合条件 left join table-C 結合条件 … (↑)4.1.15だとOKなのに、5.0.15だとNGだった。 小ショック。
>755
外部結合だけ?
外部・内部を問わず、JOIN 〜 USING を使うと互換性が無い、という話ではな
いのか?
その話なら
>>654 >>710 で出てきたけど、それともまた別の話なのか?
うう、もーらちがあかん・・・ver.4.14です table1: data1 , nurupo_id table2: nurupo_id , data2 , ga_id table3: ga_id , data3 というテーブルがあるとして、 table1>table2>table3の順にLEFT JOINで全件表示したくて 昨日から悩んでいるのですがさっぱり上手くいきません。 SELECT data1 data2 data3 FROM table1 LEFT JOIN table2 LEFT JOIN table3 on〜 だとなんかえらい事になるし、ググってもこれだ!というものは探せないし… どうしたらうまく結合できるでしょうか…アドバイスおねがいします。
>table1>table2>table3の順にLEFT JOINで全件表示したくて という表現が良く判らないので間違っているかもしれんが、こういうこと? 間違っているようなら、サンプルデータと期待する結果をカキコよろ。 SELECT data1,data2,data3 FROM table1 LEFT OUTER JOIN table2 ON table1.nurupo_id = table2.nurupo_id LEFT OUTER JOIN table3 ON table2.ga_id = table3.ga_id
759 :
757 :2005/11/05(土) 16:50:07 ID:???
>>758 期待していた結果がでました!
OUTER JOIN の言葉すら知りませんでした。精進します…
本当に助かりました。ありがとうございます!
正直、結合はよく解ってないけどなんでもかんでもinner joinで済ましちゃってるんですがこんな漏れは逝ってよしですか?
DMLはわかるけどDMLはわかるって人も 結合とかちょっと難度が上がるとわかんなくなるからな SQLは奥が深いぜ
762 :
NAME IS NULL :2005/11/05(土) 22:24:31 ID:DQvC5iUD
MySQL には、ORACLE でいうところの表領域(tablespace)は、無いようですが、 「このテーブルはAディスク、このテーブルはBディスク」の様なことはできないのでしょうか?
763 :
NAME IS NULL :2005/11/05(土) 22:51:01 ID:urZZ/Ba6
エクセルVBAでMYSQLと接続する方法を教えてください。 ODBCドライバ使えばできるらしいのですが、 私が持ってるVBAの本にはまるでかかれてません。
マルチうざい奴だな。 ODBCを使えばできることが判っているのならググれや。
767 :
762 :2005/11/06(日) 00:47:53 ID:???
>765 なるほど〜。 ありがとう。
768 :
ご質問 :2005/11/06(日) 01:01:44 ID:Uo6ppMeg
@Oracle + CSE(Osqledit) AMySQL + CSE(Osqledit) @の様にAのパターンをそれぞれ連動させる良い方法は ありますか? 一応、CSEをMySQLに連動させようとぐぐって挑戦をしては みたのですが、うまく行きません。 そもそもMySQLとCSEとを連動させる事は無理なのでしょうか?
>>763 現在VBA+MySQL 4.1.12aで作ってる最中。いろんな入門書をみながら作ってる。
一番最初は「Excelで使うMySQL」 九天社でも読め。
770 :
763 :2005/11/06(日) 14:27:14 ID:???
他スレで回答がありました。 ありがとうございました。
>>763 この板から消えろ 馬鹿すぎ
28 名前: NAME IS NULL Mail: 投稿日: 05/11/05(土) 23:07:24 ID: urZZ/Ba6
エクセルVBAでMYSQLと接続する方法を教えてください。
ODBCドライバ使えばできるらしいのですが、
私が持ってるVBAの本にはまるでかかれてません。
50 名前: NAME IS NULL Mail: 投稿日: 05/11/05(土) 23:07:55 ID: urZZ/Ba6
エクセルVBAでMYSQLと接続する方法を教えてください。
ODBCドライバ使えばできるらしいのですが、
私が持ってるVBAの本にはまるでかかれてません。
763 名前: NAME IS NULL Mail: 投稿日: 05/11/05(土) 22:51:01 ID: urZZ/Ba6
エクセルVBAでMYSQLと接続する方法を教えてください。
ODBCドライバ使えばできるらしいのですが、
私が持ってるVBAの本にはまるでかかれてません。
マルチにマルチで返しマルチが増殖。 これぞマルチ理論
775 :
NAME IS NULL :2005/11/06(日) 16:39:10 ID:RcrbLB0d
最近MySQL5.0にアップデートした者ですが。 今まで、"sql"というカラム名を持ったテーブルを使っていたのですが、 selectやinsertでこのカラム名(もしくはエイリアスでも)を使用するとエラーが出る様になりました。 どなたか対処方法ご存知の方いらっしゃいませんか? またalter tableでこの"sql"というカラム名を変更しようにも、sql文のなかに "sql"と言う文字が入ってるだけで エラーがでてしまい、途方に暮れています。 どなたか是非対処方法をお教えください
>>775 テーブル名に'sql'って…
名前変えなさい。
変え方はこのスレを最初から読み返してみる事をお勧めします。
777 :
NAME IS NULL :2005/11/06(日) 17:14:26 ID:RcrbLB0d
カラム名なんだけど。
余計駄目
Mysql 4.1.11 Windows版 インデックスの作成について。 テーブル作成の後にcreate index 〜で作成することは出来たんですけど、一つのcreate table 〜の中でやろうとすると シンタックスエラーになります。 コマンドプロンプトから c:\> mysql testdb -u user -pxxxx < c:/v.sql で作ろうとしているんでその中身を書きます。 create table V( num int(9) auto_increment, item1 varchar(20), item2 varchar(20), item3 char(1), item4 char(1), item5 varchar(50), item6 text, index v_idx on item5, primary key (num) ) engine=InnoDB , character set sjis; どう直せばいいか、教えてください m(__)m。
>>775 バッククオートで括れば?
`sql`みたいに。
>>779 index v_idx on item5,
↓
index v_idx (item5),
783 :
NAME IS NULL :2005/11/06(日) 20:04:10 ID:0T6ye7p4
>>780 ありがとうございます。alter tableでカラム名を変更できました。
>>778 4.1までは問題なく稼働していたから・・・
今後は気をつけます。
>>772 マルチに個別に叱咤しているので、マルチでなし
カラム名にnoって今でもたまにやるよ。 意味としては気づきにくいんだよなNOじゃなくてNo.なのに
>>784 コピペやん
個別にってんなら文体も文章も全部変えとけ
787 :
NAME IS NULL :2005/11/07(月) 12:47:51 ID:XuTYqAbL
マシンAのファイルをdumpしてマシンBにコピーすると ひらがな・漢字の部分が文字化けしていました. 文字コードの設定が原因ではないかと思うのですが よろしければ解決方法を教えてください.
789 :
NAME IS NULL :2005/11/07(月) 14:08:57 ID:XuTYqAbL
ありがとうございます. 要は,dumpの際に--default-character-set=binaryオプションを 指定すればよいということでしょうか. マシンA,BのMysqlのバージョンはともに4.1で A(コピーしたいデータがある)の文字コードはlatin1です B(データの移動先)の文字コードは,今手元にないので分かりません.
790 :
NAME IS NULL :2005/11/07(月) 15:55:01 ID:JC67ND0H
他スレで初歩的過ぎるためかスルーされたんですが、 if($ken<>''){ } {}内が飛ばされるのはなんで? <> とか '' の意味がわかりません 。教えてください
超能力者の俺が答えてやる。 県名が空だから。
792 :
NAME IS NULL :2005/11/07(月) 16:59:25 ID:XuTYqAbL
select文の書き方によって,結果が変わるのですが 原因は何でしょうか. mysql> select address,mail from person; +---------------------------------+- | address | mail +---------------------------------+- |東京都江東区神森3-1SSKビル424号 | (省略) |鳥飼町123番地3 | |市服部町91-32-612号 | | | | 山口県山口市秋吉村123-9 | +---------------------------------+- 5 rows in set (0.00 sec) mysql> select address from person; +---------------------------------+ | address | +---------------------------------+ | 東京都江東区神森3-1SSKビル424号 | | 島根県更級郡鳥飼町123番地3 | | 岡山県南行李市服部町91-32-612号 | | 熊本県熊本市与謝鯉村6-12 | | 山口県山口市秋吉村123-9 | +---------------------------------+ レコードは,タブで区切ったテキストからloadして格納したものです. また,addressはtext型です.
793 :
NAME IS NULL :2005/11/07(月) 17:00:29 ID:XuTYqAbL
※住所は架空のものです.
>>790 スルーされたのはその場に相応しい質問じゃなかったからじゃないの。
多言語のプログラミングの質問だから、ここでも相応しくはないね。
select文の書き方が違うから
796 :
NAME IS NULL :2005/11/07(月) 17:23:08 ID:XuTYqAbL
>>795 データ自体は問題なく格納されているんでしょうか.
また,下の結果のように正しく表示させるにはどうすればよいのですか.
>>796 addressカラムではなくて、mailカラムにコントロールコードが
入っているような気がするんだけど。
select mail from person; でもおかしくならない?
798 :
NAME IS NULL :2005/11/07(月) 18:22:32 ID:XuTYqAbL
>>797 それでもおかしくなにります.
コントロールコード??表定義の不備ですか.
(
>>792 の上の図の空白が削られているので,.におきかえて書きます)
mysql> select address,mail from person;
+---------------------------------+---------------------------------+
| address.........................| mail............................|
+---------------------------------+---------------------------------+
.|東京都江東区神森3-1SSKビル424号.|
[email protected] ...
.............|鳥飼町123番地3......|
[email protected] ...............
.............|市服部町91-32-612号.|
[email protected] ...............
|.熊本県熊本市与謝鯉村6-12........|.NULL............................|
|.山口県山口市秋吉村123-9.........|.NULL............................|
+---------------------------------+---------------------------------+
メールのみの場合は以下のようになりました.
mysql> select mail from consultant;
+---------------------------------+
|.mail............................|
+---------------------------------+
.|
[email protected] .............|.ne.jp
.............|oo.com
|.NULL............................|
|.NULL............................|
+---------------------------------+
799 :
797 :2005/11/07(月) 18:40:33 ID:???
>>798 いや、表定義のミスではなくて元データがおかしい、またはインポート(load)時の
指定ミスだと思う。
mail カラム単体の結果を見た感じ、load コマンドのパラメータ
lines terminated by '行末コード'
の指定が元データと一致していないのかも。
行末コードの指定を以下のどれかに変更して load し直してみるとか?
'\r\n' か '\n' か '\r'
800 :
NAME IS NULL :2005/11/07(月) 18:55:34 ID:XuTYqAbL
>>799 元データは
-------------------------
12...あああ......東京都〜
123..いいいい....静岡県〜
-------------------------
のように各データ間をタブで区切って,
行末はそのまま改行しています.Nullは"\N"です.
テキストファイルからのインポートは
load data infile "(名前).txt" into table person; です.
801 :
NAME IS NULL :2005/11/07(月) 19:02:17 ID:XuTYqAbL
802 :
797 :2005/11/07(月) 19:07:51 ID:???
>>800 ちょっと疲れてきた…。漏れの説明がヘタすぎるんだね。
以下のどれかでインポートし直してみればいかかでしょう?
元のデータはテーブルから消しておかないと重複してしまうと思うのでご注意を。
load data infile "(名前).txt" into table person lines terminated by '\r\n';
または
load data infile "(名前).txt" into table person lines terminated by '\r';
または
load data infile "(名前).txt" into table person lines terminated by '\n';
803 :
NAME IS NULL :2005/11/07(月) 19:16:14 ID:XuTYqAbL
>>802 テキストファイルの各行の最後に,[(タブ)\r]を追加し
2行目の文でロードするとうまく表示されました.
どうも助かりました.ありがとう
number, name 4, うんこ 7, まんこ 7, あんこ 11, いんこ 11, りんご ↑ からは ↓ 4, うんこ 7, まんこ 7, あんこ 11, いんこ 11, りんご number, name 1, みかん 2, ばなな 3, めろん 5, すいか 6, きゅうり ↑ からは ↓ 1, みかん 2, ばなな 3, めろん みたいな取り出し方をするにはどうしたらいいですか?
ワケ ワカ ラン♪ ∧_∧ ∧_∧ ∧_∧ (; ・∀・) (; ・∀・) (; ・∀・) ⊂ ⊂ ) ( つ つ ⊂__へ つ く く く ) ) ) (_)/ (_(_) (__)_) 彡(_)
806 :
804 :2005/11/07(月) 21:38:32 ID:???
numberが3種類みたいなことです
ナンバーズよりロト6
>>806 サブクエリが使えるバージョンならこんな感じでいけるんちゃう?
select table1.number,table1.name
from table1
inner join (
select number from table1 group by number order by number limit 3
) as t on table1.number = t.number;
SELECT number, name FROM テーブル WHERE number <> 5 OR number <> 6
810 :
804 :2005/11/07(月) 22:15:46 ID:???
4.0じゃ無理か・・・ 4.1以上だったら number, name 4, うんこ 7, まんこ 7, あんこ 11, いんこ 11, りんご を number, name 4, うんこ 7, まんこ-あんこ 11, いんこ-りんご みたいなこともできますか?
811 :
808 :2005/11/07(月) 22:22:14 ID:???
>>810 アホくさ、後から条件だしなや。相手しとれんわ。
アプリ側で好きにさらせ。
5.0.15をインストールしたんですが winmysqladmin.exeが見当たりません。 どこあるのでしょうか?
813 :
NAME IS NULL :2005/11/08(火) 01:59:23 ID:JH3nQr9Z
MySQL 5.0.15をインストールしたのですが 操作方法がわかりません、コマンドを打ってデータベースを作ったりするには どの実行ファイルを操作すればいいのでしょうか?(MySQLで) MySQL以外の例えばphpMyAdminなどではMySQLに接続できないと言われます。 (phpMyAdmin は、MySQL サーバーに接続しようとしました。そして、サーバーは接続を拒絶しました。config.inc.php の中のホスト、ユーザー名およびパスワードをチェックし、MySQL サーバーの管理人から与えられた情報にそれらが相当することを確かめるべきです。)
>>810 804は意味がよくわからんけどそれならgroup_concatで可
816 :
804 :2005/11/08(火) 03:04:23 ID:???
JOINを使って検索す時、通常WHEREに書くような条件もONに書くべきなんでしょうか? それとも、tb1.id = tb2.id などは ONに書き、 tb1.id='1' などはWHEREに書くのでしょうか?
インストールしていたMySQLをコントロールパネルから削除したのですが、 新しいMySQLをインストールすると前のデータベースが残っていました。 MySQLの場合、データベースのファイルはどこに格納されているのでしょうか? MySQL4 Windouws2000 環境です。
>>818 MySQLをインストールした/しようとしているディレクトリの中の
dataディレクトリの中。でもプログラムの追加と削除で[削除]した場合、
インストーラがデータの削除するかどうか訊いてきたでしょ?
自分の好きな音楽のジャンルをチェックボックスで複数選択して、 データベースに格納する。 ということをやりたいのですが、 ジャンルは 1-100までのintで定義されていて、 いくつでも選択可能 ユーザを定義した(ハンドルネームとか、メールアドレスとか、パスワードとか) テーブルがありまして、できればこのテーブルに上のデータを入れたいです。 ユーザとジャンルから検索をかけたときにインデックスが使われているようにしたいのですが どのようなデータ構造にすればいい感じでしょうか? アドバイスよろしくお願いします。
>>820 やってみたのが、
ユーザテーブルとジャンル登録のテーブルを別物にしてみました。
| user | int(10) unsigned |
| genre | int(10) unsigned |
これですと、ユーザからの検索、ジャンルからの検索はどっちも高速っぽいのですが、
ユーザ情報を取得するときに、複数のクエリを発行することになってしまうのですが、
なんとかならないでしょうか・・・・
>>820-821 もう一つ言っていることが良く理解できないんだけど、こういうこと?
--- ユーザーテーブル(tb_user)---
user int, handlename varchar(xxx)...略...
--- お気に入りのジャンルテーブル(tb_genre) ---
user int, genre int
--- 抽出SQL ---
SELECT genre, tb_genre.user, handlename ...略... FROM tb_genre
LEFT OUTER JOIN tb_user ON tb_genre.user = tb_user.user
WHERE
tb_genre.user = xxx ユーザーで抽出
または genre = xxxx ジャンルで抽出
>>822 レスありがとうございます
例えばこのクエリですと、tb_user.user で絞り込んだ場合、
複数行が出力されてしまうのを、
1行で返してもらいたいのです。
genreのところを int のカンマ区切りで 1,4,10,15
みたいな感じで整形して、
select user ,handlename , pass ... genre
↑
ここが 1,4,10,15 となるような結果といいますか・・・
わかりにくくてすみません(´・ω・`)
5.0.15のデフォルトキャラクタをujisにしたら コマンドプロンプトにselect * from tableで表示されるマルチバイトが化けます。 sjisにすると化けません。 コマンドプロンプトの文字コードって帰れるんですか?
>>825 Windows?
Windows標準のコンソールでは選べないんじゃないかな。
4.0.26でレコード数の多い(数百万件)MyISAMテーブルに alter table comment = '本当にありがとうございました' でコメントを設定しようとすると、すごい時間がかかってしまいます。 全レコードを見に行っているような気がするぐらい時間がかかります。 frmファイルを書き換えるだけで終わらないんですかねぇ。
>>826 あ、すいません。忘れてました。Windowsです。
そうですか。。。みなさん、どす窓ではselectとかして見ないんですかね?
>>827 そのALTERの意味が分かんないけど、DEFAULT指定してるんなら全部の行に
'本当にありがとうございました'
を突っ込んでるんじゃね?
最初DEFAULT抜きにして、あとでDEFAULTを追加すれば?
>>828 set names sjis;
とか
MySQL 4.1.11 あるテーブル (仮に t )でコード-日付でデータが入っています t_code input_date item1 item2 でこれから当日から過去100日分のデータを日付順に見たいと思って います。過去のデータ100日分を出すだけなら select * from t where t_code = **** (←見たいコード) order by input_date desc limit 100 で出来るんですが、次の段階、日付をまた昇順に並べ替えて出力する のとくっつけてするにはどうすればいいか、教えてくださいm(__)m。
>>828 DOS窓はsjisだから、データベースがsjisでなければ set names sjisをしないと化ける。
毎回、これを入力するのが面倒なら以下のような内容で C:\my.ini に保存しておけばいい。
[mysql]
default-character-set=sjis
注意しないといけないのは、C:\my.ini を参照するのは MySQL のコマンドだけということ。
(個別に作成したアプリはこの限りではないけど)
例えば MySQL用ODBCドライバは C:\my.ini は参照しないので、ODBCの設定で
set name sjis をやらないと Access などからリンクすると化けるハメになる。
>>830 4.1.11ならサブクエリが使えるから以下でいいんじゃない?
何となく無駄が多い気もするけど。
select * from (
select * from t
where t_code = ****
order by input_date desc limit 100
) as x
order by input_date;
>>832 おぉ有難うございます。その as x をつけないので
ERROR 1248 (42000):Every derived table must have its own alias
とMySQLに怒られていたとこです(^^;。
サブクエリとか結合とか難しいっす。
834 :
827 :2005/11/09(水) 00:48:23 ID:???
>>829 カラムじゃなくてテーブルに設定できるコメントです。
create table の table_option に指定する comment と同じです。
一応、処理が終わってから見るとちゃんと設定されていたんですけどね。
835 :
818 :2005/11/09(水) 08:25:41 ID:???
>>834 alter table は、基本的に、テーブルコピー&廃棄を行う。
実行中は、テーブルに対してアクセスすることが出来なくなる。
数万レコード超えたらメンテナンス時以外は使わない方がよい。
837 :
NAME IS NULL :2005/11/09(水) 15:22:26 ID:Vdm/FnMI
先日,「セレクト文の結果がうまく表示されない」という 状態の解決策として,load dataの際に,「lines terminated by '\r'」 と書けば良い教えていただいた者ですが,この記述は通常は 行わないものなんでしょうか? というのも,毎回warningがレコード数と同じくらい出てしまうからです. 以前のように「lines〜」なしでloadすると,セレクト文の結果は 乱れてしまうものの,warningなしでinsertできます.
長文失礼します。 カテゴリテーブル | catid | parent_catid | catname | catnum1 | catnum2 |... 記事テーブル | itemid | content | .... 記事カテゴリテーブル | itemid | catid | こんな感じのテーブルがあります。 カテゴリは親IDを設定してツリー構成になる様になっています。 記事は複数のカテゴリを割り当てるようになっています。 編集より閲覧の方がかなり多いと思うので、表示時のクエリ数を減らす為に、 カテゴリの登録数(cat_num1)・下層カテゴリも含めた登録数(cat_num2 )の2つを(記事投稿・編集・削除・カテゴリの構成変更)時に更新させようかと思っています。 今やっているのは、まずSELECTでカテゴリ毎の記事数を抜き出しPHPで下層を含めたものを計算し 更新された記事に関連するカテゴリを全て1個づつUPDATEしているのですが、関連するカテゴリ数が多くなると それだけUPDATEも沢山行うので、一度のUPDATEで何とかできないか考えています。(増えても一度に10〜15程度だと思いますが) cat_num1だけならMySQLの関数のみで何とかなりそうな気がするんですが、下層カテゴリも含めた登録数はやはりPHPなどで計算しないと無理ですかね・・。 こんなもの保存せずに、表示時にクエリして計算するほうが良いのでしょうか? または、もっと素敵な感じに登録数を保存する方法あったら教えてください。。
>>831 ありがとう。普段はujisで使って中身を見るときだけsjisにして見ることにします。
840 :
827 :2005/11/10(木) 02:27:37 ID:???
>>836 了解です。
変更内容に合わせて処理が変わるわけじゃないんですね。
余りに初歩的かもしれませんが。rootでログインして今現在どのユーザーがどのデータベースに接続しているのかって 判ります?別に管理者の仕事をしているわけじゃないんですけど。
show processlist ?
>>842 回答
\ アリガd /
/´/´ /´/´ /´/´
(,,゚Д゚)/ (,,゚Д゚)/ (,,゚Д゚)/ <ありがd!
_(ノ_,)つ (ノ_,)つ (ノ_,)つ
(_ノ / (_ノ / (_ノ /
UU UU UU
エロゲでデータベースなんて使わない、ってことだろ?
MySQLって基本的にメンテフリーで無停止稼動が可能ですか?
私にはどうしてもわかりませんでした。 MySQLで、データベース単位に容量の上限をかける方法。 だれか知ってる方いらっしゃいましたら、ヒントいただけないでしょうか。 アプリケーション別にデータベース(create database)を作って、 1つのアプリケーションでの大量データ発生が、別のアプリケーションに 影響与えないようにしたいんです。 運用の手間の問題から、データベース別にパーティションを分けるのは 避けたいのですが。 環境は、CentOS4.2、MySQL4.1.12です。
848 :
NAME IS NULL :2005/11/11(金) 14:34:42 ID:ne/6/gfo
>>844 まあオープンソフトだし。オラクルのほうがいいし。
>>846 どんどん遅く成っても良ければ
>>847 MySQLのレンタル鯖でもするのかな?
>>844 文句があるならあっちでやって。わざわざ2ちゃんに持ってくる必要なし。
850 :
847 :2005/11/11(金) 23:02:47 ID:???
レンタル鯖でなく、会社で使うのに。 MySQL使いたい人が何人かいるのですが、サーバは1台で済ませたく。
会社で使うんだったら容量制限なんてしなくてもいいのでは? テスト用サーバとかなら、なおさら余裕有る方が安心してテストできるような気が。
852 :
NAME IS NULL :2005/11/12(土) 00:59:22 ID:8s5Xp8OJ
MySQL control centerをダウンロードしようと思ってるんですが なぜか、MySQL administratorのページに飛ばされてしまいます。 MySQLCCのダウンロードページを張ってもらえませんか?
855 :
852 日曜プログラマー :2005/11/12(土) 12:18:00 ID:8s5Xp8OJ
>>853 あ、データベースの操作もadminからできるんですね。
今まで、データベースって言ってたのが、5.0からスキーマって言う言葉に代わってるんですね。
856 :
ヘルプ :2005/11/12(土) 14:29:20 ID:5aSo15tf
だれか助けて下さい。 文字化けで困っています。どこのサイトを検索しても解決できません。 環境は PHP5 + MySQL + WindowsXP(IIS) で フォームの内容をMySQLに「日本語」と書き込むと フォーム送信の内容($_POST)はちゃんと「日本語」と表示されますが、 登録した内容を表示は「逓?{??」となってしまいます。 「php.ini」「my.ini」もSJISに統一したりEUC-JPに統一してみたり してるのですが全然解決せず困っています。 だれか助けてください。
857 :
ヘルプ :2005/11/12(土) 14:32:45 ID:5aSo15tf
ちなみに「mysql_client_encoding」っていうPHPの関数で 接続したMySQLのエンコーディングを調べたら 「latin1_swedish_ci」とでました。 この辺がおかしい気がします…。
859 :
NAME IS NULL :2005/11/14(月) 01:43:42 ID:+Vq9ufzG
誰か俺に問題点を教えてください。 LAN上の別のマシンからアクセスしようとしたら接続できません。 サーバークライアントともマシンはWindowsで、MySQLのバージョンは5.0.15-ntです。 telnet "マシン名" 3306 は、ローカルにやると接続できて、別のマシンからは接続できません。 なぜですか?
答えでてるじゃないか。 ローカル以外の権限がないんだろ?
>>859 接続できないと貴方が判断した理由(要因)は如何に?
そんくらい明示汁
telnet hoge 3306 で接続できないってことはMySQLによるユーザ認証以前の問題だろ。 F/Wとか、マシン名の解決とかその辺を一辺整理したほうがいいよ。
863 :
NAME IS NULL :2005/11/14(月) 09:39:14 ID:xQifeiUn
質問です。 show table statusでレコード数をrowsで求めようとしたのですが、実際にテーブルから読み出した数と違うときがあります。 これは何が原因なのでしょうか.
864 :
859 :2005/11/14(月) 12:27:33 ID:+Vq9ufzG
>>862 pingは通るんですよ。
LAN内にファイアウォールはないし。
サーバーのOSがWindows XPのHome Editonなのって関係ありますかね?
>>864 Windowsファイアウォールには穴を開けているのか?
866 :
859 :2005/11/14(月) 13:00:30 ID:???
>>865 穴あけたら通りました。
データベースと関係ないミスですみません。
助かりました。
867 :
NAME IS NULL :2005/11/14(月) 16:40:47 ID:6uYHf5vX
指定したcsvのファイルを自動で定期的に インポートしなおしたりすることはできますでしょうか?
>>867 cronとかでmysqlとかmysqlimportを回せば容易に可能。
64bit環境でMySQL使ってる人いますか?
>>863 InnoDB 使ってて、結果セットが巨大な時は概算になる可能性がある。
それじゃないか?
>>869 どこの64bit環境か知らんけど、FreeBSD/amd64でMySQL4.0入れて
一日がしがし動かしたことあるけどふつーに動いてたが…
872 :
NAME IS NULL :2005/11/15(火) 22:51:00 ID:e6XaRFFy
うちはAIX/p5で動かしてるけど,RHEL4/XEON64の方がパフォーマンスいいな
メモリ増やしたので、innodb_buffer_pool_sizeを増やそうと 思うのだけど、それに合わせてinnodb_log_file_sizeを増やすと、 ib_logfile0のサイズが違うと起動してくれません。 このサイズを 増やすのってどうすれば良いのでしょう? --skip-innodbで起動して削除? --skip-innodbが根拠無く怖い。。 あとinnodb_buffer_pool_sizeとkey_bufferとにどんなパランスで 割り当てるのが良いのかな?
my.conf
876 :
869 :2005/11/16(水) 13:11:48 ID:???
すいません。質問があります。 検索キーワードの検索対象がテーブル2のDの列と、テーブル3のFの列で 該当するレコードが含まれている、テーブル1のレコードを表示させたいのですが、 どの様にすれば効率が良いのでしょうか。 下記の場合で「hoge」と検索すると まず、テーブル2に当てはまるのが「a」と「b」。 テーブル3に当てはまるのが「cc」。 で、テーブル1で「a」と「b」が含まれているのは「1」と「2」で 同じく「cc」が含まれているのが「1」。 それを検索結果として表示させる。 テーブル1 A B C ───── 1 a,b,c aa,bb, 2 a,b bb,cc 3 c aa テーブル2 D E ───── a hoge b hogehoge c moge テーブル3 F G ───── aa mori bb morimori cc hogemori
878 :
877 :2005/11/16(水) 17:04:28 ID:???
色々とやってみたのですが、 ・検索キーワードが複数ある場合 ・テーブル2とテーブル3で該当レコードが複数ある場合 (上記例だと「hoge」で検索した場合、テーブル2で2レコード該当) ここらへんの処理でとまどっています…。 やはり何回もsql文を繰り返さなければいけないでしょうか。 どうか御教授お願いします。
>>877 質問
・例では、"cc" が含まれているのは "1" となっているが、"2" の間違いではないか?
・結果的に表示したいのは、"2" だけ?、"1" と "2" 両方?
・確認用で聞くが、検索条件を "mo" とした時、期待する結果は?
・MySQLのバージョンは?
880 :
877 :2005/11/16(水) 17:54:36 ID:???
お返事ありがとうございます。分かり辛い内容で申し訳ないです…。 >・例では、"cc" が含まれているのは "1" となっているが、"2" の間違いではないか? 「2」の間違いです…。 で、結果的に表示したいのは「1」と「2」の両方です。 >・確認用で聞くが、検索条件を "mo" とした時、期待する結果は? テーブル2で「mo」があるのが「c」。 →テーブル1のB列で「c」があるは「2」 テーブル3で「mo」があるのが「aa」「bb」「cc」。 →テーブル1のC列で「aa」「bb」「cc」があるのは「1」「2」「3」 結果:「1」「2」「3」 MYSQLのバージョンは4.0.20です。
881 :
877 :2005/11/16(水) 18:07:49 ID:???
>>880 テーブル2で「mo」があるのが「c」。
×→テーブル1のB列で「c」があるは「2」
○→テーブル1のB列で「c」があるは「2」と「1」
だと思うんだが…
自信はないが、これでどうだろう?
SELECT DISTINCT t1.*
FROM t1, t2, t3
WHERE
t2.E LIKE '%hoge%'
AND t3.G LIKE '%hoge%'
AND (FIND_IN_SET(t2.D, t1.B) > 0 OR FIND_IN_SET(t3.F, t1.C) > 0);
882 :
881 :2005/11/16(水) 18:09:53 ID:???
>>881 あっ、違った。
テーブル2で「mo」があるのが「c」。
×→テーブル1のB列で「c」があるは「2」
○→テーブル1のB列で「c」があるは「1」と「3」
だと思うんだが…
883 :
NAME IS NULL :2005/11/16(水) 18:29:59 ID:erNhWRfH
Aというデータベースの中にあるtable1と、Bというデータベースの中にあるtable2を Inner Join することはできませんか? できるとするとどうやりますか?
885 :
877 :2005/11/16(水) 20:33:33 ID:???
>882 >テーブル2で「mo」があるのが「c」。 >×→テーブル1のB列で「c」があるは「2」 >○→テーブル1のB列で「c」があるは「1」と「3」 また間違えました…。正しくその通り。 で。>881を元に色々とやったのですが上手く動作せず…。 ヒットするはずのテーブルが該当しないです…。
>>876 それは昔のRHのglibcに問題があるてこと
だからABはLinuxThreadのPatchを提供してたから
ある人たちは変なglibc(RH)を使うなと言ってたし
887 :
NAME IS NULL :2005/11/16(水) 21:38:22 ID:c/MFEjm7
すみません レンタルサーバー上でSQLがうまく動かないのですが 質問はどの板にいけばよろしいのでしょうか
888 :
877 :2005/11/16(水) 22:09:34 ID:???
んー。>881さんのお陰でここまで出来ました。 SELECT DISTINCT t1.* FROM t1, t2, t3 WHERE (t2.E LIKE '%hoge%' AND FIND_IN_SET(t2.D, t1.B) > 0) OR (t3.G LIKE '%hoge%' AND FIND_IN_SET(t3.F, t1.C) > 0) これで希望の動作をしているっぽいです。 ただ、これで該当件数をcount(*)で取得しようとすると (上記の例だと「1」「2」「3」の3つが該当しているから“3”) テーブル2とテーブル3のレコード数の合計が出てしまいます。 上記の構文って無駄な動きをしているんでしょうか。
質問させてください。 ランダムな数字のデータが入っていて(中には重複した数字もある) 重複したデータを削除して表示させたいのですがどうしたらいいでしょうか?
>>877 どちらにしてもテーブル1は元々有って変えられないのかもし
れないが変な設計だぁね。(テスト課題かなんか?)
ちゃんと動くSQLできてもすんげーパフォーマンス悪いだろーなぁ。
892 :
877 :2005/11/17(木) 09:36:56 ID:???
んー。テスト課題ではないんですがね。 例えばテーブル1が商品情報として、 その商品の特徴とかのピクトを テーブル2とテーブル3に(ピクトの説明なども一緒に)格納して、 テーブル1にはそのIDだけを当てはめているんです。 で。商品を検索するとき、その特徴で文字列検索した場合の 検索SQLを考えていたんです そのピクトは全商品共通なんで、ピクト情報全部を テーブル1に突っ込むのも無駄かなぁと思ったんで別テーブルにしたんですが、 パフォーマンス悪いですかねぇ…。 まだ設計段階なんですが、どの様な構成が良いですか…?
893 :
891 :2005/11/17(木) 10:34:37 ID:???
>>892 カテゴリーの割り当てね。そうだろうとは思った。
昔自分でガリガリ読み書きしてた頃はこういう設計してましたけどね。
この場合は、テーブル (1) と (2,3) の間に、もう1つ「割り付け用」の
テーブルを用意。
1,a
1,aa
3,c
と書いてけば、1個でも1000個でも割り当てられまっしゃろ。
あと連結キーは、文字列か整数かではパフォーマンスがおっとろしく違うので、
テーブル2,3のキーは aa とかは避けるべきですね。
894 :
877 :2005/11/17(木) 11:26:19 ID:???
>893 まだSQLは勉強中なんでためになります。 >この場合は、テーブル (1) と (2,3) の間に、もう1つ「割り付け用」のテーブルを用意。 >1,a >1,aa >3,c これってテーブル1に割り付けられているものを1行ごとに書いていくんですか? 例えばテーブル1の1の場合は H I ───── 1 a 1 b 1 c 1 aa 1 bb みたいに? レコード数やカテゴリ数が増えると、けっこうなレコード数になりますね。 で。これだと検索する場合に 「テーブル2」と「テーブル3」→「割り付け用テーブル」→「テーブル1」と 流れが遠くなるので遅くなるのかなぁって思っていました…。 >あと連結キーは、文字列か整数かではパフォーマンスがおっとろしく違うので、 そうなんですね。 勉強になりますー。
>886 昔のRHのglibcに問題ってのは、STACK_SIZEがデフォルトのままだからって言う意味ですか? 当方Gentoo使ってますので、もしそうだとすると自前でglibc入れ直しってことか…
アンケート集計をしているのですが、 テーブルに“aaa,bbb,ccc,ddd”などと、カンマで区切られた文字列が入っているとします。 tableA ID_文字 1_aaa,bbb,ccc 2_bbb,ccc 3_aaa,ccc これを $ans[] = array('aaa','bbb') のような変数の“aaa”か“bbb”のいずれかが含まれている、 というように検索をしたいのですが、 いちいち$ansを分割して SELECT * FROM tableA WHERE FIND_IN_SET('aaa',tableA.文字) or FIND_IN_SET('bbb',tableA.文字)… とやっていたのですが、$ansに含まれている文字が多くなるにつれて sql文が長くなってしまいます…。 “,”で区切られている文字列の比較関数ってあるのでしょうか?
>>896 ひょっとして
>>877 の方?
テーブルの設計を見直した方がいいのではないでしょうか?
1 aaa
1 bbb
1 ccc
2 bbb
2 ccc
3 aaa
3 ccc
898 :
896 :2005/11/17(木) 16:34:21 ID:???
違いますー。 チェックボックス式のアンケートフォームがすでにあって、 ひとつの設問に対して、複数回答すると ans1 < aaa,bbb,ddd みたいにインサートされているんですね。 それの集計結果をリアルタイムに表示させたかったのですが、、、
つーか、SQL文が長くなると問題あるの? 動作が遅くなるとか?
>>899 複数回答のアンケートならテーブルは
>>897 のように縦に持つか、横に持つなら次のようにするべし。
ID、ガム、飴、チョコ
そのサイトの方法はFIND_IN_SETの説明のためにあえてそういう作りにしたもので、
アンケートのように必ず全件スキャンする場合にのみ有効。検索に使う場合には不向き。
902 :
896 :2005/11/17(木) 17:40:10 ID:???
>901 そうなんだ。複数回答の場合、回答項目が多くなるにつれ、テーブルが横に広がっていくので、 なるべく、ひとつの項目にまとまる様に <input type='checkbox' value='aaa' name='ans1[]'>aaa <input type='checkbox' value='bbb' name='ans1[]'>bbb <input type='checkbox' value='ccc' name='ans1[]'>ccc ってやってたけど、、、 これだと、後からテーブルいぢらんとも項目も増やせるし。 そう言われれば、検索(集計)には不向きなのかな…?
先日から Windows版 MySQL 4.0.26 を使用しています。 商品管理を行うため下記のようなテーブルを2つ作成しています。 テーブル名:goods goods_id name price1 ------------------------------- | G1000001 | MBS 1320-33 | 266 | | G1000002 | MBS 1310-33 | 574 | | G1000003 | MBS 1230-22 | 413 | | G1000004 | MBS 1220-22 | 196 | | G1000005 | MBS 1210-22 | 315 | | G1000006 | MBS 1205-22 | 266 | ------------------------------- テーブル名:price_etc customer_ID goods_id price_sp ------------------------------- | C1000001 | G1000002 | 100 | | C1000001 | G1000005 | 200 | | C1000001 | G1000006 | 150 | ------------------------------- この二つのテーブルから下記のような表を表示したいのですが goods_id name price1 price_sp --------------------------------------- | G1000001 | MBS 1320-33 | 266 | | G1000002 | MBS 1310-33 | 574 | 100 | G1000003 | MBS 1230-22 | 413 | | G1000004 | MBS 1220-22 | 196 | | G1000005 | MBS 1210-22 | 315 | 200 | G1000006 | MBS 1205-22 | 266 | 150 --------------------------------------- 下記のように打ち込んでも select goods.goods_id,name,price1,price_sp from goods,price_etc where goods.goods_id = price_etc.goods_id; 下記のように表示されてしまいます。 goods_id name price1 price_sp --------------------------------------- | G1000002 | MBS 1310-33 | 574 | 100 | G1000005 | MBS 1210-22 | 315 | 200 | G1000006 | MBS 1205-22 | 266 | 150 --------------------------------------- 列:price_etc が無い場合は 空白で表示させるには、どうすればいいでしょうか? 初歩的な質問だと思うのですが 教えて下さい。 お願いします。
>>903 結合がなくても、空欄で表示したいって事ね。
where ではなく、JOIを使えば希望通りのビューができますよ。
JOIN は便利なので、マニュアルの熟読をお薦めする。
905 :
903 :2005/11/18(金) 19:16:41 ID:???
>>904 早速の回答有り難うございます。
select goods.goods_id,name,price1,price_sp from goods
left join price_etc on (goods.goods_id = price_etc.goods_id);
で表示できる事が出来ました。
ありがとうございました。
家に転がっていた『Oracle7 SQL入門』って本に where に (+) を付けると
表示できると書いてあったので where の説明Webページばかり読んでました(;´Д`)
この本に JOIN なんて書いてなかったです…(;´д⊂)
『Oracle7 SQL入門』 MySQL 3.22の本を読みながらOracle10gを使うようなものだな。
907 :
NAME IS NULL :2005/11/19(土) 07:38:21 ID:aX35oZax
文字型とか数字型とかよくわかりません。 ↓のような感じのデータベースを登録する場合 ---- | 漢字| | abcd| | 1111| | 2222| ---- ↑の列のフィールドの型は何が適切でしょうか。 とりあえずホームページ上でそのまま表示できる形になればいいのですが。 それとフィールドの名前なんかは適当でも良いのですか? 自分で書いてても説明不足と感じる部分もありますが どなたか教えてくださいますでしょうか。
∩___∩
| 丿 ヽ
/ ● ● |
| U ( _●_) ミ
彡、 ヽノ ,,/
>>907 まず、文字型と数字型を理解…
/ ┌─┐´
|´ 丶 ヽ{ DB }ヽ
r ヽ、__)ニ(_丿
ヽ、___ ヽ ヽ
と____ノ_ノ
>>907 文字型
123 → いちにさん
123 + 123 =123123 → いちにさんいちにさん
数字型
123 → ひゃくにじゅうさん
123 + 123 = 246 → にひゃくよんじゅうろく
データに合わせた型をどうぞ
910 :
NAME IS NULL :2005/11/19(土) 12:54:22 ID:jS+0sYtY
真面目に解りません。どなたか教えていただけないでしょうか? データベースExerciseに対して、以下の参照系SQL文(SELECT文)を実行し、実行結果となるようなJavaプログラムSelect.javaを作成する。 SELECT Course_ID, Student_ID, MAX(Grades) FROM Registration GROUP BY Course_ID; 実行結果 % java -classpath .;./ConnectorJ.jar Select Connected to MySQL Server. Course_ID = A01, Student_ID = S001, MAX(Grades) = 78 Course_ID = F01, Student_ID = S002, MAX(Grades) = 90 Course_ID = F11, Student_ID = S002, MAX(Grades) = 95 Course_ID = F12, Student_ID = S002, MAX(Grades) = 90 Course_ID = F21, Student_ID = S003, MAX(Grades) = 95 Course_ID = F22, Student_ID = S003, MAX(Grades) = 92 Course_ID = F31, Student_ID = S001, MAX(Grades) = 95 7 rows were returned. Disconnected from MySQL Server. お願いします
>>910 ここまでやってみたんだが…というのであればフォローするけど、丸投げはお断り。
宿題は一人でやりな。
それとスレ違い。Java関連のスレに行け。
最近「使ってみたんだけどわかりません。使い方教えてください」が増えたのは、 学校の授業で取り上げられるようになったってことなんかねぇ なんか見る度に疲れが出てくる・・・・
MySQLって大規模で且タダ厨且自社ASPという需要しかないじゃん。 他所に売るのが目的なら、ライバル?のPostgresとか、最近ならsqliteとかになるのでは?
あるよ。なんで?
916 :
NAME IS NULL :2005/11/20(日) 01:25:59 ID:b960UEpN
すみませんどうしても教えて欲しいことがあるんですが、 select 受注No form 受注M で受注Noを取り出し、 while文で、受注Noごとのレコードをあるだけ表示させようと思うんですが、 終了条件が分かりません。 Nullになれば、終了させればいいと思うんですが、文法が分かりません。 よろしくお願いします
>>916 「あるだけ表示」させるのに、「終了条件」必要な意味が分からん。
というか、perlかphpかvbかC?
MySQLの問題じゃないよね?
問題の切り分けが出来るようにならないと、これから先何も解決できないよ。
918 :
NAME IS NULL :2005/11/20(日) 01:51:07 ID:b960UEpN
>>917 VBです。DataGridで1レコードずつ繰り返し処理で、表示させようと思っています。
一部省略したソースです
Mysql = "select 受注No from 銀行M"
Rs.Open Mysql, Cn
while () ←ここで、受注Noが取得できなくなると終了させたい
一覧.Row = 0+1 一覧.Col = 0
一覧.Text = Rs.Fields("受注No").Value
一覧.Col = 1
一覧.Text = Rs.Fields("品名").Value
一覧.Col = 2
Rs.MoveNext
wend
Rs.Close
そのためのwhile文の条件式が分からないので教えてください。
>>918 VB固有の話しじゃんかよ。
ま、さすがに以下のJavaプログラムを作成せよ には度肝抜かれたが
よーわからんが Rs.HasNextとかないのか? Rs.MoveNextがフラグを返したりするかも知れんし
921 :
NAME IS NULL :2005/11/20(日) 08:03:00 ID:dJl4sgts
初歩的な質問なのですが、 データベース以下のテーブルは、 rootデレクトリに全てのテーブルが格納されるのでしょうか? それともデイレクトリ階層のようなものを、 設けたりする事ができるのでしょうか?
使ってみりゃわかる
そう。いやならDBをわける。
データベースA LテーブルA1 LテーブルA2 データベースB LテーブルB1 LテーブルB2 しかできないだろうね
PHPからMyISAMなテーブルを操作しています。 テーブルの説明(EXPLAIN)はどうすれば取得できますか?
テーブルのなかに更新日時フィールドなんかをつくらずに、phpからテーブルのデータの最終更新日時を取得する方法はありますか?
>>927 explaine ... のquery送るのじゃ駄目なの?
>>928 俺も知りたいが、方法無いのでわ。
自分は更新日時フィールド使ってやってます。
>>927-928 のどっちもSHOW TABLEで取得できるけど、
PHPからSHOW〜を飛ばしても取得が出来ないかなぁ。
fetch_rowはSELECT専用だった気ガス
931 :
NAME IS NULL :2005/11/20(日) 21:47:09 ID:JWVQQiAq
MYSQLにはやっぱPHPなのか? 誰か答えろ
___ ミ ┌ ┌ | ζ ┌ ┌ | ┌ ┌ | ┌ ┌ | ┌ ┌ | ┌ ┌ | ┌ ┌ |
931はしんでしまった
はじめからヒットするレコードが1件と解りきってるときにそのレコードの各フィールドの値を取り出すのに毎回 $sql = "select * from hoge_table where id = 25"; $result = mysql_query($sql); $rows = mysql_num_rows($result); while ($row = mysql_fetch_array($result)){ //ここで取り出す } こんなことをやってるのですが、もっと簡単にそのレコードの各フィールドの値を取り出す関数があったと思ったんですが、検索してもいまいちわかりません。関数名だけでも教えていただけませんか?
ごめんなさい、下記@Aのようなテーブルがあって、 Bのような結果がほしいんですけど、どう書けばいいか検討がつきません。 サブクエリが使えない環境のためいろいろ悩みましたが ちょっとお手上げでした。。。 誰かパッとお答えいただけるようでしたら教えてください。 @matsertb Auriagetb id name id tuki uriage --------- ---------------- 1 aaa001 1 10 100 2 aaa002 1 11 200 3 bbb001 3 10 300 4 bbb002 3 11 400 5 aaa003 4 11 500 5 10 600 5 11 700 B結果 a.name b.uriage ------------------ aaa001 300 aaa002 0 aaa003 1300
938 :
937 :2005/11/21(月) 02:25:14 ID:???
mastertb.nameがAAAで始まるIDごとの、売り上げを取得したいです。
>>937 サブクエリはいらんと思うが。。。
select
name, coalesce(sum(uriage), 0) as uriage
from mastertb
left outer join uriagetb on mastertb.id = uriagetb.id
where name like 'AAA%'
group by mastertb.id;
940 :
937 :2005/11/21(月) 03:01:36 ID:???
>>939 さん
ありが追うございます。
ごめんなさい、説明間違えました。。。
keywordtb.keywordがxxxで始まるIDごとの売り上げがほしいのですが、
keywordtbレコード数×uriagetb レコード数分合計が出てしまい、
計算が合いません。
@matsertb Akeywordtb
id name id keyword
--------- -------------------
1 aaa001 1 xxx0001
2 aaa002 1 xxx0002
3 bbb001 1 xxx0003
4 bbb002 2 yyy0001
5 aaa003 3 xxx0001
3 xxx0002
Auriagetb
id tuki uriage
----------------
1 10 100
1 11 200
2 10 300
3 11 400
4 11 500
5 10 600
5 11 700
B結果
a.name b.uriage
------------------
aaa001 300
bbb001 400
941 :
NAME IS NULL :2005/11/21(月) 11:28:16 ID:kgOtiYdS
MySQL5,1っていつ頃出るか皆目見当つきませんか?
idc1c2c3 10013 1012 102123 ↓ idc 1001 1003 1012 1021 1022 1033 このようにテーブルを変換したいのですが、 どのようにSQLを書けばいいのでしょうか?
>>942 スペースが除去されてしまって、カラムの区切り位置が判りませぬ
>>943 すみません。
id c1 c2 c3
100 1 3
101 2
102 1 2 3
↓
id c
100 1
100 3
101 2
102 1
102 2
103 3
です。
945 :
NAME IS NULL :2005/11/21(月) 16:13:39 ID:STvFOXar
>>931 Mysqlが使えるところでも、
PerlのDBIモジュールがなぜか
入ってないところがあるからかなぁ?
phpの構築優先、Perlは2の次って感じかも。
おいらはPerlでも使ってるけど。
946 :
NAME IS NULL :2005/11/21(月) 17:14:00 ID:TgU/MA2m
キャラクターセットを調べるコマンドってありますか? utf8やlatin1などと出てくると思うのですが
>>945 PHP4はデフォでMySQLが使えるけど、PerlはCPANからインスコしないといけないからかな。
PHP5ではSQLiteに変更になっちゃったけど。
948 :
NAME IS NULL :2005/11/21(月) 21:59:13 ID:STvFOXar
>>947 なるほど、PHPは最初から使えたのね。
949 :
940 :2005/11/22(火) 00:24:22 ID:???
自己解決。 上のほうで出ていたTemporaryTableが意外と難しくなかったため、そちらで回避しました。 どうもありがとうございました。
950 :
930 :2005/11/22(火) 01:28:00 ID:???
>>935 ほんとだ。
Pearからquery("SHOW TABLE STATUS LIKE 'テーブル名'")
でヘッダが取得できた。こりゃ便利だ
>>950 SHOW に限らず結果セットを返してくる SQL 文は
全部 SELECT と同じように使えるよ。
すみません、英語のマニュアル等をみたり、ググってみても ちょっと見つからなかったので質問させていただきます。 当方phpMyAdmin 2.7.0-beta1+MySQL 5.0.15(win版)を WinXpProで稼動しているのですが、phpMyAdminの画面で ビューならびに、トリガー、ストアドプロシージャの作成は SQLコマンド画面から直接コマンドを送る以外に、GUI操作 で簡単に作成できるような機能はまだ実装されていないの でしょうか? また同様に外部キーの設定もSQLコマンドを直接送るしか ないのでしょうか?
>>944 ビューってより、テーブルを作り替えるってことでしょうか?
>>944 新しくテーブルを作ればよいの?
create table t2 select id,c1 from t where c1 is not null
union select id,c2 from t where c2 is not null
union select id,c3 from t where c3 is not null;
956 :
940 :2005/11/23(水) 01:14:35 ID:YAMI2oR6
>>953 苦肉の策ですが。
create temporary table tmptb
(id varchar(3) ,
cvarchar(1) ,
PRIMARY KEY (id , c )
);
insert into tmptb select id as id , c1 as c from tb1 where c1 != "" ;
insert into tmptb select id as id , c2 as c from tb1 where c2 != "";
insert into tmptb select id as id , c3 as c from tb1 where c3 != "";
select * from tmptb order by id , c;
957 :
940 :2005/11/23(水) 01:18:15 ID:???
>>954-956 テンポラリーなテーブルを作らずに、任意のcを抽出したいのですが、
素直に最初のテーブルの状態で
c1=1 or C2=1 or ....
とやるのがいいのでしょうか?
それともテンポラリーなテーブル作った方がいいでしょうか?
>>958 それで用が足りるならそれでいいんでは?
960 :
NAME IS NULL :2005/11/23(水) 17:27:11 ID:zX9bGfyz
PHP使ってDBの負荷を観測しようかと考えてるのですが… Questions,7967029 Uptime,53941 QuestionsをUptimeで割れば混雑具合が分かるのでしょうか?
>>959 いや、元々はc1からc5まであって、
抽出するときの条件が複数になるから、
二つめの形になったものをSELCTしたほうが簡単に書けるかなと思って。
962 :
NAME IS NULL :2005/11/24(木) 02:52:48 ID:Y4TFTONw
txtファイルを再度インポートした際に上書き?できるようにしたいのですが どういった方法がありますか? name ----- a← b← のデータに上書きするような感じです c← ↓に追加されるのでなく
>>962 nameをuniqueにして、insertの代わりにreplaceを使う
SELECT id,fa,mmc FROM tb WHERE id=1 UNION SELECT id,fa,mmc FROM tbORDER BY mmc LIMIT 100, 30; 100は可変 id=1と、100番目から30個取得したい場合、2回SELECTするしかないのでしょうか? また、上の場合id=1の行がかならず先頭に来ることは保証されていますか?
phpとmysqldが別のサーバにインストールされている場合 php mysql間の通信は暗号化されているのでしょうか。
966 :
NAME IS NULL :2005/11/25(金) 02:07:47 ID:ECnAQf/t
| 何について調べますか? | ┌────────────┐ | | お前を消す方法 | | | | | └────────────┘ | [ オプション(O) ] [ 検索(S) ] | `──────────┐ ┌─── , '´l, ..| ./ , -─-'- 、i_ |/ __, '´ ヽ、 ',ー-- ● ヽ、 `"'ゝ、_ ', 〈`'ー;==ヽ、〈ー- 、 ! `ー´ ヽi`ヽ iノ ! / r'´、ヽ `´ヽノ , '´l, , -─-'- 、i_ , '´○ _ ○ ヽ、 i / | ヽ、 ゝ ├-┤ ', 〈`'ー;==ヽ、〈ー- 、 ! `ー´ ヽi`ヽ iノ ! / r'´、ヽ `´ヽノ
967 :
NAME IS NULL :2005/11/25(金) 03:25:23 ID:pnUQMbxe
Acsessでlinux上のmysqlに接続ってできますか?
968 :
NAME IS NULL :2005/11/25(金) 04:38:54 ID:pnUQMbxe
できるみたいでした。スレ汚しすいませんでした
>>965 されてない。必要なら自分でSSL噛ますようにしないと駄目。
その手のドキュメントが存在した気がする。
970 :
NAME IS NULL :2005/11/25(金) 10:00:43 ID:JqnBQ7af
以下のようなSQL文で、 日付の比較に時間がかかっています。 select * from aaa where start <= '2005-11-25' and end >= '2005-11-25' チューニングする方法はあるでしょうか?
インデックス張るとか
>>970 '2005-11-25' をキャストしたった方が速い様な気も
するけど、MySQLが最適化してる気もする。
あと出てくる2つの日付はいつも同じ?
なら ... and end>=start のが速そうですね
end >= start と end >= '2005-11-25' は全然意味が違うと思うのだが。
諸兄には余りに初歩的なのかも知れませんが一つ教えて。現在Win版で勉強中なんですけど、 Linuxにインストールしてwinのクライアントから日本語データを入れる場合って日本語の設定ってどうするの?
mysql のアップグレードに失敗してどういう訳か再インストールもままならず、 mysqlhotcopy なども利用できないのでしょうがなくとりあえず データベース用のディレクトリをそのままバックアップして OS の再インストールをしたいと考えてます。 使っていたバージョンは MySQL 3 でして、 OS 再インストール時には ver 4 以降を利用したいと思っているのですが この場合データベース用のディレクトリをそのままコピー&ペーストでテーブルの完全な引継ぎは可能でしょうか? どなたか教えてください。
サブクエリーを使わずに「集計してから結合」ってできます? select 社員マスタ.入社年度, 社員マスタ.氏名, a.時数計, a.売上計 from (SELECT 社員ID, Sum(時数) AS 時数計, Sum(売上額) AS 売上計 FROM 売上データ WHERE 日付 Between '3/1/2001' And '3/31/2001' group by 社員ID) as a left join 社員マスタ on 社員マスタ.社員ID = a.社員ID order by 社員マスタ. 入社年度 こーいうことがしたいんですけど、ウチの鯖のMySQLは4.0.26なんですよね・・・・ 結合してから集計だとどうやっても集計が何重も無駄に重なって正しくカウントされない(´д`)
977 :
NAME IS NULL :2005/11/26(土) 06:58:58 ID:2dGwNsu1
xamppでphpMyAdminとMySQL5.0をインストールしました。 phpMyAdminのキャラクタセットをeuc-jpにしたいのですが、 $cfg['DefaultLang'] = 'ja-euc'; $cfg['DefaultCharset'] = 'euc-jp'; と変更しても、選択メニューにutf-8しか出てきません。 これは「4.1以上はutf-8しか想定してません」という意味でしょうか? いっそutf-8で使おうかとも思うのですが問題はないものでしょうか?
>>977 SET NAMES ? などでクライアント側エンコーディングを指定すると
サーバー側エンコーディングを使って SELECT 時に
自動変換されるので特に問題ない
979 :
NAME IS NULL :2005/11/26(土) 13:23:50 ID:igepm8sw
0で始まる9桁の数字をchar型で入れようとしても 最初の0が抜けて入ります。 解決方法教えてください。エロいひと。
>>979 INSERTする時、' で囲っていないとか。
INSERT INTO t VALUES(003) → 3 が書き込まれる
INSERT INTO t VALUES('003') → 003 が書き込まれる
981 :
NAME IS NULL :2005/11/26(土) 14:12:42 ID:igepm8sw
>>980 それで解決しました!
どうもありがとうございました。
>>979 000000001が00000001になるのかと思ったよ。
mysql4.1.13でtextでフィールド作るとblobになっちゃうのはなぜ?
987 :
NAME IS NULL :2005/11/27(日) 17:34:33 ID:qkh6/+hT
MySQL 5.0.16-nt(Windows版)で、VARCHARに英数字だと 正常に挿入できるのに日本語をINSERTしようとすると、 ERROR 1406 (22001): Data too long for column 'str' at row 1 と言うエラーが出てINSERTに失敗するのですが、解決策は無いのでしょうか? 全部TINYBLOBとかで解決するのはあまりにも悔しい…。 ちなみに、「show variables like 'char%'」の結果は character_sets_dirを除いて全てutf8です。
988 :
NAME IS NULL :
2005/11/27(日) 20:53:53 ID:0a7tYg2U