1 :
NAME IS NULL :
2006/02/17(金) 14:38:21 ID:Lge3FOwZ
2 :
NAME IS NULL :2006/02/17(金) 14:39:56 ID:Lge3FOwZ
table_a code key1 nengappi key2 suryo_a table_b code key1 nengappi key2 suryo_b table_c code key1 nengappi key2 suryo_c [sqlの質問] 上記3つのテーブルにデータが入っていて、それを 下記のような形のテーブルにまとめたいのですが 1つのsql文で書くことは可能でしょうか? よろしくご教授のほどお願いします。 table_m code key1 nengappi key2 suryo_a suryo_b suryo_c
コード | 年月日 |数量a -------------------------- 001 | 0600101 |100 002 | 0600102 |50 003 | 0600105 |100 コード | 年月日 |数量b -------------------------- 001 | 0600102 |100 002 | 0600103 |200 003 | 0600105 |100 コード | 年月日 |数量c -------------------------- 001 | 0600103 |100 002 | 0600104 |200 003 | 0600105 |100 ↓↓↓(結果) コード | 年月日 |数量a |数量b |数量c ------------------------------------------- 001 | 0600101 |100 | | 001 | 0600102 | |100 | 001 | 0600103 | | |100 002 | 0600102 |50 | | 002 | 0600103 | |200 | 002 | 0600104 | | |200 003 | 0600105 |100 |100 |100 こんな感じで、縦に入っている数量を横に 展開したいというような・・・
select コード,年月日,数量a,NULL,NULL from テーブル1 select コード,年月日,NULL,数量b,NULL from テーブル2 select コード,年月日,NULL,NULL数量c from テーブル3
質問です。 修士論文のために引用文の管理をするための便利なソフトはないかと別スレで尋ねたところ、 ここを紹介されました。 ネットで軽く調べてみたのですが、ちょっと難解な印象を受けました。 なんらかの言語に関する特別な知識とかは必要ですか? 簡単な使い方を紹介しているサイトなどありましたら教えてください。
データベースのバックアップを取りたいので、教えてください いくつかのテーブルがinnodbで参照整合を張られている状態で、 古いデータだけをバックアップ、というか削除したいのですが どうしたらいいのでしょうか。
こりゃ、「仕事 or 宿題丸投げスレ」だな。
11 :
NAME IS NULL :2006/02/19(日) 20:03:46 ID:3lzonMpB
Windows 2000でMySQLのサービスが開始できなくなり、MySQLが使えなくなって大変困っています。エラーとこれまでの経過は、以下の通りです。 コントロールパネル -> 管理ツール -> サービス 「ローカルコンピュータのMySQLサービスを開始できません。エラー1058:指定されたサービスは無効であるか、または有効なデバイスが関連付けられていないため、開始できません。」 どうすればいいでしょうか?
13 :
NAME IS NULL :2006/02/19(日) 20:20:27 ID:3lzonMpB
やりましたが、出来ませんでした。
14 :
windows :2006/02/19(日) 20:21:10 ID:E0ular7n
WindowsServer2003でWebサーバ作ってます ASPとMySQLの連携がわからないんですけど 誰か教えてください
ええい めんどくさい おまえら、カネ払って有償サポート受けろ。 その方がスッキリする。
肉の多い大乃国
>>11 >>13 再インストールやったなら、なぜ最初にそう書かない。
ほかにもやったことを全部書きなさい。
>>11 インストール先のディレクトリ名は?
昔、Windowsの場合は空白やフルパスで長くなると不具合があった気がする。
[Firebird-jp-general] MLからのネタだが
(元はfirebird-devel listかららしい)
MySQL ABがNetfrastructure社を買収したそうだ。
http://www.netfrastructure.com/ この買収によりNetfrastructureという製品(Interbase/Firebirdを利用した
アプリケーションフレームワークのようなものなのかな?)の権利と、
Netfrastructure社のCEOであるJim Starkey氏がMySQLの仕事をフルタイムですることになる。
Jim Starkey氏は、元Interbaseの開発者。
盛り上がってますなw
>>11 Windowsのサービスからの起動は、エラーメッセージが物凄くPoorだから困るよね。
もうちょい詳しい原因を知りたいのにって場合には、
サービス > 右クリックでプロパティを開く > 実行ファイルのパスを確認
この実行ファイルパスをコマンドプロンプトから直接実行してみろ。さっきよりは何かがわかる。
ていうか
>>17 がてっとり早い正解というのも確か。
自分で問題の切り分けできない人は有償サポートを使った方が良いよ。
てかMLとか2chだと情報貰ってこちらで切り分けとか、できんからね。
以下、独り言。 さらに言うと、OSSのコミュニティって単体の問題を誰かに解決してもらうための場じゃなくて、 問題解決のための切り分け方法を教えてもらう・盗み出すための場だと思うんだが。 それを自分で身に付けようとする香具師は有償サポートなんてなくても大抵やってけるし、 身に付けない香具師はプロプラエタリ製品のときと同じく金を払って誰かに頼る必要があるだろう。 プロプラエタリ製品では内部技術情報が手に入らないのである程度仕方が無かったわけだが、 OSSは極論、ソース読めば全部書いてあるんだよ。まあソース読まなくとも親切な誰かが教えてくれたりする。 で、おまいらがOSS使う理由ってほとんど「金をかけたくないから」じゃないの? 金を払わない代わりに何かが必要になるのは世の常だが、それをやらないんじゃあまりかわらんと思うぞ。 ちなみにこのコテハンは後1週間くらいで消えますんで、JDBC Driverについて聞きたいことがある人はお早めに。
JDBCの中って蒸しますか?
>>26 接続プロパティが多数あり、それがごちゃごちゃしているため、蒸しします。
>> 3,4 SQL質疑応答スレ(2ちゃんねる)で教えてもらった内容ですが、一応自己レスしておきます。 手法1 select x.code code, x.nengappi nengappi, sum(x.suryo_a) suryo_a, sum(x.suryo_b) suryo_b, sum(x.suryo_c) suryo_c from ( select code, nengappi, suryo_a, null as suryo_b, null as suryo_c from table_a union all select code, nengappi, null as suryo_a, suryo_b, null as suryo_c from table_b union all select code, nengappi, null as suryo_a, null as suryo_b, suryo_c from table_c ) x group by x.code, x.nengappi 手法2 select x.code, x.nengappi, a.suryo_a, b.suryo_b, c.suryo_c from (select code, nengappi from table_a union select code, nengappi from table_b union select code, nengappi from table_c) x left join table_a a on x.code = a.code and x.nengappi = a.nengappi left join table_b b on x.code = b.code and x.nengappi = b.nengappi left join table_c c on x.code = c.code and x.nengappi = c.nengappi order by x.code, x.nengappi
度数分布って出せる? 10%刻みで欲しいんだけどSQLじゃあ無理かな
しかしあの ML の白痴的な全文引用はなんとかならんものか…。
>>30 GMailを使っている漏れはそんなことは気にならない勝ち組。
差集合をjoinで実現したいのですが、可能ですか
全文引用を除去してDBに突っ込んでsql引いて見れるようにするスクリプト書けばいいんじゃね? windows serverなら迷わずsql server使っとけ。ソースの必要性無いだろ。 あと構築無理なら退職して、おまいの年収の予算で代わりに鯖構築できる香具師雇え。
>>33 SQL Serverだと高負荷時にロックの嵐になりうわ何をするくぁwせdrftgyふじこlp;@:
>>25 コテハンは消えても、このスレには常駐ですか?
中の人がいるのは心強い事ですので。
>>35 うん、中の人大好き。
PreparedStatement キャッシュの質問と、
ResultSetが戻れない設定なのに戻れるの質問したの俺です。
どちらもオライリーに載っていなかったのでとても感謝です。
あとイルカがかわいいです。
声援レスdクス。元々おいらは期間限定の中の人だったのだけど、 その期間が終了するので、その後はこのコテは使えない。 なのでコテは消すけど、スレには残るよ。正規の中の人じゃなくなるが。
phpMyAdminでMySQL5.0をいじってます。 table01のカラム(cll)に外部キーを設定を追加したいんですが、 ALTER TABLE `table01` ADD CONSTRAINT `fkey` FOREIGN KEY (`cll`) REFERENCES `table02` (`cll`) ON DELETE CASCADE ON UPDATE CASCADE; として、何も置きませんでした。 エラーもなかったけど、 SHOW CREATE TABLE table01; でテーブルの設定をのぞいたところ、変化無し・・・ MySQL5.0のマニュアルを参照しても、 構文が間違っているようにも見えず困ってます。 どなたか理由を教えてください。 SQL質疑応答スレにて、こっちで聞いた方がいいと聞きました。 初心者にもわかりやすくお願いします。
>>39 >MyISAMじゃね?
あ、それでした!
ああすっきりした。
助かりました。ありがとうございます。。
41 :
NAME IS NULL :2006/02/21(火) 18:21:45 ID:xy522R4q
誰かがSELECTをしているとINSERTが一時停止しているのは解るのですが、 SELECT実行が長くてもINSERTが実行されるようには出来ないでしょうか?。。orz
ヒント:オラクル
ヒント:独立性レベル
45 :
NAME IS NULL :2006/02/21(火) 22:41:48 ID:4YfYULSd
MySQLでORACLEのOSqlEditみたいなエディタってあります?
46 :
NAME IS NULL :2006/02/21(火) 23:19:08 ID:4YfYULSd
MySQLでORACLEのOSqlEditみたいなエディタってあります?
>>46 かわいいイルカが動いてくれるやつがあるよ
InnoDBでcount(*)するといっぱい泳いでくれるよ
中の人はアドバイスが的確というか、さすがですな。 (嫌みではないですよ)
>>50 そんなホメても何もでないからね。てれるじゃねぃかよ。
52 :
NAME IS NULL :2006/02/22(水) 16:33:41 ID:yf3Bz3Qo
41です。 極力delayedは使用を避けるように書いてあるから何か心配です。。
環境WinXP Pro SP2 MYSQL 5.0.x 簡単に↓みたいなテーブルを作成したとして、 create table user ( num int( 5 ) ) numに5バイト?より大きいものが入ろうとするとエラーになりますが、 カラムで設定した以上のデータが格納されようとしたときに、 エラーとせずに、途中でデータをぶったぎって格納するみたいな設定はどこでするのでしょうか?
55 :
NAME IS NULL :2006/02/22(水) 21:57:41 ID:FX7brAdQ
テーブル接頭語とは何ですか? だれか教えてください。
56 :
NAME IS NULL :2006/02/22(水) 22:42:10 ID:YqcjGihj
mysqlでBEGINした後COMMITするまでテーブルロックがかかってしまうのですが、これを行ロックにする方法を教えてもらえませんか
>>56 commitするまではロックはかかっていませんよ
>>52 強制終了したら、キューに溜まってるレコードが無いことになるだけかと。
あるいは
>>49 にもあるようにInnoDBを使うとか、
レプリケーションを使って重いSELECTはスレーブ側で実行するとか。
60 :
NAME IS NULL :2006/02/22(水) 23:29:57 ID:YqcjGihj
ループ @begin Aテーブル1SELECT Bテーブル2INSERT Cコミット ループ終わり この場合どのテーブルにロックがかかるんですか?
>>60 2)で1にREADロック
4)で2にWRITEロック
>>55 データべース(DBMSのことじゃないよ)を複数使って切り分けられない事情がある場合に、
そのデータべースの中でユーザやアプリケーションの名前空間を切り分けて
利用する方法のひとつで使われるもの。
具体的にはテーブル名に"user01_","user02_"…などのユーザ毎の接頭語(または接頭辞)
アプリケーション毎に"apl01_","apl02_"…などの接頭語(または接頭辞)を付けて区別する。
あくまでもDB利用方法の一形態であって、DBMSの機能ではないよ。
>>60 2つクライアント立ち上げてやってみりゃ分かるだろうに。
>>60 どんなテーブルに対してどんなSELECT文、INSERT文を実行しているのか知らないけど、
mysql> show status like '%lock%';
ってやってみたら何か分かる鴨〜。
あるいは
mysql> show innodb status \G
おまけ:
>>51 おまいさんは誰だw
65 :
51 :2006/02/23(木) 02:52:31 ID:???
そーです。私が変なおじさんです。
>>63 ロックされてるかどうかをチェックするなんてできんの?
>>66 ロックの挙動、分離レベルごとのSELECTの挙動を調べる際に、コンソール(mysqクライアント)を
複数立ち上げて、というのはよくやるよ。
ロックされていれば、文字通り、"insert into hoge values (hogehoge)"とやったときにリターンしない。
ちなみに、InnoDBでデフォルトの分離レベル(Repeatable Read)で動かしている場合には、
SELECTは何のロックも発生しないよ。(共有ロックも、もちろん排他ロックも)
"LOCK IN SHARE MODE"か"FOR UPDATE"をつければそれぞれ共有ロック/排他ロックが発生するけど。
>>67 >
>>66 > ロックの挙動、分離レベルごとのSELECTの挙動を調べる際に、コンソール(mysqクライアント)を
> 複数立ち上げて、というのはよくやるよ。
たとえば、多数の更新処理が行われてるとしたときにselectかけてみるとする
その状況を再現するにはどうすればいいの?
> ちなみに、InnoDBでデフォルトの分離レベル(Repeatable Read)で動かしている場合には、
> SELECTは何のロックも発生しないよ。(共有ロックも、もちろん排他ロックも)
別スレッドがcommitしてWRITEロックを持っているときに、
その対象行を取得しようとしたときの挙動はどうなるのでしょうか?
>>68 再現、というのは負荷テスト的な話のことかな?
InnoDBにおけるマルチバージョニング同時実行制御をコンソールレベルで確認する場合には、以下を
■まずコンソール1にて
mysql> create table t1 (c1 int primary key, c2 int) engine=innodb;
mysql> insert into t1 values (1,1),(2,2),(3,3);
mysql> begin;
mysql> update t1 set c2=20 where c1=2;
■続いてコンソール2にて
mysql> select * from t1;
→マルチバージョニングにより、c1=2の行でブロックされずに読める。
→またc1=2の行はc2=2のままである。
■続いてコンソール1にて
mysql> commit;
■続いてコンソール2にて再度
mysql> select * from t1;
→commitされたので、c1=2の行はc2=20となっている。
ちなみに、コンソール2側でもbeginしてからSELECTした場合、自身がcommitするまで
コンソール1側の更新値は読まない。
。。。てかこれ、普通に分離レベルの説明と一緒だな。。マルチバージョニングによりロックが発生しないという点を除いて。
↑↑↑
こういうのが基本形。更新処理が多数=あるトランザクションが更新中の行を他のトランザクションが読みにいく、
というケースが頻発する、と考えると、この基本形がいたるところで発生すると理解可能。
実際の高アクセス時を再現したい場合には、マイクロベンチマークツールを使って、
このようなクエリを実行するようにして負荷テストを行う、という感じだとおもいまふ。
長くなったので分けて続投。
>>68 すまんです。何を知りたいのか、ちとよく分からないのだけれども。
COMMITが発行された後に、発行されたSELECTのことですか?
とりあえず一般的な説明を置いておきます。
以下もInnoDBの話ね。
ある行のカラムを誰かがUPDATEで10から20に更新したとする、COMMITはまだしていない状態ね。
この時、InnoDBでは行そのものに対して10から20へ値を書き換える。と同時に、
値10はUNDOログの領域(メモリ上)にコピーされる。なぜなら、この後ROLLBACKされたら、
戻さなきゃならないから。
で、マルチバージョニングというのは、共有ロック/排他ロックを伴わないSELECT(InnoDBだと普通のSELECT)が
このタイミングで行われた時に、行のところにある20を読みに行くのではなくて、UNDOログにある10を読んで返す、
ということが行われる。ちなみに、これはOracleの「読み取り一貫性」といわれているものと同じだと思う。
UPDATEを行ったセッションにより、行そのものは排他ロックされているが、他のセッションはこの時、
行ではなくUNDOログを読んでいるのでロックの影響(待たされる)を受けない。
(というか、↑マルチバージョニング同時実行制御の一般的な説明だなあこれは。)
で、この後、めでたくUPDATEしたセッションはCOMMITを発行したとする。
すると、UNDOログにコピーされた値10は、もうROLLBACKされることは無いため不要となるね。
InnoDBではこの値10は次に、History Listと呼ばれる領域(メモリ上)へコピーされる。
このCOMMIT後にSELECTを行うと、言うまでも無く行にある値20を読み込む。これは当たり前ですな。
ただし、このSELECTを行うセッションがトランザクションが有効で、このCOMMITよりも前に
一度UNDOログから値10を読んでいた場合、再度SELECTすると、行の値ではなく、History Listの値を読みに行く。
従って、値20ではなく値10が返る。
(というか、これはマルチバージョニングにおける、REPEATABLE READの説明だな。)
-- ここまでが高レイヤーの話で、ここから先は低レイヤーの話 ---
COMMITコマンドをMySQLサーバが受け付けた場合、トランザクションログ(REDOログ)へ
書き込みを行ったとリターンする。これは通常の設定ではDisk I/Oを伴うものなので、ある程度の時間がかかるわな。
このDisk I/O待ちの間に、別のセッションがこの行をSELECTしようとする場合を想定するなら、
やっぱり待たされるとおもう(これはおいらの推測)。
History Listを読みに行く場合(重複読み)には、UNDOログからHistory Listへの移動待ちが
理論上あるかもしれないがDisk I/O待ちに比べれば無視できるほど小さいでせう。
おいらもあまりMySQLサーバの中の話は詳しくないのでおかしなところあったらゴメンネ。
MySQL4.0でデータベースごとに文字コードを指定することはできますか?
fedora3にソースからphpmyadmin拾ってきて入れたんだけど、 euc-jpが選べない、 これはmysqlかphpの問題どっちでしょうか?
>>72 もちっと他人に理解できる説明をする努力を
指定の列が同じ値をもつレコードを抽出したいんだけど なにかいい方法ありますか
SELECT WHERE
って同じ値ならなんでもいいのか GROUP BYとHAVING併用とか
GROUP BY だと1レコードしか出力してくれなくね?
>>78 同じ値を1グループとして1行しか返さないね。
SELECT * FROM t
WHERE key in ( SELECT key FROM t GROUP BY key HAVING count(key) >1)
か、冗長だけど
SELECT * FROM t t1
WHERE key = ( SELECT key FROM t t2 WHERE t2.key = t1.key GROUP BY key HAVING count(key) >1)
いまへろへろっと書いたSQLなので通るかは知らぬ。
80 :
NAME IS NULL :2006/02/23(木) 20:53:57 ID:4uFzTdYN
フィールドってなんですか?
>>79 できた!ありがとう!
INがポイントね。うっかりしてた。
でも思ったより重いな。
これを足がかりに高速化してみます。
>>71 データベースごとの文字コード指定はMySQL 4.1からだね。ごめんねー。
中の人ハケーン! 某所で、MySQL cluster + CONNECTER/J の記事を見たんだけど、 ndb-clusterもサポート範囲内? 情報少なくて壁に当たりそうな気がするので、頼りにできるかとりあえず聞いておく
>>84 JavaPressの記事のことかな? ならその記事を書いたのはおいらだw
ただし、個人で遊ぶ範囲なら対応可といえるかもだけど、ちゃんとしたSIで使うなら、
Clusterはどこかの商用サポートも使っておいたほうがいいとおもふ。
特にノード数をかなり増やすような場合にはね。
すごく初歩的なことだと思うんですが、 mysql4.1で(windows環境、MAXは入ってません。)、 複合キーを設定しようと思い、複合キーが無いので本に書いてある通り CREATE TABLE MASTER_DATA( MASTER_ID INT NOT NULL PRIMARY KEY, MASTER_NAME_ELE VARCHAR(35) NOT NULL PRIMARY KEY, MASTER_VALUE_ELE TEXT ) とやったのですが Multiple primary key defined とエラーが帰ってきてしまいます。 複数指定できないのでしょうか? どうすれば二つ以上のフィールドを主キーにできますか? 一応参考にした本(MySQL徹底攻略ガイド[技術評論社])の内容 CREATE TABLE テーブル名( フィールド名 型 NOT NULL PRIMARY KEY, フィールド名 型 NOT NULL PRIMARY KEY, ・・・・・・ ) と書いてあったのですが、複数でいけるんでしょうか? だとしたら、数値型と文字型を主キーに出来ないとかでしょうか。 よろしくお願いします。
>>87 ほんと初歩的だね。
CREATE TABLE hoge
( id INTEGER,
name VARCHR(35),
VALUE TEXT,
CONSTRAINT PK_hoge PRIMARY KEY ( id, name) )
89 :
84 :2006/02/24(金) 02:36:29 ID:???
>>85 ひょっとして漏れって運がいいかも!?
空気嫁と言われそうだが、知ってそうなので早速質問
ndb-clusterを構築する際に、managementノードを冗長化するのは不可?
確かにmanagementノードが落ちただけではSPoFにならないっぽいけど、
問題無ければheartbeat等で冗長化したい。その方が手放しで運用できるから。
ただ、managementノードとdataノードの間のやりとりの詳細がどうなっているかまでは
記事からは読み取れないので、フェイルオーバー・フェイルバックかけても大丈夫なのかどうか疑問になってる。
どこかでFAQで出ているようだったらスマン。
わざわざ夜遅くまでサンクス。 やっぱり英文読むしか無いのかな 数万程度で日本語サポート受けれるなら買ってしまいたいんだが、 桁が一桁違うんだよなぁ・・・・ とりあえずもう少し足掻いてみます。
92 :
NAME IS NULL :2006/02/24(金) 05:01:42 ID:KEz4NyP4
>>88 CONSTRAINT〜〜
っていうのが何か分からなかったので、試行錯誤した結果、
PRIMAEY KEY(id,name)
だけでいけることが分かったので、それでやる事にします。
ありがとうございました。
精進します。
>>90 タイムゾーンがいまPSTなのでこっちは朝〜昼だよw 役に立てなくてごめんね。
年間数万でクラスタのサポート・・・てのはMySQL ABでも無理だろうなぁ。
ましてや日本企業だと完全な赤字だろう。
まあ自助努力による技術力の向上と経費節減がOSSなわけだし、とりあえず健闘を祈る(^^
>>92 CONSTRAINT hogehogeは、その主キー制約の名前をつけること。
制約に名前付けて何がうれしいか、という点については、
1. 制約の有効・無効を切り替えるとき指定しやすい
2. PRIMARY KEYやUNIQUE制約だと、インデックスの名前に使われたりする
金出すならオラクルの方が楽でいい。 無料で使えるのがオプソのメリット。
中の人に質問 JDBCのおすすめの参考書、何かありますか?
98 :
NAME IS NULL :2006/02/25(土) 22:20:42 ID:CcAG7UPd
おしえてちょ テーブル名kuruma id syasyu 1 カローラ 2 ティーダ 3 アクセラ というテーブルがあるとして、 select syasyu from kuruma とすると全行取得できるんだけど select * from kuruma where syasyu = "カローラ"; とsyasyuを指定すると取得できなくて困ってます。 mysql4.0系とかねやんmysqladminをつかってます。 かねやんでselect syasyu from kurumaの結果を csvファイルで出力してエディタでみると1行おきに 空行が入ってるのでsyasyuの後ろに何かよけいなものが ついているかと思うんだけどなにがついてるか確認する にはどうしたらいいでせうか?
100 :
98 :2006/02/26(日) 07:50:10 ID:lbSCs5sW
レスありがと。 空行が入ってることから改行が入ってることは 多分そうだと思うんだけど 誰が入れたんだ(怒! ところですでに入ってしまってるデータから改行文字を 取り除くにはどうしたらいいんでしょ?
> 誰が入れたんだ(怒!
103 :
72 :2006/02/26(日) 23:33:22 ID:???
>>74 再コンパイルしたけど無理でした、--with-charset=ujis とかしても
無理。
MySQLの問題ではないよう。正確に言うと、
MySQLとPhpmyadmin両方の問題っぽい。
MySQL4.0なら問題なくeuc-jp選択可、
MySQL4.1ならphpmyadminが2.5以下じゃないと選択不可、
色々調べたがよくわからん、日本語ではphpmyadminがmysql4.1にちゃんと
対応していないってことですかね。誰かへるぷみー
なんか知らんけど、MySQL 4.1.12 + phpMyAdmin 2.6.4-pl1 に > ujis (EUC-JP Japanese) > ujis_bin 日本語, バイナリ > ujis_japanese_ci 日本語, 英字の大小を区別しない ってあるけど?
105 :
NAME IS NULL :2006/02/27(月) 02:05:48 ID:39oPOPzH
最近MySQL使い始めたのですが,datetime型とかtime型とか なんのためにあるんでしょうか?使い方がいまいち分からないのですが, varcharやtextで保存するのと何か違いがあるのでしょうか?
>>105 日付用関数もあることだし
自動補完機能が働くから SELECT や UPDATE に便利でウッハウハ
以上
WinXP + MySQL4.0.26です。 コマンドプロンプトから操作しているとき、構文エラー等があるたびにビープ音がピーピー鳴ってやかましいです。 これを消すにはどうすれば良いですか? ググって、my.iniに以下のように記述しましたが効果がありませんでした。 [client] set-variable=no-beep
ヒント:phpMyAdmin
>>107 mysql -b または mysql --no-beep だよ。
my.iniに書くなら、[client]じゃなくて[mysql]だよ。←ぐぐった先のBlogにも(略
そ も そ も グ グ ら ん で も mysql --help に ( r y
内蔵スピーカの配線ぶった切る これ最強
Win版ですが昨日初めて2003Serverにインストールして動かしてみて 1度再起動かけてみるとbinフォルダからmysqld-max-nt.exeが消えていて 動かない状態になってました。 こういうことってよくあるんでしょうか?
SELECT * FROM hoge GROUP BY a; としたとき 出てくるレコードはユニークなaのみになるけど 同じaのうち、どのレコードになるかは決まってない? ORDER BY b とかなんかで一番大きいbをもつもの とか 選択できる?
>>112 GROUP BYの使い方は、グループ化であって、ユニーク取得じゃないよ。
本来はグループ化項目以外はSUM, MIN, MAXなりを使わなきゃいけないのを、
MySQLが利便性考えて返してるだけ。
まあ、HAVINGでも試してみてください。期待の結果が得られても、SQL標準じゃないのだけは
ご承知おきを。
>>111 うぃるす。
スタートアップ時に、前回起動直後の状態に戻す
ツールでも入ってるんじゃないの?
そろそろ中の人じゃなくなるのでこのコテで書くのはこれで終わりにします。 短期間でしたが声援ありがとうございました。ヘタレなQ/Aにもお付き合い頂きありがとうございました。 これからもMySQLをみんなよろしくね〜ノシ
>>115 中の人
お疲れさまでした。いろいろ勉強になりました。
今後も名無しでもいていただけるとありがたいです。
117 :
NAME IS NULL :2006/02/28(火) 17:19:48 ID:GYdaipXD
質問させてください。 DATETIME型を引数に取るストアドを作って 呼び出してみたのですが、どうも受け付けてもらえません DATETIME_T01('1800-01-01 10:01:01') DATETIME_T01(1800-01-01 10:01:01) DATETIME_T01("1800-01-01 10:01:01") ↑ この指定方法で試してみました。 どう指定したら動くか教えてください。お願いします
俺、PHPからver.3系使ったんだけど DATETIME型に突っ込むクエリに含まれる ハイフンやコロンでだいぶはまったことがあるよ。 出力を変数に格納して直接クエリに流し込めないのだと わかるまですっげえ悩んだ。
>>117 どう受け付けてもらえないのか、早い話エラーメッセージを書いたほうが回答しやすいです。
いまマニュアルにあたれないのですが、引数上で文字列→DATETIMEへの変換を自動でさせようと
しているようですが、明示的にDATETIME型へ変換し、それを引数としてみたらいかがでしょう?
120 :
NAME IS NULL :2006/02/28(火) 23:58:10 ID:U459FQMy
IDにMySQL出ました
Known Limitations of MySQL Cluster * When using multiple management servers: o You must give nodes explicit IDs in connectstrings because automatic allocation of node IDs does not work across multiple management servers. o You must take extreme care to have the same configurations for all management servers. No special checks for this are performed by the cluster. o In order that management nodes be able to see one another, you must restart all data nodes after bringing up the cluster. (See Bug #13070 for a detailed explanation.) MySQL Cluster FAQ Q. Is it helpful to have more than one management node for a cluster? A. It can be helpful as a fail-safe. Only one MGM node controls the cluster at any given time, but it is possible to configure one MGM as primary, and one or more additional management nodes to take over in the event that the primary MGM node fails. 同じマニュアルの中の別部分なんだけど、どう解釈すればいいんだろう 前者は「ヤメトケ」 後者は「ゼヒトモヤレ」っぽいんだが・・・・・
122 :
NAME IS NULL :2006/03/01(水) 04:14:51 ID:qaOP2plP
>>121 前者
複数の管理サーバーを置くことの注意事項について
1.ノードのIDはコネクトストリングで明示的に指定すること
2.すべての管理サーバーに同一のコンフィグレーションを設定するように注意すること
3.管理ノードがお互いを認識できるようにするために、クラスターを立ち上げた後にすべてのデータノードをリスタートさせること
後者
クラスター内での複数の管理ノード(MGM node)を置くことの有用性の説明
フェイルセーフとしてよろしいと
123 :
NAME IS NULL :2006/03/01(水) 10:18:05 ID:0+6rSoKm
>>119 そうですね、すまんです。
ただ、エラーコードも↓なんですよね、あまり役に立たないような。
エラーコード:1064 [MySQL][ODBC 3.51 Driver][mysqld-5.0.18-nt]You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DATETIME_T01(1800-01-01 10:01:01)' at line 1
SQLステータス:37000
とりあえず、CAST使って明示的に変換してみたんだけど、やっぱり駄目でした。
MySQLでストアド使ってる人って少ないんですかね。ぐぐっても殆ど出てこない。
124 :
123 :2006/03/01(水) 10:30:37 ID:0+6rSoKm
すまない、俺は重大な過ちを犯していたようだ・・・・ ストアド呼ぶときCALL付け忘れてた(´д`)すさまじくすいません。
>>124 DB(とプログラミング)暦2週間の俺と同じエラーだけど、気にしないでください。
ROMってても、質問内容すらほとんど理解できません…
phpmyadmin でmysql管理してます。 apacheのssl経由なら大丈夫だと思ってたんですが、 よく考えたらmysql自体にもssl機能があるんですね。 この場合データの盗聴を防ぐにはmysql側でも sslを使った方がいいのでしょうか? 色々調べてみましたが、よくわかりませんでした。 自宅PCからphpmyadminまではapacheのSSLで暗号化すれば、 phpmyadminとmysqlのやり取りはlocalhostでの やり取りなので暗号化しなくてもよいのかなと若干思うのですが。
>>128 [Webブラウザ]-HTTP/SSL-[Apache]-localhost/socket通信-[MySQL]
このデータの流れしかないなら、MySQL側でSSL対応は特に必要ない。
130 :
129 :2006/03/01(水) 14:22:48 ID:???
[Apache]は[Apache+PHP]だな。
>>128 SSLを使うとパフォーマンスがだいたい35%から50%ほど低下します。
インターネットをまたいでサーバへ接続とかで無い限り使う必要ないです。
別のhostからのサブクエリとかinsert ... select ..っていうのはさすがにできないですか?
>>132 Federated Storage Engineを使えばできるんでね? 試してないけど。
134 :
NAME IS NULL :2006/03/02(木) 00:14:16 ID:YdphAYN1
mysqlの将来性ってどうですか? 実は最近今後DB系でいこうかなと考えています。 で、検討してるのがOracleかmysqlです。 最近mysqlがenterprise系の機能強化をはかっていると聞き興味津津です。 一昔前ならOracleとmysqlを比べる事自体が間違いだったかもしれませんが今後mysqlの将来性はどうなのでしょうか? OracleとかSQL、DB2辺りとの比較で教えていただければと思います。
案件の内容にあわせて、環境は作るものじゃないの?
>>134 >>実は最近今後DB系でいこうかなと考えています。
本気で「DB系」で飯を食っていこうと思うなら、1つのRDBMSしか知らないんじゃ
あかんと思うよ。マグレーション案件はこれからも増えていくと思うし。
2つ以上を深く知ることで分かることもあるし。
MySQLの将来という点で言えば、OracleやIBMに買収でもされない限りは大丈夫とおいらは思う。
137 :
136 :2006/03/02(木) 01:17:16 ID:???
誤:マグレーション 正:マイグレーション
>>133 ありがとうございます。
その発想を参考にNFSでDBディレクトリをマウントしてうまく行きそうです。
139 :
_ :2006/03/03(金) 00:17:05 ID:JlNH6suN
>>136 サンクス。
mysqlのみじゃだめってことっすね。
notesDB勉強しますw
というのは冗談で、notesDBとかexchangeのアーカイブ製品コレで作れないかなぁと考えたのです。
>>139 MySQLはいろんなStorage Engineがあるので、まだ知られざる活用法とかもあるとおもう。
元Oracle使いがMySQLを使うとInnoDBマンセーになってたわけだけど。
あるいは技術力があるなら、自分で特定用途のStorage Engineを書いてアプリからは
MySQL経由で呼ばせるというのも有りだと思う。あるいは既存Storage Engineに
自分で機能追加(独自ログ出力等)も有り。Google,Incはこの方法だな。
> 既存Storage Engineに自分で機能追加(独自ログ出力等)も有り。Google,Incはこの方法だな。 どこかに載ってた? 気になる・・・・・
VineLinuxでサーバを作ってデータを検索できるサイトの作成を行ってます。 PHPでMySQLに接続して検索したりデータを更新したりできるようにしたいのですがいくつか不具合があります。 それがサイト自体の作成はWindowsで行っていてWindowsでは起こらない不具合なのです。 ちなみにWinもLinuxも同じ程度のスペックです。 1.データベースには接続できるけどデータベースへの書き込みやデータの更新ができない。 2.データの検索にLinuxの方が比較にならないくらい大きく時間がかかる。 基本的な所でそういうよくある凡ミス的なことで考えられることってありますか? 人の手伝いということで全く知識がない状態なので内容が適当ですみません。
>>131 インターネットをまたいで別のmysqlサーバーから重要データとか
引っ張ってくる場合は、SSLを使うべきでしょうか?
パフォーマンス落ちるといわれると激しく鬱ですね
>>142 1. データファイルのパーミッションがread onlyとかいうオチかな?
insert,updateしたときのエラーが分かると検討つけやすい
2. 設定は本当にWin, Linuxともに同じものなのか
>>143 VPNにして暗号化は別のにやらせればいいと思う
鯖のCPUで暗号化するとそりゃ遅く成る罠。 普通はまたがないように、ネットワーク構成採るけどな。 あとは重要データを流出する覚悟でどうぞ(w 人の手伝いと逝っても金貰ってるんだろ? 自分で解決出来ないなら仕事受けるなよ。 知識が無いなら金で買えよ。いいSIに丸投げ汁! MySQLに限らんけど、オープンソースは自己拡張してなんぼ。 ノーツやエクスチェンジはDB2やSQL serverを前提にしてる所が有るから、MySQLの置き換えは勧めない。 無料の代わりに苦労したければがんがれ。 JDBCドライバの中の人はJIS(iso2022jp)の実装ヨロシコ。 変換面倒だと思うからbrokenでjisで突っ込んでjisで出すのしかサポートせずエラー返しまくりでいいから(笑)。
>>141 Googleによるカスタマイズの件は、2005年のMySQLユーザカンファレンスの
とあるセッションで出た話なのだ。ネット上にソースがあるのかどうかは知らん。ゴメンネ。
アンケート結果に順位を付けようとしています。 フィールドにpoint(得点),rank(順位)があります。 pointをSELECTして得点が高い順に順位をつけてrankへUPDATEとしているのですが、 ORDER BY で取って来た順番をrankへ入れると、同点順位になりません。 例えば、Aさん、10点。Bさん8点、Cさん8点、Dさん5点の場合 求めているのは、 A:1位、B:2位、C:2位、D:3位 ソートでは、 A:1位、B:2位、C:3位、D:4位 になってしまいます。 何かいい方法はありませんでしょうか?
149 :
148 :2006/03/04(土) 20:34:05 ID:???
訂正 ×求めているのは、 A:1位、B:2位、C:2位、D:3位 ○求めているのは、 A:1位、B:2位、C:2位、D:4位 一回SELECT取り出してから、UPDATEしようとしています。 #SQLで処理できたりしませんよね…
>>149 もし5.0以上なのであればストアド使えばいいんじゃない?
MySQLはupdate文に相関サブクエリって使えたかな? update table1 T set rank=( select count(*)+1 from table1 where point<T.point )
>>150 5.0以上でないもので…
5.0以上でもストアドプロシージャ?でのやり方がわかりませんし…
>>151 相関サブクエリ Mysql でググってみましたけど4.1から対応なんですかね…
よくわからなかった orz..
順位を振る関数はMySQLには無いからアプリ側でやった方が早い様な?違う?
>>153 もし使えないとしても、原理は
>>151 の通りだからわかるだろう。
(
>>151 は不等号の向きが間違っている気がするが)
順位はorderで求めるんじゃなく、「自分より得点が高い件数+1」だ。
>>155 なるほど、そういうことですか。やっとアルゴリズムが理解できました。
>>151 を5.0を入れてやってみましたがエラーになりました…
UPDATE table1 T set rank=(SELECT COUNT(*)+1 FROM table1 WHERE point > T.point)
エラー内容
1093: You can't specify target table 'T' for update in FROM clause
Tを消しても、table1,Tにしてもエラーでダメです…
table1とTはテーブル名だと思うのですが,どちらも同じテーブルですが、同じテーブルに
UPDATEはかけられないのですかね…
お邪魔します。こちらでお尋ねして宜しいでしょうか。 「TurboLinux7 Server」に「MySQL(rpm版 3.23)」を入れて、「Apache(rpm版)」と「PHP(rpm版)」を使ってます。 「/home/」ディレクトリに容量の大きい後付のHDDをマウントしたので、データベースディレクトリをそちらへ移動して、 「MY.CNF」の設定も変更して「Linux」のコマンドラインでは正常に動作するのですが、 今まで動いていたPHPスクリプトでデータベースへの接続が出来なくなってしまいました。 「php.ini」の関連項目も修正しましたし、試しに"localhost"の後にポート番号や ソケット位置も指定しましたが改善されません。 データベースディレクトリのパーミッションも間違えて無いと思いますし、色々検索し てみたのですが探し方が悪いのか解決策に行き当たりません。 他に何か原因が有りますでしょうか?
>>157 >「Linux」のコマンドラインでは正常に動作するのですが、
>今まで動いていたPHPスクリプトでデータベースへの
>接続が出来なくなってしまいました。
なら、PHPが吐いてるエラーぐらい提示せよ。
つかPHPの範疇だと思うけどな(それは構わないけど)
>>13 銀河鉄道999の冥王星の描写がそんな感じ。
160 :
159 :2006/03/05(日) 20:48:02 ID:???
30km先目標の誤爆
つい数日前だが、 mysqlテーブル(権限テーブル)をMyISAM以外でimportすると、 mysqlのコマンドプロンプトからはログインできるのに、 libmysqlclient経由ではログインできなくなった。 PHPはlibmysqlclient経由だと思うので、恐らく同じことが起きると思う。 とりあえずmysqlコマンドプロンプトで確認 って常識が通用しない現象なので注意汁
162 :
157 :2006/03/05(日) 23:04:22 ID:???
レス頂きありがとうございます。 書き込みして以降も色々調べていたんですが、「Apache」のエラーログで 「MaxClients」の設定が少ないと出まして、調べたらなぜか5になってました。 インストールしたときのまま(150)にしていたはずなのに…。 そこを修正したら今度は 「Can't connect to local MySQL server through socket」 と、データベースディレクトリを移動した時に「MySQL」起動時にコマンドラインで 出たメッセージが出ました(こちらは解決)。 確かにソケットは存在してるんですが…。 取りあえずエラー原因が分かった(ようなので)あれこれやってみます。 ありがとうございました。
TL7って時点で穴空きまくりだろうな。 インターネットには間違っても公開するな。
>>162 ソケットファイルの存在だけでなく、パーミッションも確認。
>>164 パーミッションですか…一応確認したつもりなんですが…。
出先なので帰ってから再確認してみます。ありがとうございます。
>>163 そんなにやばいんでしょうか。
まぁ、あくまで自分だけでやってるので大丈夫かと…多分…おそらく…。
だから削除しやすいように、.deb作れよ。 デビアン使ってる意味無いじゃん。デビアンのパッケージシステム使え!
>>166 このコマンドを打ち込め。すっきりするはずだ。
rm -rf /usr/local
169 :
157 :2006/03/06(月) 23:22:32 ID:???
なんとか解決しました。 なんか釈然としない解決策ですが、取りあえず動いたからいいや…。 お騒がせしました。
>>168 それだと/usr/local以下が全部消えてしまうだろ!
素人に嘘教えるな。
ここは以下のように打ち込めば、今回のユーザに不要な部分が
自動的に全部消えるのでそうしなさい。
rm -rf /usr/local/../../
それでは何も削除されないよ。これで完璧 find /usr/local/../../ -type f -delete
あれ?MySQL control center って消えた?
CC は Administrator に吸収されたからもう使うな
/usr/includeとかにもインスコされてるから、フォルダごとごっそり消した方がいいよ。 mysqlユーザやグループも作られてるから/etc/passwd*や/etc/groupも消した方がいい。 最後に再起動すれば、きれいに消えた状態で使えるようになる。
起動しなくなったんですがどうしたらいいでしょうか
176 :
NAME IS NULL :2006/03/07(火) 03:56:41 ID:oIS2f7SY
今、3.23.58をインストールしたんですが、phpinfoでみたらClient API versionが3.23.48なんですがこれは普通なんでしょうか?
いまどき3.23.*を使う時点で異常 てのは冗談として APIのバージョンが違うのはよくあること。 同じtarballなりrpmなりでインストールしたなら大丈夫。安心汁
漏れのPCがおっきしたよ(w クライアントAPIバージョンってどこ見てるんだっけ? % mysql --versionからの抜き出し? 本当は変更無くてもバージョン値は統一すべきだよなあ。何となく気持ち悪い。 バックエンド(インターネットには繋がってない無い鯖)で古いバージョンが動いてるってのは良く有る話だけどな。 SQLインジェクション除けとかアプリケーション鯖で避けてれば問題が出る事はまず無い。
>>176 PHPをバイナリで入れてるなら普通。
phpinfoのは、phpが使うmysqlクライアントのバージョンだから
そのバイナリがビルドされた時に使われた(組み込んだ)バージョンが表示される。
>>179 バージョンはMySQLサーバと一緒に上がってるよ。
個人的には「変更無くてもバージョン値は統一すべき」なのが気持ち悪い。
クライアントは本体とは別の系列でカウントすべきだと思うんだけどね。
クライアントがサーバと別の配布なら別けてもいいけどね。 一緒なら上がるのが普通。 % strings /usr/sbin/sshd | grep OpenSSH | grep 200 OpenSSH_3.6.1p1+CAN-2004-0175 % strings /usr/bin/ssh | grep OpenSSH | grep 200 OpenSSH_3.6.1p1+CAN-2004-0175
あるフィールドの値が、そのフィールドのn番目の値より小さいものをDELETEしたい場合はどんなクエリで実現できますか? MySQL4.0です。
n番目とは?
>>183 すみません。
SELECT num FROM a ORDER BY n, 1
の結果をresとし、
DELETE FROM a WHERE num < res
ということをやりたいのですが、これを一度にやってしまう方法を探しています。
>>184 サブクエリが使えない4.0で一発では無理かと
10番目です。
>>185 そうですか…
4.1に変えてサブクエリを使います。ありがとうございました。
189 :
NAME IS NULL :2006/03/08(水) 20:01:45 ID:6fl6xIiS
いかのようなクエリ文のusingで困っています。 ぐぐったのですが情報がほとんど得られなかったので、詳しい方いらっしゃいましたらご教授お願いいたします。 $sql = 'SELECT cat.* FROM c_commu_category AS cat' . ' INNER JOIN c_commu_category_parent AS pcat' . ' USING (c_commu_category_parent_id)' . ' ORDER BY pcat.sort_order, cat.sort_order';
どう困ってるのかがさっぱりわからないよ。
確かに、どう困ってるかわからん。君はこんな質問されて答えられるか?? 推測でusing使う場合は、二つの表の列名同じじゃないといけないよ。
193 :
NAME IS NULL :2006/03/08(水) 23:19:26 ID:hf6SJfRA
データベース初心者なんですが ID 本文 語数 キーワード(不定数) みたいなテーブルって作れますか? 作れたとして不都合ありますかね?
>>193 そのテーブルを作って不定数個のデータを入れるなら構わないけど
そのテーブルが不定なのは設計が宜しくない。
まあ動的にやることもあるにはあるんだけど。
195 :
NAME IS NULL :2006/03/08(水) 23:43:08 ID:hf6SJfRA
>>194 レスありがとうございます。
ID 本文 語数 キーワード
01 abc 3 a,b,c
みたいなのはOKですよね?
ID 本文 語数 a b c
みたいなのがダメで。
それとも↓すべきということでしょうか?
ID 本文 語数 キーワード
01 abc 3 a
01 abc 3 b
01 abc 3 c
197 :
NAME IS NULL :2006/03/08(水) 23:54:12 ID:hf6SJfRA
どうわけたらいいんでしょうか?
>>197 (*ID, 本文, 語数, キーワード)
↓
(*ID, 本文, 語数)
(*ID, *キーワード)
>>198 よくわかりました。どうもありがとうございます。
フィールドに配列使えるDBがあるってのをどっかで見たことある MySQLではできない、対応予定なしなのかな?
>>200 非一次正規形(NFNF)とかいうやつですね。昔はADABAS Cが対応してました。
いまはOracleとかでもできる…んだよね?
MySQLはinnodbの拡張とかだと難しいけど、バックエンドの追加なら簡単そうだから、
ある日突然サポートするといいだすかもね。
配列型のフィールドMySQLで使えたらどれだけ便利かといつも思う まぁテーブル正規化しろ、といわれればそれまでなんだが
配列使ったら負けだと思う・・・
中には多次元配列が使えるヤツもあるからな。Firebird とか。 極論で言えば、それだとレコード数1・フィールド数1で済んでしまう。 これに甘えて正規化できないバカが増えそうだ
205 :
NAME IS NULL :2006/03/09(木) 21:54:22 ID:6oW3XNUg
smart styleっていう会社mysql業界ではなまえがうれてそうなんだけどどんな会社?
↓ソの会社のhomePage
http://www.s-style.co.jp/ この前陸那比で見掛けて機になってます
誤字脱字は許して下さい。Fedoraの文字変換デフォで使ってるので、、
smart style? 初めて聞いた。
207 :
_ :2006/03/09(木) 22:44:42 ID:6oW3XNUg
あまり有名じゃないみたいですね
>>205 大阪の会社で関東には余り出てこない(営業圏じゃない)から首都圏では知名度が低い。
関西のオープンソース関連のイベントには結構、というか殆ど出てるんではないかな。
# イベント自体が少ないから<関西や他の地方
209 :
206 :2006/03/09(木) 23:46:55 ID:???
大阪の会社だけど知らんかった。 というか、うちがイベント出てないしw
210 :
_ :2006/03/10(金) 00:37:54 ID:97Mv0Gsl
働くにはよい会社ですかねぇ ちょっと陸那比見て依頼興味があるんで。。。
配列使えてうれしいの? フレームワークで吸収すればいいじゃん。 DB依存するとろくな事無いよ。
正規化すればするほどSQLのレイテンシが悪くなる問題もあるからなぁ 配列使えるなら、使うことで高速化できるケースもかなりある筈・・・・
配列ねぇ。 検索しないんならSerializeして突っこめばいいんじゃないの? 検索するなら正規化しる!って話だろうし。
でも配列は誰もが一度は夢見る機能だと思う
XMLの夢は見た
YAMLで突っこめ!
217 :
NAME IS NULL :2006/03/10(金) 12:46:49 ID:lWTqMqLd
かねやん MysqlAdminでテーブルに簡単にデータ追加する方法って無いんでしょうか? かねやんでデータベースのテーブル1を開いて、 空欄をダブルクリックするとレコード詳細が出ますが、 そこから「フィールド内容」に直接書きこもうとしても灰色になってて書きこめません。
218 :
NAME IS NULL :2006/03/10(金) 15:41:31 ID:lWTqMqLd
プライマリキーをテーブルを作った後から設定する方法ってありますか?
YAML嫌いなのでRDocで突っ込む。
質問です。 mysqldump の出力を、PostgreSQL に取り込みたいのですが、そのままではた くさんのエラーが出ます。しかし、出力ファイルをエディタやスクリプト言語 で修正するのも手間です。 何か、効率の良い方法はないでしょうか? MySQLのバージョンは5.0.18、OSはLinux です。
>>223 生きてるのも面倒だろ?
七輪と煉炭とガムテープが一番効率が良くて簡単だと思うよ。
>>223 定義だけは手動で作り直したら?
データはCSVでなんとかなるでしょ。
>>224 ワロタ
227 :
223 :2006/03/12(日) 18:59:35 ID:???
結局、
mysqldump --compatible=postgresql
とすれば良いことが分かりました。始めから英文マニュアルを読めばすむこと
でした。
http://dev.mysql.com/doc/refman/5.0/en/mysqldump.html http://www.hijiki.net/archives/2005_01.html > それは--compatibleオプションで、mysqldump --compatible=mysql40… とす
> ると出力されるSQLファイルを4.0系のものに変換して出力してくれるのです。
> 驚いたのがoracleやPostgreSQLへ変換するパラメータも有ることです。これは
> 便利だ。
最近感じているのですが、
・5.0系には素晴らしい新機能がたくさんある。・新規開発なら当然5.0を選ぶ
べき。
・しかし日本では今現在4.0系ばかりが使われている。
・よって、ググったり、2chで質問したりしても、そういう情報はなかなか得
られない。
・あきらめて英文の公式マニュアルを読むべし。それだけの価値はある。
では、失礼します。
50はまだ実績が無いから人柱。 新規開発でも重要なデータ入れるなら、枯れた40使うべき。 DBは導入後10年ぐらいの付き合いに成る重要なソフトだぞ。
>>227 --compatible=postgresqlの存在は知らなかった。
どこまでコンパチな内容を吐くのかね。
>>228 MySQLサーバじゃなくて、付属クライアントだけ切り離して
見てみるのも良い事だと思うけど。
全ての機能が新しいサーバでしか使えないわけでもないんだから。
honoka varchar(15), nagisa varchar(15), data text という構成のテーブルがあり、 honokaとnagisaをセットでプライマリキーに設定しています。 honokaとnagisaはセットなのですが、検索時においては honoka単独とかnagisa単独で検索することも多いため、 myadmin使って、nagisaにインデックスを振った状態でさらに honokaにインデックスを振ろうとしたら PRIMARY と INDEX のキーは両方とも、カラム `honoka` に設定されるべきではありません。 といわれました。 なぜでしょうか。
>231 既に honoka, nagisa という順番の主キーがあるので honoka カラムにそれ以上キーは必要無いから。 nagisa が単独でキーを持つのは意味があるので有効。
4.0は制限しかなくてできることが少ないので、初心者にはオススメだけど、わかっている奴には物足りない。
5.0はフルスペック目指しているけど、まだまだ開発途上で人柱になるつもりでなければ辛い。
そんな漏れは4.1でbinary指定で使ってる。
英文読む必要があるのは同感。頼むから更新部分の日本語翻訳してくれ。
仕様変更前の情報が載っていて、信用すると動かないってかなり問題だと思うんだけどなぁ
>>231 プリキュアかよ・・・・・
・DBはデータの保証を行う重要な位置付けにあり、入力するデータによって保存問題が起きる時点で論外 ・文字コード変換が必要な場合は、DBにアクセスを行うアプリ側で処理すれば良い。 そもそもDB直接アクセスのインターフェースを一般オペレータに開放するなど考えられない。 ・ソートも、基本的に文字コード順でソートできれば無問題。 どっちにしろ、複雑なソートを行おうとするなら、アプリ側で処理する必要がある。 あと、これはちょっと違うが、 50万件超のレコードを、数千種類のカテゴリでソートすると、SQLだけではとんでもない処理時間になる。 結局アプリ側で処理してるよ。 最近はクイックソートやクイックサーチだけでなくて二分木ライブラリまであるし。
236 :
231 :2006/03/13(月) 02:18:23 ID:???
>>232 ありがとう。
ついでにさらに質問
>>231 のテーブルにおいて
nagisa を検索するときに 頭9文字で検索することが多いのですが
その場合、インデックスは有効に機能するのでしょうか。
238 :
231 :2006/03/13(月) 04:04:34 ID:???
>>237 ありがとう。こんな便利機能知らなかった。
マーブルスクリュー食らって反省してきます。
239 :
NAME IS NULL :2006/03/13(月) 05:42:34 ID:HUDYj6ns
MySQL4.0.26で、MERGEテーブルのことで質問です。 FULLTEXTインデックスのあるMyISAMをMERGEするときに、 FULLTEXT KEYを入れると #1214 - The used table type doesn't support FULLTEXT indexes となりますが、 FULLTEXT Keyを入れないと CREATE TABLEはできますが、開くときに #1016 - Can't open file: 'test.MRG'. (errno: 143) となってしまいます。 どうすれば利用できますか?
241 :
NAME IS NULL :2006/03/13(月) 08:52:56 ID:HUDYj6ns
全く英語がわかりません。。 >MERGE tables do not create indexes on their own, ぐらいしか解りませんでしたorz
翻訳サイトにつっこんでみた?
一体日本の教育はどうなっとるのじゃ! 中・高と英語を6年も学ぶんだぞ?
もしかしたら専門(MySQL)用語で詰まってるのかも。 それなら日本語で書いても無理。
timestamp型をindex作成したのですが実際にselectしてみると データが1件もヒットしません。 これってmysqlの仕様ですか? Mysql 4.1です。 宜しくお願いします。
/ || :ヽ
┌|(⌒ヽ :|| ..:⌒: |┐ / ̄ ̄ ̄ ̄ ̄ ̄ ̄
|::|::ヽ.__:):||(___ノ ::|::| │
|:|: .. :|| .. |:| │
:|: .. || ..|| <
>>245 日本語でおk
:\ [_ ̄] /::| │
:: |\|_|_|_|_/:::| \________
__| | / / :|___
>>235 そりゃ、ちょっと特殊すぎる事例なんじゃないか?
MySQLが一番多く使われているのは、はてなやmixiのようなWebサイト構築だろう。
そういう運用で、DBデータをSQL以外で処理しているとは思えん。
> ・DBはデータの保証を行う重要な位置付けにあり、入力するデータによって > 保存問題が起きる時点で論外 そもそもこの文の意味が分からん。 一つのchar型のカラムに、どんな種類の文字コードでもセットできるようにし たいってことか?まさか。 一時期あちこちで binary型が推奨されていたけれど、あくまで緊急避難とい うことだろう。弊害が大きすぎる。 SELECT * FROM [テーブル名] WHERE [カラム名] LIKE '%十%'; binaryだと、こんなクエリをWindowsクライアントから受け付けることすらで きない。Shift_JIS では、「十」=0x8F5C、「\」=0x5C で重なってしまうから だ。 MySQLの5.0.4 及び、4.1.12で、cp932とeucjpmsが導入されている。これら以 降のバージョンを使っている、binaryにし続けた方がいい理由なんて、無いと 思うが。
249 :
NAME IS NULL :2006/03/13(月) 19:42:17 ID:YmeF+nF2
今日始めたばかりなのですが質問させてください とてもくだらないであろう事なのてすが… 4.0.26で本を読みながら接続してみたところできました。 そしてパスワードを設定し一度切断してまた再接続しろと 本に書いてあったのでやってみたところパスワードが違うようで何をやってもだめでした。 はじめからやり直すにはどうしたらよいのでしょうか?
でも日本語には複数のコードが有る。文字化けと言うかデータ喪失は避けたいとなると、バイナリ処理が一番現実的じゃね? アプリ側で文字コード変換しても、失う物は失うよ。クライアントからは入力した文字が、DBに入ってないというクレームが来る。 人名系とか氏ねる。 どうせ人柱してくれるなら、嵌ったことをblogにでも書いて公開してぐぐれる様にしてくれ。 同じく、更新部分の英文読む必要に迫られたら、日本語翻訳しろとは言わんからm概要だけでも同じくblogにでも曝してくれ。 みんながそれぞれ英文読む時間の再利用が出来ないのが無駄。 アニヲタ? ますますDB使いって駄目だなあって言われる悪寒。
251 :
249 :2006/03/13(月) 19:58:24 ID:???
すいません自己解決しました
>>249 管理ユーザのパスワードなら、マニュアルにパスワードを忘れた場合に
権限データベースをスキップしてMySQLサーバを起動させるオプション
のことが書いてあるから、その記述に従うのが良いと思うよ。
> 一つのchar型のカラムに、どんな種類の文字コードでもセットできるようにし Macの人だね、きっと。
254 :
NAME IS NULL :2006/03/13(月) 22:27:01 ID:YmeF+nF2
>>252 ありがとう。そりゃそうですよね、よく読み直します。
プログラム系はさっぱりなのであせりました
>>248 運用時にwindowsから直接SQL叩くのかよ・・・・・・
漏れの感覚ではその時点で正気とは思えない。
\x5c問題が嫌なら、問題が起きないコード体系を使えばいい。
設定したからといって、設定漏れ・ミスで問題が起きない事を保証できるかと言われれば、
漏れは「保証できない」と返答する。
それでなくても、MySQLの文字コード関連は設定が5箇所以上に渡っていて、
それぞれの組み合わせで動作結果が変わる。
ハードウェア障害等で復旧処理が必要になった時に間違わないのかと言われれば
当然リスク要因に挙げられるし、ややこしいことを考えずにbinaryにしておいて、
フロントエンド(アプリ側)で処理させる方が得策だと考えている。
こうやって文字コードで何かと考えなければならない時点で、もうなんというか・・・
256 :
239 :2006/03/14(火) 02:26:57 ID:OKJBYypF
何となく雰囲気は読めるのですが、、 FULLTEXTインデックスがないとうまく動くのですが‥
すみません、以下の違いは何なのか教えていただけませんか? character_set_client character_set_connection character_set_database character_set_results
つ google の 1件目
マカウゼーな。 ろくに文字コードも知らんアフォのくせに。
>>258 失礼しましたorz
「MySQL文字コード」で検索していました…
もう一つ疑問があるのですが、
character_set_connectionの値は実際にどんな影響があるのですか?
データベースの文字コードがeucjpms、cp932、utf8のものを使って試したところ、
client、resultを設定すれば(シェルでsjis、Perlからutf8で実験)正しくINSERT、SELECT、ORDER BYできたのですが…
mysqlのユーザのパスワードって何で暗号化してるか分かりますか?
詳細は良く知らないがSHA1かその変形だと思う。
実験って、文字化けしない文字を実験しても意味が無いよ。 文字化けする文字をわざと入れて検証しないと意味が無い。 実務経験無しの素人?
カーネル2.6系環境でビルドすると アーキテクチャ固有ヘッダ関連で エラーになるよね? なんとかなんないの?
266 :
NAME IS NULL :2006/03/17(金) 01:44:28 ID:YsGKwMIo
すいません なぜ LIKE '%ゆりこ%' で “てるこ”が当たるんでしょうか?
>>266 文字エンコーディングが、ちゃんと設定されてないからではないか。
268 :
NAME IS NULL :2006/03/17(金) 03:04:29 ID:+oeQ5Gmh
『You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near』 このメッセージ↑が出てzipとかjpgとかアップロード全く出来ません。 XPですけど、PCリカバリしないとダメですか?
270 :
NAME IS NULL :2006/03/17(金) 06:04:49 ID:KX0IVh5h
>>269 傲慢な態度してないでたったと教えろよ。分かんないの?
>>270 質問者がID出してるのにそれは無いだろ。
日本語が不自由な在日が湧いてる。 たったとってどこの言葉だよ。 ボラクルでも買ってエラーメッセージも日本語にしてもらえよ(w 文字コードが理解出来ない香具師はDB使うスキルが足りないよ。 大人しく業者に丸投げするかオフスのおまけのアクセスでも使っとけ。
オフスってどこの言葉だよ
オフス、オラ悟空!
ボラクルのエラーメッセージ、日本語だと ORA-XXXXX ???????????????????????????? とか出て読めないことがおおいww 結局エラー番号で調べなおす・・・
日本語対応コンソールぐらい使え。
まぁボラクルのエラーメッセージは誤訳も多いから英語にしといた方が安心
すると英語が読めない低能が困ると(w
281 :
NAME IS NULL :2006/03/18(土) 18:41:19 ID:1lxcM2Nb
$sql .= ' class = ' . $class; $query = 'select * from `mas`,`report_p` where' . $sql; これならうまくいくのですが、これに ORDER BY `bangou` ASC これをくっつけて昇順表示にしたいのですが、どこにくっつけてもエラーがでます。 なぜでしょうか?
bangouだけじゃ、bangouがどのテーブルに属しているか 分からないからじゃないの?
283 :
NAME IS NULL :2006/03/18(土) 19:53:10 ID:1lxcM2Nb
なるほどやってみます。そういわれたらそうですね。
284 :
NAME IS NULL :2006/03/19(日) 11:50:38 ID:Mf01Nu/5
mysql> SELECT * FROM jpzipcode WHERE oldpost='468"; '> SELECT * FROM jpzipcode WHERE oldpost='468'; '> ; '> ; '> ; '> \ '> \ '> \ '> '> " '> \ となってプロンプトから抜けられません \qでも抜けられません コマンド打ち間違えた場合どうすればよいのでしょうか?
285 :
NAME IS NULL :2006/03/19(日) 12:26:19 ID:Mf01Nu/5
事故怪傑しました
287 :
NAME IS NULL :2006/03/19(日) 12:53:29 ID:jgNyFySV
SQL Serverのエンタープライズマネージャーみたいに GUIでクエリとか操作できるソフトってないですか?
>>287 SQL Serverはあんまり好きじゃないど
DTSだけは神だよな
>>289 おいおい
あれは使い勝手悪いだろ
もう少し使い勝手いいやつ教えてやれよ
GUIでしか操作出来ない時点でDB使うスキルが足りない。 業者に丸投げした方がいいよ。
293 :
NAME IS NULL :2006/03/19(日) 22:11:43 ID:q4Z3aC05
初心者な質問で申し訳ないんですが・・ mysql -umechakucha でログインできてしまうのはどうにかならないのですか? 権限がないから問題無いようにも思えますがなんか気になります。
ログインさせたくないユーザにmysqlコマンド実行でき無くしちゃえば? そもそもそんな変な事するユーザをログインさせるな。
>>293 普通ログインできないと思うぞ。
my.cnfで、mysqlやclientのデフォルトのアカウント設定とかしてないか?
ブログなどいろいろなコンテンツが入っているコミュニティサイトを作っているんですが、 例えばある画面で表示させるデータをDBから取得してくる場合、 1)一度DBに接続してから、その画面に表示させるデータを全部取得してから切断 2)または、機能ごとにデータを取得する関数のなかで接続切断している どちらがいいのでしょう? プログラミングの仕方の質問でスレ違いの気がするんですが、 皆さんはどのようにしているんでしょうか?
1) 比べるまでもない やってみればわかる。 ConnectionPoolしてるなら気分の問題かな。
PV稼ぐ気有るなら、静的に書き出さないと毎回SQL引いてたら鯖堕ちるぞ。
ならXOOPS使っているレン鯖は全滅だな。
でも、Xoopsは実際に重たいと思うぞ。
XOOPSで鯖が落ちたという話は聞かないね。 MT禁止の鯖ならあるけど。
xoopsの場合はapacheのコネクション数上限で絞ったり、いろいろ対策ができるからじゃね?
XOOPSはバグ多すぎ… いったいどれだけのサイトが改ざんされたことか
305 :
NAME IS NULL :2006/03/20(月) 17:27:16 ID:DnAPAci/
今まで一人しかユーザーが居なくて一人ですべてを管理していたアプリがあるのですが、 管理責任者はすべてのデータを管理し、ほかの管理者はユーザーIDによって担当の DBを拾い出して管理するという仕組みに変更することになりました。 (ログインするときのユーザー名が管理するDBのIDと同じになると言う設計です) 今までは、ログインすると管理題目一覧が出て、管理題目を選択すると、管理題目詳細に 飛ぶ仕組みでした。 今度は管理責任者は従来どおりなのですが、管理者はログインした時点で管理題目一覧を 飛ばして、管理題目詳細へ飛ぶようにしたいと思っています。 しかし、管理責任者は選択するとき、管理題目をクリックするので、linkラベルを使って飛ばせ ますが、管理者はログインしたら何もクリック等せずに管理画面詳細に飛ばさなくてはならない ので、記述の方法で行き詰っています。 if($_POST['kanrisikaku']!='yes'){ //userid.phpに遷移する<この処理の書き方が分からない。 } useridにあたる部分の生成方法は分かるのですが、分かっているPHPファイルを読ませる方法が 分かりません。 どなたか御教授ください。 お願いします。
306 :
305 :2006/03/20(月) 17:35:23 ID:DnAPAci/
PHP質問に書いたつもりでMySQLスレだった・・・ 吊ってきます。
>>305 WebProg板のPHPスレ行き。
しかしその説明じゃ、読んだ人はわけ判らんよ。
そのシステムについての前提情報の説明が全然ないから。
PHPスレはこんなんばっかだけどなw
xoopsは落ちないように絞ってるからでしょ。 鯖は落ちないけど、利用者は重い!って叫んでる状態。 アフェとか広告稼ぎにはPV少ないと致命的。
connection数 768 平均秒間クエリ数 800程度 最大秒間クエリ数 1400程度 これでもcpu 50% idle ですよ。
ぶっちゃけapache鯖とmysql鯖とではどっちの方が先に落ちるようになってんの?
システムの一時ディレクトリが存在しないとき、 mysqld が起動時に C:\ 直下に ib2 ib3 ib4 ib5 という空のファイルを作るっぽいです。 これは一時ディレクトリに書き込めるかどうかのテストのようですが、 なぜかディレクトリが存在しないときにシステムのルートで試すようです。 同様の現象で困っている方いらしたら、参考までに。
Mysql5で使っているauto_incrementがあるテーブルを mysqldump --compatible=mysql40 とmysql323 でバックアップファイルに出力したら AUTO_INCREMENTが含まれていないのだが、これって仕様ですか? --compatibleをつけないで出すと問題なくAUTO_INCREMENTがある状態で吐き出します。 マニュアルやGoogleで調べても全く情報が出てこない… どなたかご存知の方いませんか?
一時ディレクトリ存在しない時に作るスクリプトを書いて、そこからmysql起動すればよろし。 mysql40とmysql323のころにはAUTO_INCREMENTの機能が無かったからでは? 付けないときはmysql5仕様で出力されてるだけ。
>>315 んなことはない。auto_incrementはかなり昔からある。
素直にバグじゃね?
どうして avg()やmax()、min()はあるのに median() が無いのはなぜ?
>>317 >median() が無いのはなぜ?
特殊な関数だから、、、需要が低いんじゃね?
確かに欲しいよなぁ。。>median() まあcount(*)してorder by すれば分かるっちゃ分かるが。
ググリ疲れますた 打ち込み疲れますた 文字コード近辺の事例ってとこまでつかんだのですが… エラー1406にてINSERT不能 コマンドプロント,スクリプト(perl)共に英数のは場合は可能 何かさわりまくってると何故かプロントのみ日本語が通ったり… 何か ってのが全然不明れす 今は下記の設定でプロントからも通りません WinXP mysql 5.0.18 Server characterset: ujis Db characterset: ujis Client characterset: ujis Conn. characterset: ujis 基本的な事なのかな
>320 ググッた時は 何もしないで治った ってのがあったんですが ほんとに 何もしないで治りました… HOIMI♪ 一応… 一回 英数で入力して,日本語入力したらとおるようになりました
>>321 error 1406 ってどんなエラー?
>321
うぉ…なおってない,,動作が安定してない?
訳わかんないっす、、
最初日本語入力できたカラムにまたぶっこめなくなってるし
>>322 Data too long for column 'sub' at row 1
です
>323 補足perl INSERT INTO spot ( hoge,hoges,oe-,hogee ) VALUES ( 'て','て','て','て' ) ↑ 通った。 ↓ 通らない。 INSERT INTO spot ( hoge,hoges,oe-,hogee ) VALUES ( '俺','噛み','行く','' )
文字コードSHIFT_JISじゃね?
326 :
317 :2006/03/23(木) 01:19:03 ID:???
やっぱ中央値ほしいです SELECT MAX(hip), MIN(hip), MEDIAN(hip) FROM chugaku GROUP BY gakunen; としたいとき、MEDIAN(hip)に代わる表記方法がいまいち思いつかないです。
その例だったら、MEASURE(hip)でどうだろう?
328 :
320 :2006/03/23(木) 04:35:49 ID:???
報告〜.... 結局 mysqlのバージョン下げて対応 色々漁ったけどこれが一番いいとおもふ ほんと今回は苦労しますた 時間かなり食った,小学生定額年にはむつかしかったれす。 これから1時間寝て通学シマツ!
中央値の候補が100とか1000とかあったら処理が大変。 MAXとMINを足して2で割って誤摩化しとけ。
>>317 こんな所で駄々こねてないで、mysql.comにそう言え!
統計のことはRに丸投げが正しいやり方です
プロントはEdy使える
333 :
317 :2006/03/23(木) 12:02:34 ID:???
>>329 ごみっぽいデータはほんとマジでごみなので
MAX(hip)が120cmとかありえない数値だったりするんですよ
PostgreSQL 使えばいいじゃん
336 :
NAME IS NULL :2006/03/23(木) 19:57:25 ID:2T59S4kh
>>336 接続部分に使ってるライブラリなどをリストアップして、代理店に電話するしかないとおもうよ。
ABからライセンス取った方がいいね。 無料で使って儲けようって考えが浅ましい。
test_abc、test_def を作成して、 phpmyadminで見ると test_で始まっている2つがひとくくりで表示されてしまいます。 これはあくまでphpmyadminの勝手な機能で、 MySQL側で hoge_ が一致する場合は、 同様の権限に設定する、なんていう恐ろしい機能がある わけではないですよね?
340 :
NAME IS NULL :2006/03/24(金) 22:23:29 ID:8+rEtgD4
下記の環境(Linux)でphpMyAdminから日本語データを 入力することができません。 PHP5.1.2 MySQL5.0.19 phpMyAdmin2.8.0.2 MySQLの各default-charsetは全てujis(日本語EUC)に設定、 phpMyAdminはWindows上のブラウザで操作してます。 気になるのは、MySQLの文字コードを上記のように設定して いるにも関わらず、phpMyAdminのトップページに表示される MySQL文字コードがutf-8になっています。 PHPのmbstringsの設定などが関係するのでしょうか?
phpスレの話だな。 MySQLを使う以上、utf-8で全部統一した方がいいよ。 変換すると絶対文字化けは避けられない。
っていうより、HTMLの話なんじゃ…
343 :
NAME IS NULL :2006/03/25(土) 10:45:50 ID:0QpbJoUh
複数のカラムに個別でindexを付けているのですが、whereの中で or で連結するとindexが働きません。 以下のような形で作り、 ------------------- create table test( a int, b int, index(a), index(b) ); insert into test(a, b) values(1, 11); insert into test(a, b) values(2, 22); insert into test(a, b) values(3, 33); ------------------- 以下のようなselectをしても type が ALL で、key も NULL になります。 explain select * from test where a=1 or b=11; マルチカラムインデックスの場合にorはダメとは良く見るのですが、個別でindexをつけた場合でもorはダメなのでしょうか?
GROUP BY で質問 先頭2文字がA〜Zののものとそれ以外 というグループ分けを したい場合、どうしたらいいかな
>>343 index(a,b)
ってインデックスを作ればいいのでわ?
346 :
NAME IS NULL :2006/03/25(土) 21:02:53 ID:Kbd6Xz91
344 1列追加してA〜Zのレコードは’1’、それ以外は’0’の値にしてこれをGROUP BYの対象列にする これが一番てっとり早い
347 :
NAME IS NULL :2006/03/25(土) 22:34:50 ID:0QpbJoUh
>>345 ありがとうございます。出来ました。
でも、index(a,b)はマルチカラムインデックスになるので、orで繋ぐと無効になると思ってたのですが・・・。
何か私、勘違いしてますか?
>>347 「GROUP BY を使う」のと、「GROUP BY でインデックスが使われる」では意味が違うと思うのですが。
そもそも何がやりたいの?
本当は
>先頭2文字がA〜Zののものとそれ以外 というグループ分けを
>したい場合、どうしたらいいかな
ではないと思われるのだけど。
349 :
345 :2006/03/25(土) 23:15:47 ID:???
>>347 >orで繋ぐと無効になると
そういうものだったのね。知らんかった。
どっちにしろMySQLでは同時に使えるインデックスの数は一つなので、
where a=1 or b=11
の場合は
index(a,b)
とするしかないと思いますよ。
index(a),index(b)としても、
インデックスが効くのはa=1の走査だけで、or以降のb=11は全走査になってしまう。
この近辺の事情は「なんで?」って聞かれてもワカランので、
本読んだ方が早いかも。
MySQLの性能で困ったらまずこいつがおすすめ↓
実践ハイパフォーマンスMySQL
http://www.oreilly.co.jp/books/4873112095/
350 :
344 :2006/03/25(土) 23:19:08 ID:???
>>348 >>347 ハワタシチガウデス。
>>346 すでに動いてるデータベースなのでテーブル構成とか変えたくないし
なによりデータを追加するロジック部に手をつけたくないのです。
ええ、旧態依然とした超保守的な運用です。
>>350 A-ZとA-Z以外を抽出するSQLを
2回に分けて発行してみるとか。
レコードのマージは自力で。
>>350 GROUP BY col RLIKE "^[A-Z][A-Z]"
遅いと思うけど。
354 :
344 :2006/03/26(日) 00:21:37 ID:???
>>351-352 ありがとう!おかげで解決しました!
SELECT MAX(hip) AS maxhipsize, MIN(hip) AS minhipsize,
IF ( LEFT(name,2) BETWEEN 'aa' AND 'zz', LEFT(name,2) , 0 ) AS kasira
FROM chugaku GROUP BY kasira;
GROUP BY の後ろにエイリアスが使えるのがポインツなのね。
IFの正の項がちょっと違うのは 当初
頭文字2文字でさらにグループ分けをする という発展系を
考えていたから。ついでに実装できた。
355 :
NAME IS NULL :2006/03/26(日) 01:11:53 ID:sAZz4prI
>>349 有難うございます。その本こんど買ってみたいと思います。
>>353 インデックスは利用されてました。でも、一つだけ(>_<)
------------------------
create table test(
a int,
b int,
index(a,b),
index(b)
);
insert into test(a, b) values(1, 11);
insert into test(a, b) values(2, 22);
insert into test(a, b) values(3, 33);
explain select * from test where a=1 or b=11;
------------------------
上のような形でテストしましたが、以下の結果になりました。
(1) index(a),index(b)
⇒ インデックスは一つも利用されない
(2) index(a,b)
⇒ aだけインデックスが利用される。
(3) index(a,b),index(b)
⇒ aもbもインデックスが利用される?
※ possible_keyは "a,b" だけど、keyには"a"しか出てこない
> possible_keyは "a,b" だけど、keyには"a"しか出てこない これでどうして両方利用されるって解釈になるんだ
>>356 ?がついてるだろ。
これは疑問形だよ。 彼の魂の問いかけだよ。
>>355 の心の叫びだよ。
曲に乗せておおくりします
360 :
NAME IS NULL :2006/03/26(日) 23:44:31 ID:Yd/vBUAb
データベース名で使用できる文字を制限する方法ってないでしょうか?
ソースを弄る。 レンタルでもしたいのでしょ?
>>361 無いような気がする。
DB作成用のフロントエンドを提供して、それを介してのみ
作成させるようにするしかないんでないかい。
>>359 ヒント
グローバルレベル
データベースレベル
質問です。 MySQL5.0.19 をrpmインストールしたのですが、システムテーブルのインストー ルに失敗します。 "Installation of system tables failed!" 原因追求のため、mysql_install_db を手動で実行したところ、mysqld が働い ていないようなのです。 /usr/sbin/mysqld --bootstrap --skip-grant-tables --basedir=/ --datadir=/var/lib/mysql --skip-innodb --skip-bdb --skip-ndbcluster --max_allowed_packet=8M --net_buffer_length=16K < test.sql -- test.sql の内容 -- use mysql; set table_type=myisam; CREATE TABLE test ( Host char(60) binary DEFAULT '' NOT NULL); -- -- これを実行しても、/var/lib/mysql/mysql の内容は少しも変化がありません。 これは一体、何が原因なのでしょうか?
再起動すれば動くと思う。 rpmで入れただけじゃ動かんよ。起動しないとな(w
367 :
NAME IS NULL :2006/03/28(火) 21:02:16 ID:Md72ukln
質問です。 FULLTEXTインデックスを使用するため、MyISAMテーブルの使用を考えています。 ただ、テーブルへのアクセス頻度がとても高く、毎秒600クエリの発行が行われていて、 そのうちの約30%はINSERT/UPDATE/DELETEです。 MyISAMテーブルはこの負荷にも耐えられるでしょうか??
ISAM可愛いよぼくのISAM
>>367 それだけ案件がわかっているのなら、
実際に実行してみるのが早いんじゃね?
DB鯖のスペックにもよるしねえ。 ベンチマークしてみてくれ。 不安ならオラクル代理店に相談して言いなりに買い込んでくれ。
すみません、質問です。 id fruit price 1 りんご 100 2 オレンジ 50 3 ぶどう 150 4 メロン 600 5 すいか 500 値段の高い、上位3つの果物の平均を求めるには どうしたらよいでしょうか。 よろしくお願いします。
>>367 自分のクエリをベンチ取ってみれば?
200件/sの更新はやったこと無いんでよく分からなすなぁ。
70%のviewもどんなクエリか、鯖スペもよくわからんし。
あと、FULLTEXTインデックスが効果有るのは英文のみね、念のため。
>>367 >毎秒600クエリの発行が行われていて、
>そのうちの約30%はINSERT/UPDATE/DELETE
MyISAM云々よりも、Disk I/O性能をどう上げるかによる気がする。
MySQL自身が自分にきたクエリを勝手にテーブルつくってそのクエリをログったりとかする構文てないですか?
>>374 意味不明。クエリーログとかレプリケーションとか。
なんで構文でON/OFFさせたいの?
MySQLないですか? まで読んだ。
>>371 一発じゃ無理っぽくない?
とりあえずバストの大きい順に並べて
上位3つを取り出して
あとはスクリプトで処理とか
>>371 sub selectが使えるバージョン(=4.1以上)限定だが
select avg(price) from (select price from hoge order by price desc limit 3) as v;
ちょっと特殊なアプリで、テーブル名をユーザから与えられた上で、 特定の SQL を実行するのですが、この場合テーブル名のエスケープ処理の セオリー等あるでしょうか? 今のところは、必ずダブルクォーテーションで囲んで、テーブル名に ダブルクォーテーションがあったら重ねる、と言う程度しか行っていないのですが…
特殊というか、危険で間抜けで間違ったアプリ
うーん。DB アクセスを行うアプリケーションを作るアプリケーションといいますか、 どうしてもテーブル名が任意ってのが要件そのものなのですよね。 あ、ユーザと言うのは不特定多数のユーザではなくて二次的な開発者になります。 一般的にバインド変数なんかが使えない状況ってどうしてるものなのでしょうか?
>>379 名前は任意だとしても、クォーテーションや
支障がありそうなのが混じってたら通すことより弾いたら?
あと``で括っとけ。
>>382 「'」はクォーテーションだけど、「`」って何て言うの?
バッククォーテーション、アクサングラーブ、グレイブアクセント
のび太の恐竜2006
のび太の恐竜2006rm -fr /のび太の恐竜2006
name, date, hipsize というテーブル chugaku があるとき name が重複しているので、重複をなんとかしたいです。 このとき、ついでに 一番最新の date のときの date と hipsizeも取得したいです。 SELECT name,date,hipsize FROM chugaku GROUP BY name ORDER BY date とやってみたものの、hipsize が date と無関係に採用されてしまって 困っています。 これってどうしたらいいのかな
>>387 dateはたいがい予約語だったりするのでこういう命名はやめましょう
人間の誕生日なら、birthdayあたりでいいんじゃねーの? 製造年月日ならcreated
390 :
387 :2006/03/30(木) 02:03:09 ID:???
すみません。date は誕生日とかではなく サイズを測定した日時です。 何日かおきに測定しているのですが、全員の測定サイズの 最新分を一覧したいんです。
centos 4.3をつかっています(mysql-4.1.12)、文字化けを解消したく mysql-4.1.18のsrpmを拾ってきて centosのspecをつかいビルドしましたが、make testでmysqldumpの 所でエラーになってrpmが作れません。 make testって必ず必要でしょうか。
>>390 =387
まずはdate=>mdate(measured date)とするとして。
SELECT name, mdate, hipsize
FROM chugaku
WHERE (name, mdate) IN (
SELECT name, MAX(mdate)
FROM chugaku
GROUP BY name )
でどないでっしゃろ。相関は避けてみた。しかし複数列のINが使えたっけ…
使えないときは
SELECT name, mdate, hipsize
FROM chugaku a,
(SELECT name, MAX(mdate) AS max_mdate
FROM chugaku
GROUP BY name) b
WHERE a.name = b.name AND a.mdate = b.max_mdate
としてみるとか。しかしFROM句に問い合わせかけたっけ…
使えないときはVIEWを使うとか工夫してください。
>>390 そもそもnameをユニークにしていないオマイが悪い
ユニークにすれば解決するわけじゃないと思うのだが
計測する度にその日付とサイズが追加されてるテーブルってことだろ? だから名前毎の最新日付を一覧するだけの、単純なviewじゃん。 名前は正規化するべきだよな。
hipsizeとかchugakuとかあると、みんな優しいな。
>>396 このスレのみんなは女児が絡まなくても優しいよ。
ちなみに私はたくさんの人からユニークな顔ですねと言われます
ねらーにロリコンが多いのは昔からの伝統。
>>399 普段から2ch語を連発していたり、
仕事中に2chブラウザで2chを見てたりするような奴には
確かにロリが多かったね。
>ロリが多かったね。 そりゃ、すごい
>>377 ,378
レスありがとうー。使わせていただきます。
女の子が出てくるようなアニメのスレが充実してるしなあ。 にちゃん=ロリコン掲示板。
おまえら、どこにも女児とは書かれてないぞ 男児のhipsizeかもしれんぞ で、ちょっと聞きたいんだが、 auto_incrementで実際に使われるカウンタを編集することってできる? show table statusで見るには見れるが、書き換える方法って無いよな多分・・・・・
>404 alter table
>>406 さんくす
ALTER TABLE 使って変更する方法がALTER TABLEの項目に書かれてた。
でも、ALTER TABLEはテーブルコピーなんだよな・・・・・・・orz
やっぱAUTO_INCREMENTやめるか
408 :
NAME IS NULL :2006/03/31(金) 20:05:33 ID:vrbQSusH
大きな集合をorder byして オフセットに大きな値を指定して取り出すと、 どうしても遅くなってしまいますよね。 select * from hoge_T order by id limit 200000,100 等。 たとえmogeにインデックスを張っていても 数秒かかってしまいます。 ひとつの集合を、そんなに大きくならないようにするしか ないのでしょうか。 たとえばメーリングリストシステムのようなものでは、 集合の要素数の上限に制限を設けることはできません。 いったいどうやって処理しているのでしょうか。
409 :
408 :2006/03/31(金) 20:06:34 ID:???
moge→idでした
メールは遅延してもいいと思うけど?
idに連番が振られているならwhere id between 200000 and 200099 でいいのでは。
412 :
NAME IS NULL :2006/03/31(金) 21:04:18 ID:U6Pwxkp0
MyISAMのことなのですが、 誰かがテーブルに書き込むと書き込みロックを取得され、読み込みは書き込まれるまで待機、 もしくは非常に長い読み込みの時に、行を追加したい場合、読み込みロックが取得されているので書き込みロックが取得できず時間かかるのはわかっているのですが、 そんな矛盾を回避するにはどうしたらよいのでしょう。。 トランザクションを使えば平気なのでしょうか??
>>408 select * がどれほどの項目量がわからんが、
単純に、viewに現れるの文字量が多いと遅くなるよ。
>>412 書き込みをテンポラリテーブル使ってやるとか?
案件によるけど。
select birthday from maidcafe で、3月32日って表示されてしまうんですけど…
32日っち表示させる方がシステム的には難しいわな。 4/1だしな
as を使えば 4/1-->3/32 の変換は簡単。
my.cnfのdatadirを変更してから再起動すると Checking for crashed MySQL tables という表示がでるようになったのですがこれはなにか問題が発生しているのでしょうか? 一応普通にMYSQLは使えているのですが・・・。 DebianでMYSQLをインストール後すぐにmy.cnfを編集しました。 mysqlcheckなどを試してみたのですが直りませんでした。 アドバイスよろしくお願い致します。
>>418 my.cnfを書き換えて再起動前に、
元のdatadirの中身を新しいdatadirに全部写してる?
MyISAMだけ?InnoDBは使ってるの
はじめまして! 日本語関係の質問です。 サーバー GentooLinux2.6.11 CUIのみ MySQL4.1.14 クライアント WindowsXP SP2 JDK1.5 でクライアントからUTF8で日本語をINSERTしてからSELECTすると全部????になります。 my.cnfに設定が必要なのでしょうか? 設定例や参考になるサイトをご存知でしたら教えてください。
なるほどありがとうございます。いろいろググーてみたけど、いまいちだったのでいろいろ試してみて分かったらうpします。
winのjavaはデフォルトsjisだったと思う。 utfにするやり方はjavaスレで訊いてくれ。
>>428 意外と簡単で、鯖側とクライアントのcharsetあわせるだけ。
ていうかgoogleで検索したらMLのログがごろごろ出るんだが。
useUnicode=true
characterEncoding=charset
にするだけ。
windowsはsjisじゃなくてcp932で拡張文字が化けない。
〜とかもいける。
430 :
418 :2006/04/02(日) 01:33:21 ID:???
>>422 >>424 レスとんくすです。
はい、cp -rp で元の/var/lib/mysqlの中身を全てコピーしてます。
一応権限も確認してみましたが元の状態と同一でした。
InnoDBは使っていません。
ありがとうございました。解決しました。 Resolved: サーバー GentooLinux2.6.11 CUIのみ MySQL4.1.14 クライアント WindowsXP SP2 JDK1.5 でクライアントからUTF8で日本語をINSERTしてからSELECTすると全部????になります。 my.cnfに設定が必要なのでしょうか?設定例や参考になるサイトをご存知でしたら教えてください。 Resolution: JavaでJDBC接続先指定に?useUnicode=true&characterEncoding=UTF-8を追加 Connection conn = DriverManager.getConnection ("jdbc:mysql://172.25.0.99/english?useUnicode=true&characterEncoding=UTF-8", "root", "password" ); MySQLでmy.cnfを以下に設定する。 [mysqld] character-sets-dir = utf8 default-character-set = utf8 ※show create table <TABLE_NAME> でCHARSET=utf8じゃない場合はテーブルを作成し直す必要がある
>>433 リファレンスが体系的に編集されていて、MySQL関連のリファレンスとしては多分最高の分類。
Linux、Windowsの両者をカバーしているし、俺が長年手放すことのできない数少ない良書の一つ。
短所は
・題名どおりリファレンスに特化しているのでシステム構築法などは一切なし
・バージョン5の新機能ストアドやトリガに関することがらは一切なし
お主が実際にやることがDB管理なのか実装担当なのかアプリ開発なのかわからんので一概には
言えんが持っていて損はない。とくにコマンドラインを多用するようなら尚更。
あとはバージョン5対応の新版が出そうなのでそれまで待つかどうかといったところ。
435 :
NAME IS NULL :2006/04/03(月) 23:42:09 ID:MriyOhOm
度数分布表とかを出したいなと思ったんだよ? hipsize を 1cm刻みで集計したいんだが SELECT CAST(hipsize AS UNSIGNED) AS hips, COUNT(hipsize) AS hipcount FROM chugaku GROUP BY CAST(hipsize AS UNSIGNED); みたいに書くと、まあそれなりに表示されるけど 途中でhipsizeが飛んだりすると 並びが悪く 歯抜けになって度数がうまく並ばない。 これをなんかうまい方法ないもんかね
一冊でこれだってのはほとんど見つからないと思う。 winの本では、linuxで動かすのは厳しいと思う。 まあインストールドキュメントぐらい見てインスコ出来ないと本当は無謀なんだけど。 特に、大事な情報を扱うなら、業者に頼んだ方がいいよ。
それはMySQLの問題じゃなくて、そもそもデータベースが何なのかを知らないだけでしょう?
439 :
433 :2006/04/04(火) 21:42:50 ID:???
レスありがとうございます。かなり良さそうな本なので買っちゃおうかな と思ってるんですけど、Mysql5対応の新版が気になります。出るのは いつごろの可能性が高いんでしょうか?
SQLの練習用アプリとかないですか?
442 :
NAME IS NULL :2006/04/05(水) 20:49:14 ID:rU5gLVh0
同じデータを返すSELECT文をDISTINCTでグループ化する場合と、GROUP BY句でグループ化する場合とどちらが速度は速いのでしょうか?
>>441 あれで練習できるんですか?
よくわからんのですが・・・
どういう練習がしたいかだよな。 SQLも方言があるから、どれも使えるようにしたければどれも使ってみるしか無い。
Postgre というやつなんですが企業の研修で出てきてわけわかんなかったんで家で練習できないかなと
あ・・ごめんなさいスレ違いみたいですね
>>440 は取り下げます
447 :
NAME IS NULL :2006/04/06(木) 00:10:29 ID:FHxUcsgK
重いクエリを発行したら サイト全体が落ちたような重さになります。 こういう場合は対象範囲を絞って、 何度かに分けてクエリを発行するのが定石なんでしょうか?
449 :
435 :2006/04/06(木) 03:49:32 ID:???
今回のは少し難しかったみたいだな
>>447 CPUの使用率が100%になるパターン?
漏れは
where foo in ( select ...)
って書き方をして異様に重くなったことがあったんだけど
SQL文を変更して取り繕った。
451 :
NAME IS NULL :2006/04/06(木) 09:33:27 ID:qhNwdaaY
当方、SQLの練習中の者なのですが 私ではどうにも理解できないエラーが起こって困っています。 create table test( id text not null primary key, name text); とした際に、 ERROR 1170 (42000):BLOB/TEXT column 'id' used in key specification without a key length と表示されます。 この原因について、どなたかアドバイス等いただけませんか? MySQLのバージョンは5.0です。
>>451 主キーが文字列(長さが可変長のデータ)って
ヘンな気がしますが。
エラーメッセージを読むと「キーの長さを指定しないで使った」と言っているので
長さを指定(固定)すればよいと思われ。
453 :
451 :2006/04/06(木) 09:58:03 ID:???
解決しました。ありがとうございます。
textをcharにしてみたところ問題なく通りました。
textって、可変長なんですね…(..;)
>>452 さん、アドバイスありがとうございます。
主キーが文字列なのは私も気になっているのですが、
A-000のような形のキーを想定しています。
こういう場合、普通はどうするものなのでしょうか…?
>>453 “A-000”がアルファベット+数値という意味なら、別々の列にして複合キーにするとか。
もしくは“A-000”がもっと複雑なルールに基づくコードなら、固定長文字列(CHAR)にする。
で、可変長文字列なら、TEXTじゃなくてVARCHAR(n)を使います。
455 :
451 :2006/04/06(木) 10:24:57 ID:???
なるほどなるほど。 キーの例については、練習用なので内容に深い意味はないです。 GP-03でもARX-7でもなんでも対応できるようにと考えてみました。 サンプル丸写しよりは訓練になるかと思ってやってみたのですが。 どう見ても墓穴ですね…orz 他の項目も、textをやめてcharとかvercharで試してみることにします。 アドバイスありがとうございました。 精進します。
>>453 主キーは、その項目とは別に どうにかして整数にする癖を
付けるべき。 文字列では、他の表と関連づけるキーとした時
劇的なスピード低下を招く。
457 :
451 :2006/04/06(木) 10:47:33 ID:???
>>456 アドバイスありがとうございます。
とりあえず、オートナンバー振ってみます。
親切にどうもです。
試せ
, イ)ィ -─ ──- 、ミヽ ノ /,.-‐'"´ `ヾj ii / Λ ,イ// ^ヽj(二フ'"´ ̄`ヾ、ノイ{ ノ/,/ミ三ニヲ´ ゙、ノi! {V /ミ三二,イ , /, ,\ Yソ レ'/三二彡イ .:ィこラ ;:こラ j{ V;;;::. ;ヲヾ!V ー '′ i ー ' ソ Vニミ( 入 、 r j ,′ ヾミ、`ゝ ` ー--‐'ゞニ<‐-イ ヽ ヽ -''ニニ‐ / | `、 ⌒ ,/ | >┻━┻'r‐'´ ヽ_ | ヽ _ _ 」 ググレカス [ Gugurecus ] ( 2006 〜 没年不明 )
ひでー おまえらあれだろ、日常会話で 「へぇ〜、これ凄いですね。 いくらで売ってるんですか?!」 「ググレぼけ」 って、心の中で思ってるだろw
ググれとは言わないが、聞く前に必ず調ベろとは言います
>>461 会話の中で出てきた疑問だったら、そこまでは思わない。
調べる時間があったのに調べずに質問してきたら、この時間なんしてたの?って思う
まあ、言われるなりの理由があるってこった。
Q: MySQL でわからないことがあったら「まずはググれ」なんですか? A: そんなことないです。MySQL はドキュメントが予想以上にしっかりとできていますので。
, イ)ィ -─ ──- 、ミヽ ノ /,.-‐'"´ `ヾj ii / Λ ,イ// ^ヽj(二フ'"´ ̄`ヾ、ノイ{ ノ/,/ミ三ニヲ´ ゙、ノi! {V /ミ三二,イ , /, ,\ Yソ レ'/三二彡イ .:ィこラ ;:こラ j{ V;;;::. ;ヲヾ!V ー '′ i ー ' ソ Vニミ( 入 、 r j ,′ ヾミ、`ゝ ` ー--‐'ゞニ<‐-イ ヽ ヽ -''ニニ‐ / | `、 ⌒ ,/ | >┻━┻'r‐'´ ヽ_ | ヽ _ _ 」 マニュアル ミロー [ Manual Mirror ] ( 2006 〜 没年不明 )
魚を取ってあげるより、魚の釣り方教えた方が、 その人のためにもなるって事かな
フィールドの型を date にしたんですが、 select時にどう使えばいいんでしょうか? where hiduke < 2006-01-01 とか指定すれば2006年以前のデータの抜き出しと考えてよろし? 単純に演算子で使えるんでしょうか?
使えるけど、 2006-01-01 これじゃ2006ひく1ひく1だ where hiduke < '2006-01-01' こうかな
>>467 小学校のでの英語教育を義務化しましょうって事だろう。
MySQLはドキュメントが充実してはいるけど、4.1以降は日本語訳されてない。
英語って言っても難しい表現はほとんどないので、 中学レベルでも読めると思うけど。 それとつまずく人は4.1以前の内容でつまずいているような気がする。
ドキュメントがいきなり歴史と他RDBMSとの比較から始まり、ここで挫折する人が多いかと。
10行以上の文章は読めない軽度の文盲が多いからな。
本人じゃないけど、たぶん4.1「より後は」訳されてないって言いたかったんじゃないかな。 誤解うむから、5系は訳されてないって言ったほうがいいよね。
英語の前に日本語を勉強しましょうってか。
5系の日本語マニュアル まだぁ???
だっておまえら翻訳しても読まないから
こりゃまた痛いところを w
内容が理解出来ないってのもあるな。 有る程度知識が無いと理解出来ない記述が多い。
マニュアルはpostgresqlの方が読みやすいな。
PostgreSQLは激遅で使いものにならないから論外。
最近のバージョンは軽くなったとか聞いたけど、まだまだ重いの?>PostgreSQL マニュアルは……別にMySQLのも読みにくいとは思わないけど。 あ、フォントが小さいのはちょっと嫌かも。
>>484 PostgreSQL 8.1 なら select 以外は
MySQL5 より速くなっているよ。
486 :
NAME IS NULL :2006/04/10(月) 10:53:52 ID:W/8mHrFM
くだらない質問なんですが hoge1 hoge4 hoge10 hoge11 といったようなデータがあって、後ろの数字で降順ソートすると当然 hoge4 hoge11 hoge10 hoge1 となりますが、これを hoge11 hoge10 hoge4 hoge1 と降順ソートさせるやり方はあるのでしょうか?hoge001とかhoge011と数字の桁を揃える以外で。
>>486 ソート用の列を追加するのが考え方として素直だし
処理も速いと思いますが。
MySQLではINSERT文やSELECT文の実行時にはWRITEロックやREADロックが自動的に 取得されるみたいですが、それだとどうしてLOCK TABLES文やUNLOCK TABLES文が 存在するんでしょうか?
いまからつくるDBの文字セットはutf8_general_ciがいいですか?
492 :
491 :2006/04/10(月) 20:30:07 ID:???
eucでそのフィールドに”梶hを入力したら"?"になってしまいました。 鰍使うならばSJISかutf8にしなければならないのでしょうか。
>>492 SJIS(Shift_JIS)も駄目。Shift_JISにもEUC-JP
の定義に無い文字(NEC特殊文字)だからね。
正しくcp932かeucjpmsを使うか、UTF-8
494 :
491 :2006/04/11(火) 01:06:38 ID:???
>>493 さんへ
それがおかしいのです。
MySQL 3.23.42を使用しており、そこではeuc-jpをつかっていました。
そのDBのデータには”梶hが含まれており mysqldumpした後の
データをテキストエディタで確認したところちゃんと見えました。
MySQL 3.23.42が動いているマシンはコバルトでそのときにはeucjpms
なんてなかったと思います。
>>494 古いMySQLの場合と最近のMySQLでは動作が違うよ。
古いのは定義外の範囲もスルーするので実質eucjpms。
最近のMySQLは一度Unicodeの変換テーブルを通る際に
定義外のは除外する"正しい"EUC-JP。
最近のでも変換しないでスルー(素通し)するサーバオプションもあるけど。
>>490 SELECT時のは一時的なロックだ。
そして、LOCK TABLESは持続するロックだ。
ロケットで突き抜けろ。
497 :
NAME IS NULL :2006/04/12(水) 16:59:34 ID:5DH5/gM3
limit句についての質問です。 limit -1という句を記述したSQLを実行した場合、 以下の結果でした。 MySQL 4.0.26 ○ MySQL 4.1.7 × MySQL 4.1.15-log × この、limit句に-1を指定する場合の動作について書かれているサイトなどご存じないですか?
-1ってなんかキモイな、返る件数が-1?
サブクエリを使用して返ってきた値+パターンでの検索って可能なのでしょうか? SELECT field1 FROM table WHERE field2 = 'hoge' でxxxが返ってきたとすると、'xxx%'で検索するようなことがしたいです。 例えば SELECT * FROM table WHERE field1 = [(SELECT field1 FROM table WHERE field2 = 'hoge')+'%'] みたいな感じでやりたいんですが。
500 :
499 :2006/04/12(水) 18:50:38 ID:???
バージョンは4.1.14でした。 もし新しいバージョンで可能ならバージョン上げることも考えます。 お願いします。
ちゃんとorder byで指定しろよ。
ちゃんとちゃんとの味の素
505 :
499 :2006/04/13(木) 05:09:27 ID:???
自己解決しました。どうもただのスペルミスだったようです…。
通し番号が付いていないデータベースに対して 頭から一定数ごとにGROUP BYして集計したいとき どうしたらよいでしょうか SELECT AVG(hipsize) FROM chugaku ORDER BY name GROUP BY CAST(no/10 AS UNSIGNED); 実際のフィールドには出席番号noがないとき 10人ずつまとめたくてもまとめられないです 出席番号noを追加した仮テーブルをこしらえる ことが出来れば、それで多分解決するのですが もう少しスマートな方法はないものでしょうか
>>506 中学生のヒップサイズの平均を出して何に使うのかkwsk
アナル紳士としては興味を魅かれるところですね。
>>506 通し番号がないんだとしたら「頭から」っていうのはどうやって決めるの?
・データベースに複数のテストトピックがある。 ・テストトピックは3つの質問から成っている。 ・1つの質問には3つの答えがあり、そのうちの1つだけが正解である。 これを1つか2つのテーブルで作りたいんですけど、どう作ったらいいんでしょうか?
とりあえず、どんな項目が必要そうか書き出してみたら?
512 :
510 :2006/04/14(金) 20:24:30 ID:???
>>511 そうですね。
とりあえずtestテーブルとしてtestNo、testType、questionテーブルとしてtestType、question、answerを項目として考えています。
それでtestTypeをつなげてと考えているんですが、そうすると例えばtestTypeが「音楽」でanswerを3つ表示する場合、questionテーブルからのquestionがDISTINCTで表示されないんです。
これで正しいんでしょうか?
どうしても階層型の図しかイメージできないのでちょっと混乱してます。
どういうSQLでどういう結果が帰ってきたんだ? つか、スレ違いじゃね?
514 :
510 :2006/04/14(金) 21:01:07 ID:???
>>513 あ、スレ違いですか!?
どうもすいませんでした。
516 :
510 :2006/04/14(金) 21:08:09 ID:???
>>515 どうもありがとうございます。
そちらの方で1度聞いてみます。
517 :
506 :2006/04/15(土) 00:40:24 ID:???
>>509 とりあえずname順でかまいません。
AVG(hipsize)はとりあえずの例で
実際にはさらにMAX(hipsize)-MIN(hipsize)
などで hipsizeのばらつき具合の観察なども
行いたいと考えています。
最近 MySQL 4.19 を Windows XP の入っているマシンにインストール してみたのですが、困っていることがあるので、質問させてください。 例えば、1.5 GB ぐらいある容量の大きな *.sql ファイルを MySQL サーバーにロードしようとすると、相当な時間 (自分のマシンの場合一日以上) がかかるのですが、この処理をなんとか早くする方法/設定はないでしょうか?
519 :
518 :2006/04/15(土) 13:01:05 ID:???
何度もすみません。ちなみにロードは $ mysql -u root -p DBNAME < LOADFILE.sql でコマンドラインからやるようにしています
>>518-519 だーかーらー、Windowsなんて使っている時点でトロイと言う事に気づけよ。
まともに管理できないUnixよりか遥かまし。
UNIXをまともに管理出来ないのにWindowsなら管理出来るという事はありえない
>>521 はトイレの紙も管理出来てない
おう、そういえばトイレの紙を補充せねば
トイレ紙の管理は幼稚園児にも可能だが、
脳が老化し始めている
>>524 には肛門の管理が難しくなってきている
>>522 Windowsなんて使ったこともないし、使う気もないが、なぜUnixで管理できないと
Windowsで管理できるこということはありえないのかは知りたい
だが教えない
>>518 アドバイスにはならないが、試しに
$ mysql -u root -p でmysqlクライアントに入ってから、
mysql > use DBNAME
mysql > source LOADFILE.sql
で、やってみてくれ。
レコードの値を「変更」ではなく「入れ替える」ことはできますか? AレコードとBレコードの unique を定義しているフィールドで入れ替えを行いたいのですが、 まずAの値を取り出し変数に保存($A) 次にAに使用されていない値を UPDATE 〜 SET して 次にBの値を保存($B) Bに$Aを UPDATE 〜 SET 最後にAに$B を UPDATE 〜 SET かなり面倒(アホ)な処理をしていると思うのですが方法はありますでしょうか
530 :
529 :2006/04/16(日) 13:14:06 ID:8RWPZyZy
↑もし一度のクエリで不可能ならば、もっとスマートな処理法などを御教示お願いします。
>>518 「サーバにロードする」の意味が分からないけど、
INSERT を速くしたいならauto_commitをoffにするとか
一時的にINDEXを無効にしてINSERTが終わった後にINDEXを付けるとか
すればいいんじゃね?
532 :
518 :2006/04/16(日) 19:38:42 ID:???
>>皆様 Windowsを消去して、Linuxで再構築中です。 なんか、よそさうです。お騒がせしました。
_,.r::'::::::::::::::-.、 r::::_;:---、、;;::-'ー、ヽ /':::i' ヾi ,,.r、:::::::i .: ll rr;i:::,r:::::! _,,,__, _,,,..._ .l:i ヾ:r::;:-、:r i'tテ;:. i:'tテ:r i::ヽ `ヾ::rt' ´ ' l::. ´ !r' ヾ.ィ -、ノ:. l ./!、 ー-‐;':. / / ヾ ヽ、 ' / ∧ ヽ ` 7‐r_'/ヽ ,r ヽ、 ` <ニrヽ 〉 ,r' -、 ヾ il l、 r  ̄ t- ヾi: lヽ ホーソレデ[Edward Horsorde] (1765〜1822 ノルウェー)
みなさんに質問ですが、MySQLのインストールで linux:/usr/local/mysql # ./bin/safe_mysqld --with-mysql=usr/local/mysql と入力しMySQLサーバーを起動させたいのですが、 Starting mysqld daemon with databases from /usr/local/mysql/data STOPPING server from pid file /usr/local/mysql/data/linux.pid 060416 20:56:36 mysqld ended となってしまいます。どうすればサーバーに接続できるでしょうか? バージョンは PHP php-5.1.2 Apache 忘れてしまいました・・・ Mysql mysql-5.0.19 です。
, イ)ィ -─ ──- 、ミヽ ノ /,.-‐'"´ `ヾj ii / Λ ,イ// ^ヽj(二フ'"´ ̄`ヾ、ノイ{ ノ/,/ミ三ニヲ´ ゙、ノi! {V /ミ三二,イ , /, ,\ Yソ レ'/三二彡イ .:ィこラ ;:こラ j{ V;;;::. ;ヲヾ!V ー '′ i ー ' ソ Vニミ( 入 、 r j ,′ ヾミ、`ゝ ` ー--‐'ゞニ<‐-イ ヽ ヽ -''ニニ‐ / | `、 ⌒ ,/ | >┻━┻'r‐'´ ヽ_ | ヽ _ _ 」 ググレカス [ Gugurecus ] ( 2006 〜 没年不明 )
536 :
534 :2006/04/16(日) 21:50:00 ID:???
>>535 ググってみて一通り試してみたのですが駄目でした・・・。
540 :
NAME IS NULL :2006/04/17(月) 03:28:42 ID:tXWVnh6W
542 :
529 :2006/04/17(月) 11:59:27 ID:???
>>529 の解決方法ありましたら宜しくお願いします。
>>529 そのアホなやりかたしかねーんじゃねーの。
普通DBは並びなんてかんけーねーし。
並びは order by で作る物だから、並びの重みを定義する
フィールドでも作って、その値を変えたりするべき。
544 :
NAME IS NULL :2006/04/17(月) 15:11:13 ID:bdLyXr1W
>>543 並び(ORDER)ではなく、AとBとで値を入れ替える方法です。
そのフィールドはユニークになっているので、今は下のような流れで変更しています(PHP)
SELECT test FROM table1 WHERE id = $a;
UPDATE table1 SET test='0' WHRER id = $a;
SELECT test FROM table1 WHERE id = $b;
UPDATE table1 SET test=$a_tmp WHRER id = $b;
UPDATE table1 SET test=$b_tmp WHRER id = $a;
>>541 ホストAでMySQLが動いてて、ホストBでもMySQLが動いてて
両者はNFSで同じデータベースファイルを共有してるって?
そんな動作はMySQLは保証してないんと違う?
クエリキャッシュでテーブルが更新云々言ってるのは、
一つのMySQLサーバプログラムの中の話だと思うが。
>>544 AとBってなんだよw 定義が絞れてないぞ。
レコード同士の特定フィールドの値を入れ替えるんっしょ?
2,3行目を一体化できる、とか細かいのは置いといて、
結局SQLではそういう処理手順でしょ。
>>545 ぁ、DBを一度に見に行ったらマズイとは思いつつのことです。
Flushでキャッシュをクリアして、もう一度HDDを読みに行ってくれるなら
2台でアクセスしても問題ないのかなぁと思って。
そうするとやはり実際にクリアしてるってわけではないのか?
テキストファイル(日本語2バイト文字)を読み込み、 全ての異なる語を一個ずつmysqlデータベースに入れていく (select .. where word like "word" で一致がなければinsert )という処理をやっているのですが、 Windows(mysql5.0.0-alpha-nt)とLinux環境(mysql4.1.12)で、 同じ文字コードで同じテキスト内容のファイルなのに windowsでは目で見て正しい結果が得られるのに、 linuxの方では ほとんどの語が like演算で一致とみなされてしまうのですが、 これを何とか全ての語を完全に区別することはできないでしょうか?
質問させてください。 最近データベースを扱いはじめ、こりゃいいとハマってるものです。 ただ、まだ通常のアプリケーションのクセが抜けず、DB的な思考ができていないようです。 (以下、相当低レベルな質問だと思いますが、ご容赦ください) ブラウザゲームを作っており、シナリオがどれくらい進行しているかのデータをユーザーそれぞれに持たせています。 1人256個のフラグを持たせ、その何番目のbitが0だ、1だという状況を見てシナリオが進みます。 私は ・256bit分つまりintを8つ持たせ、それぞれ flg_0, flg_1 ... flg_7とする という実装をしました。 36番目と128番目のフラグが立っているユーザーを検索〜といった時は、 $data[1] = 0x0000008; $data[4] = 0x0000001; // その他のdata[x]は0だと思ってください $data[0] = flg_0 & $data[0] AND $data[1] = flg_1 & $data[1] ... AND $data[7] = flg_7 & $data[7] というような条件文で検索しています。 ですがこのやり方、印象的に「データベースっぽくない」と思っています。 そこで、いわゆるデータベースっぽいやり方はどういうやり方なのでしょうか? ■1 [account_id][on_flg_number] というフィールドで作られたテーブルをつくり、最大「ユーザー数×フラグの数」個データが入るつもりでやる。 account_idもon_flg_numberも整頓されているのだから検索は早い? ■2 [account_id][flg000][flg001][flg002]......[flg255]というフィールドで作られたテーブルをつくる。最大「ユーザー数」個のデータが入る データ数がユーザー数分なので許容範囲? phpMyAdminなどを使った時、横に長くてやってられない…。 1がデータベースっぽい気がします。いかがでしょうか?
>>550 プラグが256全て同列なら「2」で良いんじゃない?
phpMyAdminの表示なんか関係ない。
ってかビットフラグの延長で考えてると大変かも。
リレーショナルDBの利点を有効に使えるようなプレーヤー管理を考えるべき
いや。流石に256こものカラムがあるテーブルは、保守時にわずらわしすぎるだろう
>>550 データベースらしいといったら「2」だと思うけど、
ゲームらしさからなら、1フィールドに「復活の呪文」を格納。
最後はアプリ側の都合のほうで決めればいいんでね?
好きにしてくれ。
>>554 え、RDBMSっぽいのは1でしょ。
onのトコだけinsertしとけばいいんじゃね。
>>551-555 みなさん、アドバイスありがとうございます。
「これ!」というセオリーはないみたいですね。
もう少し考えてみます。
何か決め手を持っていらっしゃる方がいましたら、レスしていただけると幸いです。
>>555 俺も1だと思うなぁ。 2は、拡張や保守の面で
問題出てくる様に思うんすけど。
>>553 のSET型を使えるならそれでいいし。
>>555 少し違う話だけど、以前に売上集計のテーブルを作った時に
商品コード→月1売上→月2売上→月3売上→月4売上→月5売上→月6売上
というように定義しましたが、その後半期決算から年間決算に以降して大後悔
商品コード→年月→売上高 に苦労して直しました。
属性が変更になる可能性のある要素をフィールドで固定すると後で大変です。
従って「1」がおすすめ。
>>550 2の方法は、どちらかというと自分でバイナリデータを
設計する様な場合によくやる方法ですね。
RDBMS では、1ですよ。
皆様、本当にありがとうございます。 色々な意見がでてきて大変参考になっています。 そもそも全てのプレイヤーがフラグをONにできる(ゲームをやりこむ)わけではなし、 1で設計を検討してみようと思います。 ただ、SET値というものもおもしろそうです。こちらもちょっと試してみようかと思います。
自然にできるこのファイルはなんですか? /var/lib/mysql/ホスト名-bin.001 /var/lib/mysql/ホスト名-bin.002 /var/lib/mysql/ホスト名-bin.003 /var/lib/mysql/ホスト名-bin.004
>>561 更新クエリのバイナリ形式ログ。
不要なら、my.cnfから log-bin をコメントアウト。
mySQLのデータをメンテナンス出来る便利なツールってないですか? QueryBrowserというものを使ってみたんですが日本語が扱えないし、 コマンドプロンプトは使い勝手が悪いし。。 なにかオススメがあったら教えてください。
564 :
↑ :2006/04/20(木) 17:52:41 ID:???
ちなみにWindowsです
>>563 Navicat。
無償ならhttpdとPHP入れてphpMyAdmin
>>565 サンクスです。
httpdもphpも入ってます。試してみます。
567 :
NAME IS NULL :2006/04/20(木) 23:05:11 ID:7lBM+aBO
mysql 4.1.xです。はまっています。ご教授ください。 ---------------- 犬 あか 犬 あお 犬 きいろ 犬 しろ . . 猫 あか 猫 あお 猫 きいろ 猫 しろ . . ---------------- といったデータだとします。 これを、生き物単位では最大3件までの queryを出したいのですが、 どのようなsqlにすれば良いでしょうか?(query速度が要求されています。) つまり、以下のように出したのです。 ---------------- 犬 あか 犬 あお 犬 きいろ 猫 あか 猫 あお 猫 きいろ 猿 あか 猿 あお 猿 きいろ ---------------- よろしくおねがいします。
569 :
NAME IS NULL :2006/04/21(金) 02:45:30 ID:pubMybd7
レコードの中の共通の単語を抽出したいんだけど 1,サンマの塩焼き 2,サンマの刺身 3,サバの味噌煮 4,おいしいサバ煮込み たくさんあるレコードの中から共通する単語 この場合、サンマとサバを抽出したいんだけどできますか
570 :
569 :2006/04/21(金) 02:47:16 ID:pubMybd7
ごめん続き 抽出する単語はこっちは知らなくて、 あくまでも複数共通する単語を抽出する事はできるかって事です
>>569 抽出する単語をこっちがしらないんなら
データベース的に検索できるわけなかろうが
テキストから語を抽出したいなら茶筅でもつかっとけ
>>570 それは データベースが受け持つ様な処理じゃないよ
574 :
NAME IS NULL :2006/04/21(金) 12:20:20 ID:kfIKfq3C
初めまして。 LinuxにMySQLを入れてphpmyadminで管理したいと思っています。 MySQLをソースからコンパイルしてインストールした場合、 phpmyadminの「Language」の設定に「Japanese(ja-sjis)」が選択できるのですが、 ディストリビューション付属のRPMで入れると「Japanese(ja-sjis)」の選択肢が無くなってしまっています。 FedoraやCentOS等色々試したのですが、 どれもRPMで入れるとダメでした。 ソースからインストールしたときのconfigureのパラメータは --prefix=/usr/local/mysql --with-charset=ujis --with-extra-charsets=all --with-mysqld-user=mysql でした。本の受け売りなので詳しい意味は分かってません・・・(^^; ディストリ付属のRPMからインストールしたときに phpmyadminで「Japanese(ja-sjis)」する方法はあるのでしょうか? どなたかご存知の方がいらっしゃいましたらよろしくお願いいたします。
>>567 無理。どうしてもというなら
犬猫猿を抽出し、今度は
犬猫猿ごとにSELECTする
しかないです
早めに止めを刺しておいたほうが良いんじゃ w
Linux板のFedoraやCentOSスレで訊いたほうがいいよ。 フェッチしといてアプリケーション側で操作すべきだよな。 3つを選ぶための一意に決まる条件も示されてないし。
ジョジョビジョバァ
580 :
567 :2006/04/21(金) 21:29:53 ID:6JOh7n4Q
ここには何度か助けられていてまさにエスパーやドラえもんです。はい。 無理っぽいです・かね。むちゃくちゃな量なのでフェッチは厳しいです。 3つを選ぶ条件は fulltext-search のスコアの上位順で、あるカテゴリ毎 (例では生き物)に出す個数を制限したいんです。
phpmyadminて何故日本とかフランスとかIT並進国でだけ人気があるんだろう?
並進国ってなんだ 米は?
>>567 お前はLIMITも知らないのかと小一時間(ry
SELECT 生物名 FROM テーブル GROUP BY 生物名;
の結果を配列にしといて、その結果を使って
SELECT 生物名,色 FROM テーブル WHERE 生物名 = 配列[i] ORDER BY スコア LIMIT 3;
でおk
584 :
567 :2006/04/22(土) 12:46:17 ID:/mwJR2U/
>> 583 いや、速さが必要なので1度のqueryでできればなぁと。 575 さんと同じ見解ですね。どうもでした。
>>584 UNION使えば1回のクエリで結果を得られるよ。
だからといって速いとは限らないが。
#クエリの数が少なければ速いなんて考えてるアホは減らないのね。。。
MySQL 4.1.15 (XP) text型の所に文字列を入れようとしているんですけど、教えてください。文字列はシングルクォーテーションで囲んで 入れるじゃないですか。その時にその文字列の中にシングルクォーテーションがある時はどうすればいいんですか?
バックスラッシュでエスケープするんじゃなかったっけ? \' みたいに。
>>587 Query Browserからやってみました。なるほど。有難うございます。
Cでの接続が出来た。当たり前だけど、ちょっと感激。
ちょっとした質問なんですが、tableのフィールドの順番って何か気をつかってますか? 今趣味でDBの設計をしているんですが、みなさん何かポリシーがあるのかなぁーと。
>>591 マジっすか!
index系ははじめの方とかそういうのもなしですか?
1番目がタイムスタムプ 2番目がauto incrementのなにか 3番目以降てきとう
>>593 そういうのもないんじゃなかったっけな。
他社のDBによっては、PrimaryKeyは先頭からの連続する
項目に限る とか有ったりするけど。
適当に、名前の次にふりがな、とか後でメンテし易そうな
順番に並べときゃいんじゃない。
>>594 1番目がタイムスタンプなんて珍しくねーか?!
マジで適当なんですか! 1番目は、プライマリキーがあるなら、プライマリキーってのは標準かと思ってた… あとは、適当か…
597 :
NAME IS NULL :2006/04/23(日) 17:35:46 ID:14gddPqI
MySQL5.0なんですが CentOSで 文字コードの変更を行いたいのですが /etc/my.iniに設定ファイルが ないのですが、MySQL5.0では違う場所に iniファイルがあるのでしょうか? 教えてください。エロイ人たち
CentOSのインストール方法に依存するから、リナ板のCentOSスレで訊いたら?
600 :
591 :2006/04/23(日) 17:48:55 ID:???
>>592 まじ
あっ、でもPrimaryKeyは先頭。
他は本当に徒然なるままに、、、
掲示板のテーブルで table1 (post_id,post_date) table2 (post_id,post_text) 同時にINSERTしたいのですが、どのようにすればいいでしょうか? 2回にわけてINSERTしようと考えましたが、post_idがauto_incrementであるため、 タイムラグが起きるとちぐはぐになる可能性があると思いました。 よろしくお願いします。
>>597 もしかして、my.iniではなくてmy.cnfではない?
>>601 auto_incrementやめたら?
>>603 よ、予想外の答え…なるほど。
auto_incrementを使わない場合は、
INSERT table1 INTO VALUE( (SELECT post_id FROM table1) , ???)
あー、わかんないです…
605 :
601 :2006/04/23(日) 18:08:09 ID:???
auto_incrementを使わない場合のプライマリキーの整合性を取る方法って
どうやるのが一般的ですか?
思いついたのは、一旦LOCKしてから、SELECTで一番最新のprimary keyを取ってきて
+1 してINSERT, そして、UNLOCK
でいいんすかね。
それとも
>>604 みたいにSQL内だけで解決する方法があるのでしょうか?
606 :
603 :2006/04/23(日) 18:08:59 ID:???
>>604 SQLだけで解決しようとしないで、アプリ側でpost_idを生成して、
INSERT table1、、
INSERT table2、、
これが一番簡単でない?
>>605 一般的かどーかしらないけど、
テーブルのカウントをとって、+1をしてINSERT というのをよく使う(俺は)。
>>604 あらかじめ現在時刻とプロセスIDか何かで、ユニーク値を用意しておけばよい希ガス。
算出方法が思いつかないのなら、さいあく整理番号を記録したテーブルを用意するとか
方法はいくらでもある。
>>606 ,
>>607 これだと、多数のユーザによってほぼ同時に処理が発生した場合、同じpost_idが
生成される可能性があるとおもったんですけど、違います??
610 :
601 :2006/04/23(日) 18:24:35 ID:???
>>601 table1 (post_id,post_date,post_text)
でテーブル一つにすればいいじゃん
612 :
601 :2006/04/23(日) 18:31:38 ID:???
多分これっぽい気がする
INSERT INTO foo (auto,text)
VALUES(NULL,'text'); # generate ID by inserting NULL
INSERT INTO foo2 (id,text)
VALUES(LAST_INSERT_ID(),'text'); # use ID in second table
>>611 一つから2つにしようとしているので…
>>609 待たせとけ。つーか、そんなに待たないでしょ。
post_idの作り方だと思うけど。アプリ側は並列に走る訳ではないよね?
LAST_INSERT_ID() は、他のテーブルへ参照キーとして登録するのは いいと思うんだけど、+1して同じテーブルにユニークキーとして追加 ってのはどうかと思うんだなぁ。 その間に追加されてる可能性は十分あるし。 やっぱ、一意のID発行窓口となる様な プログラムかなんかを別途用意して、 そこからキーを受け取って来る様にするべきだと思うねぇ。
616 :
610 :2006/04/23(日) 23:29:32 ID:???
>>613 待たせる = ロックということですよね?
アプリは、不特定多数が使うWebアプリなので下手するとデータに不整合が
>>614 ちょっとわからないです…
>>612 それでやっぱりいいんですね。
自信がなくて。
MySQL5.0をFedoraCore5に入れて 文字コードを以下のように設定しました。 Server characterset: utf8 Db characterset: utf8 Client characterset: utf8 Conn. characterset: utf8 windowsクライアントからtelnetで操作するときに、 SJISとEUCとJISしか文字コード選択枠が無く、 utf8は文字化けしてしまいますが、 これを解決するにはどうすればいいでしょうか? それとも telnetで操作するにはDB側の文字コードがSJISとEUCとJIS に限定されてしまうのでしょうか?
>>617 telnetなんて平和な時代の遺物のことはとっとと忘れて
utf8対応のsshクライアント使ってください。
620 :
617 :2006/04/24(月) 20:55:23 ID:???
>>618 >>619 なるほど、そういうことかぁ〜。
ちまみに、
LOAD DATA LOCAL構文で、
クライアントPCからホストPCのMySQLへデータを追加する際に、
文字コードUTF-16で書かれたdata.txtファイルを
自動的に文字コードShift-JISに変換して格納したいのですが、
技術的に可能でしょうか?
もし可能でしたら
その方法を教えてください!
csvファイルを保存するときに、 文字コードを指定する方法ってありますでしょうか? マクロのが書けるので、方法あったらおせーてください!
622 :
621 :2006/04/24(月) 21:49:20 ID:???
PHPからデータの追加更新に関してお尋ねします。 現在は、主キーで引っ掛けてSELECTして、 データが存在していればUPDATE 存在していなければINSERT としています。 これをREPLACEで一発でやるのとでは、どちらが良いのでしょうか? ちなみにデータは1レコードあたり5カラム程度です。
>>623 replace だと delete してから insert することになる。
myisamだと両方が排他ロックをかけるね。
select → update だと
select に関しては共有ロックだね。
update は排他ロックだね。
ただし、select が終わった直後に他が更新して、
その後更新することもありうる。
innodbだと両方ロックは同じ。
ただし、後者はトランザクション使えるので、
データの整合性は保てる。
カウンタなどのあまり厳密でなくていいデータなら、
後者のほうが速い感じはする。
厳密な整合性が必要なら、innodb でトランザクションかなー。
関係ないけどjavaだと、update したときに更新された件数を返すから、
それが0のときは insert とかできたりするけど、やってることは同じだねー。
MySQL5.0 ですが、新たにWebアプリを立ち上げる場合、4.0から乗り換えても大丈夫でしょうか? 4.1のときは、日本語の問題がぼろぼろだった気がするので、不安です。
MySQLは大丈夫ですが、あなたの脳がぼろぼろではないかと心配です
>>615 LAST_INSERT_ID()ってスレッド変数で記憶してるの?
そんなわけないよね。
だったら
>>614 がいってるように
>>612 はアトミックにやらないと不整合が起きるのでは?
629 :
601 :2006/04/25(火) 23:14:05 ID:???
>>628 不勉強で申し訳ないのですが、アトミックにやるってどういう意味ですか?
マニュアルを見たところセッションごとに保存しているみたいなことが書いてあった
ような…
テーブルのフィールドに途中からインデックスをつけることって問題になることって ありますか?
>>628 接続毎に記憶<LAST_INSERT_ID
原子力的にやるんだよ。
DBD::mysqlのインストールで詰まっています。
install_driver(mysql) failed: Can't load '/root/.cpan/build/DBD-mysql-3.0002/blib/arch/auto/DBD/mys
ql/mysql.so' for module DBD::mysql: /root/.cpan/build/DBD-mysql-3.0002/blib/arch/auto/DBD/mysql/mysql.so: undefined symb
ol: mysql_stmt_free_result at /usr/lib/perl5/5.8.0/i386-linux-thread-multi/DynaLoader.pm line 229.
CPANからのインストール時のコンパイルで、以上のようなエラーが出てしまい、失敗します。
/root/.cpan/build/DBD-mysql-3.0002/blib/arch/auto/DBD/mysql/mysql.soファイル自体は、この位置にちゃんとあります。
そこで、
ttp://perldoc.jp/docs/modules/DBD-mysql-2.1026/DBD/mysql/INSTALL.pod 上記の資料を見るなどして、libmysqlclient.aやlibmysqlclient.soを/usr/lib/mysql以下に置くなど
いろいろやってみているのですが、どうしてもうまくいきません。
どなたか、アドバイスを頂けないでしょうか?
よろしくお願いします。
>>663 おくなら/usr/lib/mysqlじゃなくて/usr/libでそ。
というか、ちゃんと環境書けよ。そもそもどーやってMySQL入れたんよ?
ま、rpmとか使って入れたほうがいいんじゃね?
MySQL4.0.25、MyODBC3.5.11-2、Access2000で 文字列の最後が次の文字のどれかだと更新できないって のはもうなおってるんでしょうか? ― ソ Ы 噂 浬 欺 圭 構 蚕 十 申 曾 箪 貼 能 表 暴 予 禄 兔 喀 媾 彌 拿 杤 歃 濬 畚 秉 綵 臀 藹 觸 軆 鐔 饅 鷭 最後に全角スペース付け加えれば更新できるけど 根本的になおして欲しいなぁ MySQL5.0.09でもダメだったし
639 :
NAME IS NULL :2006/04/27(木) 18:16:10 ID:mxyiUKqr
mysqlコマンドライン上から mysql -u*** -p*** < ./sql.txt で実行しても、 ERROR 1064: You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '<br /> <b>Fatal error</b>: Maximum execution time of 300 secon と蹴られてしまいます。 実行時間を設定することはできないのでしょうか? ちなみにsourceからやっても同じでした。
640 :
NAME IS NULL :2006/04/27(木) 20:54:48 ID:pAqBPqZq
ここはひどいインターネッツですね
>634 すみません。 環境は、RedHatLinux 9 MySQL自体は、MySQL ABから取ってきたtar.gz形式のパッケージを、/usr/local/に展開しています。 rpmでは、MySQL本体も含めて、うまく入らなかったので。
>>641 頭悪いうえに師匠も友達も居ないから2chに質問したんですね?
いえ、いいんです。あなたを責めているわけではありません。
ただちょっと確認してみたかっただけなんです。
./configure make make install
mysql(5.0.19-nt)の言語をujis、接続照会順序をujis_japanese_ciにしてやってるんですが、 text型のフィールドに日本語を入れると #1406 - Data too long for column 'comment' at row 1 となってデータが入力できません。 なぜか照会順序を適当な他言語にしたりするとエラーがでなかったりします。 これはどうすれば解決できるでしょうか?
投げている日本語がujis以外だったりして
phpMyAdminとブラウザの文字コードもEUC-JPですし、 EUC-JPのスクリプトから入れた場合も同様なので、それはないのではと思いますが。
5.0.20a-nt です。 double 型カラムで、そのカラムの値をWHERE句で指定してもヒットしません(floatでも同様でした)。 例えば次のようなテーブルを作り、 CREATE TABLE `test` ( `id` decimal(10,0) NOT NULL default '0', `n` double default NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='InnoDB free: 9216 kB; InnoDB free: 9216 kB'; 例えば以下のような値を入れてみます。 insert into test values ('1', '1.511'), ('2', '1.512'), ('3', '1.513'), ('4', '1.514'), ('5', '1.515'), ('6', '1.516'), ('7', '1.517'), ('8', '1.518'), ('9', '1.519'), ('10', '1.520'); SELECT * FROM test WHERE n = 1.513 OR n = 1.514ではヒットしますが、 SELECT * FROM test WHERE n = 1.515 OR n = 1.520 OR n = 1.511 OR n = 1.519ではヒットしません。 (小数第1位と最終桁の数字が同じ、または0で終わるとダメみたいです。 WHERE n = 1.52 とすると ヒットします。) 何が悪いのでしょうか・・・。
647 です。
うわ、小数点の比較はしてはならないのですね。もしかしてものすごく基本的なことだったのですね。
VS2003 C# WinForm の中でDobule型カラムを含む行の更新を行う処理を作っていて、Double型カラム
で
>>647 みたいた値があるとエラーになったので気づいたのです。
疑問がなのは、更新を MySqlConnector/NET(1.0.7) のCommandBuilderのUpdateメソッドで行っているの
ですが、Double型カラムを持っている場合はCommandBuilderを使えないことになるということになるの
ですかね。もちろん、doubleのカラムは主キーではないカラムで、NullもOKです。
とりあえずは文字列型に変えるしかないのか。。。
649 :
NAME IS NULL :2006/04/28(金) 16:17:33 ID:9zc79cpm
MySQLにSQL文で命令しようと思い、MySQL Administratorのツールから[MySQL Command Line Client] を選択したんですが、コマンドプロントが一瞬見えて、すぐ消えてしまいます・・。どういう対応をすれば、コマンドプロントは消えないのでしょうか? ご存知の方いらっしゃったら教えてください。ver4.0.24をしようしています。 超初心者で、今から勉強しようとして矢先のつまづきです。知ってたら教えてください!
MySQL Administrator の 何処に [MySQL Command Line Client] があるか分からない俺は負け組
644-646にどなたか回答いただけませんか?
>>651 ていうかデータのタイプは何かかけよ、ボケ
653 :
652 :2006/04/28(金) 17:59:19 ID:???
>>652 ごめんね。書いてあった orz
正直わからない。バグ?
>>651 日本語の問題は結構話題が出てるから、
自分で調べたほうが早いんじゃね?
>>648 DOUBLEじゃなくてDECIMALだとどうなります?
>>641 あー、
/etc/ld.so.conf に追加してldconfigとかする必要があるんじゃね?
ldconfig -v | grep mysql とかしても libmysqlclient.so がないでしょ。
>>648 レスありがとうございます。
ただ、Decimalは小数点が入らない・・・です。
実際に扱えるのはnumericと同じく整数だけです。
SQLサーバーでfloat型の比較は(偶然かもしれませんが)大丈夫なんですけどねぇ。
mysql4とmysql5を1つのサーバーで動作させたいのですが、設定ファイルを別にすれば大丈夫でしょうか?
660 :
NAME IS NULL :2006/04/29(土) 11:05:07 ID:tSZS4TN9
>>660 Administratorのそのメニューって単にmysqlクライアントを起動しているだけなんだから
Administratorから起動せんでも普通にコマンドプロンプト
別に立ち上げてそこからログインすればよかろうに
662 :
NAME IS NULL :2006/04/29(土) 14:41:00 ID:T5iX34h7
649です。単独でコマンドプロントも立ち上がらないんです すぐ消えてしまう
>>657 へ? DECIMALに少数も入るよ。
>>647 のdoubleをdecimal(10,4)にしたら
でちゃんと表示されてますが。
>>662 アクセサリのコマンドプロンプトも動かないってこと?
[ファイル名を指定して実行]で cmd か command って入力
これもすぐ消えるようならWinがどっかおかしいな
消えなきゃmysqlインストしたディレクトリに移動して(4.0で標準なら cd c:\mysql で移動できる)
で mysql って入力
666 :
NAME IS NULL :2006/04/30(日) 00:26:00 ID:EAQZc06b
ちょっと質問。(使用してるのはver5.0) 「’」をtableに入力する必要があって、 insert into table(fld1,fld2・・・) values('a','b','Don\'t'); なんて感じでデータを入力してた。 入力時には問題がなかったのですが、このデータを定期的にmysqldumpで保存してて、 いざこのファイルでリストアしようとしたところ、 ERROR at line 188: Unknown command '\''. とのこと。 まあ\'で「’」を入力した事が悪いのかもしれないけれど・・・・ どなたか巧い方法ご存じないですかね??
''
669 :
NAME IS NULL :2006/04/30(日) 01:44:56 ID:s3Y92xFQ
ごめん。質問の意図が正確に伝わらなかったみたい。 既に\'で入力しちゃってるデータたちを、なんとか巧い具合に取り込みたいんですけど。
>>669 \'で検索して
そいつの '' を "" に置き換える
スクリプトを走らせる
671 :
NAME IS NULL :2006/04/30(日) 04:34:53 ID:lbL354se
\'->''じゃねえ?
www''''''''''www''''''''''www''''''''''www''''''''''www''''''''''www''''''''''www''''''''''www''''''''''www''''''''''
>>663 大変ありがとうです。
Decimalは単にこちらのテーブル定義ミスでした。
この方法に修正します。
674 :
NAME IS NULL :2006/05/01(月) 23:24:26 ID:R8Rvxd1r
FreeBSD5.4を使っています。 MySQLを再インストールしようとして、 (mysql-5.0.19、ソースからインストール) (内部文字コードをEUCでなくUTF8にしようと思いまして) rm /usr/local/libexec/mysqld MySQLサーバ rm /usr/local/bin/mysql* コマンド類 rm -rf /usr/local/lib/mysql/ ライブラリ rm -rf /usr/local/include/mysql/ includeファイル rm -rf /usr/local/mysql/varデータベース保存先 rm -rf /usr/local/mysql としてから、 ./configure --with-charset=utf8 -with-extra-charsets=all --with-mysqld-user=mysql make make install したあと、 /usr/local/bin/mysql_install_db --user=mysql をすると、 www# /usr/local/bin/mysql_install_db --user=mysql Didn't find /usr/local/mysql/libexec/mysqld You should do a 'make install' before executing this script と言われてしまいます。 何度もやったのですが、同様の状況です。(確実make installはしている) どうすればこの状況を打開できるのでしょうか? お助け願えれば幸いです。
675 :
NAME IS NULL :2006/05/02(火) 01:08:59 ID:j0JIN+1N
4.0.26を使用しています。OSはwin2kです。 何ヶ月も普通に使用していたのですが、ある日を境に 突然サービスが停止できなくなってしまいました。 その後mysqlのみアンインストールし、同バージョンを 再インストールしたのですが、同様にサービス停止ができません。 何かご存知の方がいらっしゃいましたら教えてください。
>>675 W2k使ってないのだが、Windows Update関連では?
>>675 サービスを手動起動にしてOSごと再起動するとか。
ちなみにもなんかメッセージ出るの?エラーログのファイルは?
678 :
675 :2006/05/02(火) 01:50:29 ID:j0JIN+1N
>>676 最後にWindows Updateしたタイミングよりは何日も後に
発症したと思います。詳しくないので関連はわかりません。
>>677 OSごと再起動すると一応起動するんですが、直後に停止を試みると
やはり固まってしまいます。
エラーは「MySql: Sort aborted」が狂ったように出てます。
>>678 インデックスファイル壊れてるんじゃないの?
myisamchk -rq --analyze --sort-index データフォルダ\テーブル名.myi
ちなみに、
>>677 は停止させることが目的なら、自動起動にしないでOSを再起動すれば
Mysqlを止めたままOSが起動できるのではないか、という意味。
680 :
674 :2006/05/02(火) 05:05:44 ID:2Bowivw7
>>680 Didn't find /usr/local/mysql/libexec/mysqld
これが本当にあるのかないのかぐらい書けや
>>680 ,674
mysql_install_dbのスクリプトに--mysqlのオプションは不要では?
まあwindowsでも使えてるけど、 趣味のシステムじゃないなら、 windowsはやめておいた方が良いかも。
--opt無しで出力したと思われる2GBのダンプファイルがあるんだけど (事情により再出力不可)5時間かけてもインポートが終わらん。 どんな形式のダンプファイルでも、最適化を施して(SET AUTOCOMMIT=0 の挿入、INSERT文の複数行結合等)高速にインポートしてくれるような ツールってないのかな?
>>685 Oracleでいうdirect importみたいなもの?
688 :
685 :2006/05/02(火) 10:00:56 ID:???
>>687 コンパイルの問題じゃないと思う。
INSERT毎にコミットが発生するのが原因だから、それを止めるように
適当なSQLを挟んでくれるようなツールを探してる。
小さいダンプファイルならエディタで直接開いて編集できるんだけど
2GBになるとそうもいかないでしょ。
689 :
675 :2006/05/02(火) 18:56:54 ID:???
>>683-684 結局OSごと再インストールしました。
Windows以外で鯖運用したことないんですが、
やはりLinuxとかの方がトラブル少なくて
運用が楽なのですかね。スレ違いスマソ。
>>689 総数としては少なくはないけど、
・MySQLのユーザの数(WindowsはOSのユーザは多いけど)はLinuxが上
・開発、テストの多くはLinuxでしてる
だから、Windowsは不利な面は多い。
ま、でも自分はWinXPとかでも普通に使ってるけど。
MySQL以前に 俺はLinuxをまともに扱えんので Windows使うのが糞とか言われてもどしよーもない
そのスキルの低さが糞だな
postgresの \d table_name に相当するような、テーブル構成を表示するコマンドは、MySQLではどうやればできますか?
psqlの\dだとdesc table_nameのほうが近いかも
MySQLをインストールした直後は青信号となって正常に動作するのですが、 OSを再起動などすると、MySQL起動後にすぐ赤信号になってしまいます。 cmdからmysqlと打つと、 ERROR 2003: Can't connect to MySQL server on 'localhost' (10061) とエラーが出てしまいます。 MySQLは、MySQL Server and Clients 4.0.13で、OSはWindowsXPです。 2台あるうちの1台はこんなことなかったのに、 同じように入れたつもりが動作しないので、困ってます。
mysqldが起動してないんじゃないの
700 :
697 :2006/05/03(水) 13:38:19 ID:???
>>699 サービスからMySQLを開始しても、すぐに停止状態になってしまいます…
起動のさせかたが間違っていますか?
701 :
NAME IS NULL :2006/05/03(水) 13:48:08 ID:6p7Xh0jH
>>700 イベントログを見ろ
たいていはそこに理由のヒントが書いてある
702 :
697 :2006/05/03(水) 14:08:33 ID:???
>>701 MySQLは正常に開始コントロールを送信しました。
→MySQLサービスは実行中状態に入りました。
→(エラー)MySQLサービスは予期せず終了しました。
となってしまいます。
>>702 じゃあエラーログは?
マシン名.err っていうファイルがあるでしょ
704 :
697 :2006/05/03(水) 14:30:36 ID:???
>>703 060503 14:05:29 InnoDB: Started
060503 14:05:29 Fatal error: Can't open privilege tables: Table 'mysql.host' doesn't exist
060503 14:05:29 Aborting
というログが残っています。
mysql.hostというテーブルがないということのように読み取れますが
Googleで検索したものの、どう対処したらいいのかわかりませんでした。
>>704 どうせ空のDBなんだから再インストールしてみなよ。
706 :
697 :2006/05/03(水) 14:54:02 ID:???
>>705 再インストールしたら動きました!
よかったです、ありがとうございました。
また同じように起動しなくなったときは
再インストールをしなくちゃならないのでしょうか。
根本的に何が間違っていたのかがよくわかりません、、、
>>706 ちゃんと理由がエラーログに書いてあるじゃん。読めよ。
まともにインストールできてなかったんでしょ、多分。
>>698 オマエはまさに五月蠅というにふさわしい
失せろ
>>706 db\mysqlの場所とmy.iniの設定は合ってんのか?
もちろんサツキバエだよ
ふーーん
サツキミドリだろ
へぇーーー
いや、コマツミドリさ
結論:windowsを使う奴が鬱陶しい。
おまえも月
('A`)
4択の変数を作ろうと思って tinyint(1) ってやったらどうしてもbooleanになっちゃった。 調べてみたら mysql では bool って書くんじゃなくて tinyint(1) って書くとboolと同じ扱いになるのねorz
上のような変数がいっぱいあるからテーブル作り直そうと思ったら 外部キー張ってあってできない さらにorz
>>723 ちょっと待て。boolの外部キーってそう出てくるものじゃないぞ。
なんか特殊な用途なの?
質問です。 insert した直後、auto_increment しているカラムの最新のシーケンス値(最大値)を取得する方法が不明です。 PostgreSQLだと、currval() で取得できるのですが、MySQLでは不明です。 現在は、インサートしてすぐ、 select max(id) の様にして取得しています。 MySQLではどのように取得すればいいのでしょうか?
>>722 別に桁指定しなくてもええんじゃ? tinyintで。
どうしても桁指定したいなら、deciaml(1)とかすれば?
728 :
726 :2006/05/05(金) 12:28:00 ID:???
729 :
726 :2006/05/05(金) 12:30:00 ID:???
説明不足かも。 insert into shopping_log (customer_id) values (LAST_INSERT_ID()); がうまくいくのでしょうか? アクセスが殺到した場合に数字とかずれたりしないのでしょうか?
731 :
726 :2006/05/06(土) 02:46:55 ID:???
過去ログにありました。 すみません。
ちなみにお前726なのか?
>>725 じゃないのか?
クライアント側でmysqldumpを行い、 そのダンプしたファイルをネットワーク経由でサーバー側でSQL実行させるにはどうすればよいのでしょうか? LOAD DATA LOCAL INFILEはSQLの実行ではないので、、
734 :
NAME IS NULL :2006/05/07(日) 17:08:01 ID:zK4GO1Jf
あげさせていただきます。 よろしくお願いします。
>>733 mysql(クライアント)に、そのSQLを食わせるので駄目なのか?
736 :
NAME IS NULL :2006/05/07(日) 20:40:36 ID:zK4GO1Jf
MySQL4.0.24を使用しています。 query_cache_min_res_unitをmy.cnfに設定しても unknown variable 'query_cache_min_res_unit=8096' と蹴られてしまいます。 この指定方法は間違っているのでしょうか? マニュアルの通りに指定したのですが。。
, イ)ィ -─ ──- 、ミヽ ノ /,.-‐'"´ `ヾj ii / Λ ,イ// ^ヽj(二フ'"´ ̄`ヾ、ノイ{ ノ/,/ミ三ニヲ´ ゙、ノi! {V /ミ三二,イ , /, ,\ Yソ レ'/三二彡イ .:ィこラ ;:こラ j{ V;;;::. ;ヲヾ!V ー '′ i ー ' ソ Vニミ( 入 、 r j ,′ ヾミ、`ゝ ` ー--‐'ゞニ<‐-イ ヽ ヽ -''ニニ‐ / | `、 ⌒ ,/ | >┻━┻'r‐'´ ヽ_ | ヽ _ _ 」 ググレカス [ Gugurecus ] ( 2006 〜 没年不明 )
mysql-5.0.21を使用しています。 OSはRedHat 9.0。 Net-MySQL-0.09のインターフェースを使用して、PerlのスクリプトからMySQLデータベースへの 接続を行っているのですが、SELECT文でWHERE節を指定したときだけ、うまくクエリーが動きません。 $mysql->query(qq{ SELECT * FROM TABLE_A WHERE key1='001' AND keyb='002' }); if ($mysql->is_error) { # データベース接続を切断 $mysql->close(); } else { if ($mysql->has_selected_record) { ・ ・ ・ のようなソースです。 $mysql->queryの実行結果が返らず、そのまま固まってしまう状況です。 WHERE節以下を指定しなければ正常に動くので、私の記述法が間違っているのだと思うのですが。 どなたか、クエリーを正常に動かす方法について、ご教授いただけないでしょうか。 よろしくお願いします。
keyb='002' keyb='002' これが原因かは分からんけど、 エディタによっては小文字のKは全角or半角の区別が難しいね
743 :
741 :2006/05/08(月) 15:34:44 ID:???
>742 ありがとうございます。 ただ、上記の項目名は例として書いたものなので、大文字小文字のせいではないような気がします。 クォートの処理が問題なのかと思い、SQL文を別途文字列として組み立てて、 $sql_string = "SELECT ……"; $mysql->query(qq{ $sql_string }); のように動かしてもみましたが、うまくいきませんでした。;
半角全角と大文字小文字は違うとおも。 バッククォートで括ってみたら?
745 :
NAME IS NULL :2006/05/08(月) 23:53:44 ID:/rnI4SMZ
mysql4.0.xで検索系のスクリプトを作っています。 検索結果の総数と10件づつの表示をしたいので、現在は 検索結果の総数を取得:select count(*) from テーブル名 where 条件 表示レコードを取得 :select * from テーブル名 where 条件 limit x,10 ↑のようにSQLを二回発行しているのですが、一回で済ませる方法は無いでしょうか? レコード数が多いのでlimitは使いたいと思っています。
>>745 select FOUND_ROWS()
747 :
NAME IS NULL :2006/05/09(火) 01:11:56 ID:oeQAxwVZ
MySQL 4.0.25を使用しています。 INSERT DELAYEDを常に受け付けているテーブルを1日1回ログ保存用に移すため、 INSERT INTO SELECT構文でデータを移動後 TRUNCATEを発行しています。 この時、INSERT INTO SELECTとTRUNCATEの間でINSERT DELAYEDスレッドがINSERTを行ってしまうと その間のレコードは全てなくなってしまうため、どうすればいいか解らなくなっています。 LOCK TABLES `table` WRITE INSERT INTO SELECT... TRUNCATE UNLOCK TABLES を考えたのですが、 INSERT DELAYEDを使用しているテーブルに使用すべきではないとマニュアルに記述があるので別の方法を考えています。
749 :
NAME IS NULL :2006/05/09(火) 18:33:42 ID:kz7gQaDW
そもそもDebianがよくない。
>>750 質問者ではありませんが…
不用意な否定は宗教論争になるから、ちゃんと理由書いてくださいな。
>>749 Debianでは4.1.11がstableであがっているのでapt-getしてみれば?
ただし日本語の取り扱いが変わるので、要注意だけど。
宗派というよりも派閥。 数の論理が横行する。
Deb厨とVine厨は日本のLinuxコミュニティを滅ぼした元凶
756 :
NAME IS NULL :2006/05/09(火) 22:19:03 ID:kz7gQaDW
MSSQLからmdfとldfファイル持ってきたけど、 これだけじゃ移行できないんですね・・・。 また会社行ってaccessで吐き出さないといけないのでしょうか。
>>756 だから4.0.2はダメなんだろ。
4.0.24は4.0.3以降じゃないとでも?
759 :
NAME IS NULL :2006/05/09(火) 23:10:11 ID:kz7gQaDW
あ、そうですね、うっかりバージョンを読み違えてました。 失礼しました。
760 :
NAME IS NULL :2006/05/09(火) 23:19:41 ID:7cyBWZws
テーブルに登録されたデータの件数を得たいのですが、 SELECT COUNT * FROM hoge でぬぁずぇかSyntax Errorが出ますorz SELECT * FROM hoge であれば、普通にデータ一覧が得られます。 MySQLのバージョンは3.23.53で、phpMyAdmin及び 自前CGI(Perl+DBI)でも同様でした。タシケテ…。
762 :
NAME IS NULL :2006/05/10(水) 01:39:50 ID:gnAI/feC
こんばんは。初めまして。 今までC言語しか使った事の無かった人間が MysqlとJavaを用いてデータ管理用のHPを作れと言われました。 なんとか形にはなって、データも保存できるようには なったのですが、それを表示させる際に改行が反映されません。 多分保存の時に改行が破棄されているのだろうということは わかったのですが、具体的にどうやって改行まで保存して 表示した時に意図した通りの文章になるのかがわかりません。 申し訳ないですが、御教示お願いできませんでしょうか?
>>762 あまりにも漠然としすぎて誰も答えられないぞ。
表示って何を使って表示したときなのか??
改行コードはちゃんと保存されてる??
表示ってブラウザに表示したときかな??
そうすると、HTMLのスレがいいんじゃないか??
>>762 改行云々と言っていることから判断して
おそらくデータベースから読み戻したデータを
テキストエリアに表示する際に改行が
反映されない、という問題なの?
>>764 いや、おそらく改行がブラウザに反映されないだけかと
Web問題と思われ
まさかとは思うが、brタグの代わりに改行コードをブラウザに送っているとか
C++言語で常駐するプログラムで利用しているのですが、 起動時にMySQLへつなげて、後はずっと繋げっ放しという方法は何か問題はありますでしょうか? 過去ログを見ると、一画面分のデータを読みきるまで切断しない・・みたいな話を見かけたのですが。
>>767 特に問題ないかと。コネクションプーリングなんかだと何本もはりっぱなしだし。
トランザクションの範囲を明確にするのを忘れずに。
コネクションにまつわるメモリリークとかのバグがあったら問題だけど、聞かないしね。
>>767 繋げたままでスリープしたような状態だと
タイムアウトで切断されると思う。
>>764 db内のデータが改行コードのままなら
1.<pre></pre>でくくって出力
2.改行コードを<br>に変換する
phpならnl2br関数があるけど、javaでもある?
771 :
770 :2006/05/10(水) 17:47:04 ID:???
質問です。 mysql クライアントを使って日本語を入力しようとすると入力する事が出来ません。 INSERT INTO tb_user (name) VALUES ('タモリ'); << タモリが入らないのです… OS: CentOS 4.2 MySQL: 4.1.19 ソースからインストールしていて、文字コードも全て utf8 に統一する設定を my.cnf にしています。 ./configure --prefix=/usr/local/mysql --with-charset=utf8 --with-extra-charsets=ujis,sjis rpm パッケージからインストールすれば問題無いので、このまま進んでしまっても良いのですが、 原因がわからないのが非常に気持ち悪いです… 似たような現象に陥り、解決方法知っている方いらっしゃいましたら教えて下さい。 よろしくお願いします。
>>772 set names ’クライアントの文字コード’;
とかしてからSQL発行してもだめかね?
CentOSってよく知らないが、Linuxにおいてクライアントの
デフォルト文字コードはたいていeuc-jpかutf-8だよね
あと、エラーメッセージはどんな感じ?
>>773 >set names ’クライアントの文字コード’;
実はこれも試してみたのですがダメでした…
それで、上記サンプル SQL を試すとエラーメッセージなども特に出ず、
INSERT INTO tb_user (name) VALUES ('');
と上のような空の表示になってしまいます。
ターミナル(putty)の文字コードだとかサーバのロケールを疑ってみたのですが、
現在ターミナルで日本語入力を試すと入力 & 表示 は出来ます。
【現在の状態】
ターミナル: 日本語表示 ○
rpm インストール での mysql: 日本語表示 ○
>>772 のソースインストール mysql: 日本語表示 ×
という状態です。うーん…
>>774 772だが
選択中のデータベースにおける
show variables like 'character%';
show variables like 'collation%';
の値はどうなってる?
776 :
772 :2006/05/10(水) 23:35:50 ID:???
>>775 mysql> show variables like 'character%';
+--------------------------+----------------------------------------+
| Variable_name | Value |
+--------------------------+----------------------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/local/mysql/share/mysql/charsets/ |
+--------------------------+----------------------------------------+
mysql> show variables like 'collation%';
+----------------------+-----------------+
| Variable_name | Value |
+----------------------+-----------------+
| collation_connection | utf8_general_ci |
| collation_database | utf8_general_ci |
| collation_server | utf8_general_ci |
+----------------------+-----------------+
になっていますが、いかがでしょう…
777 :
NAME IS NULL :2006/05/10(水) 23:43:56 ID:3R+JdFxj
tableA --------------- aaa bbb ccc ddd tableB --------------- aaa ccc という2つのテーブルがあって、tableAの中からtableBに登録されていない レコードを表示したい場合、どのようにするのがスマートでしょうか? この場合は「bbb」と「ddd」を表示させたいです。
from tableA left join tableB on tableA.ID=tableB.ID where tableB.ID is NULL で簡単に出来ました orz tableB.ID = NULL とか tableB.ID = '' じゃ駄目なんだね。
ターミナルの言語がutf8じゃないとおもう。 ターミナルの言語とmysqlのutf8が合ってないと、入力や表示は出来てもSQLでは使えないよ。 常駐プログラムは、何らかの原因でコネクションが落ちても、自前で再コネクション張れる様にしとかないと運用で泣くよ。 繋がなく成ったら鯖ごと再起動はアフォ。 まず、 MysqlとCを用いてデータ管理用のHPを作って、CをJavaに置き換えたほうがいいと思う。 本当はCで出来るなら、Javaに置き換えないほうが実行速度が速いけどね。 嫁と言わんばかりに、リファレンスマニュアルのChanges in releaseを張る香具師が居るけど、英語だよね。 日本語訳持ってる香具師は居ないの? ところで、どういうconfigureオプション渡したか忘れたけど、インストールされた後で確認する方法有る? mysql_configでは、コンパイルオプションだから似てるようで意味無し。orz
>>772 $HOME/.inputrcに
set convert-meta off
set meta-flag on
set output-meta on
と書いてみる。
phpAdminからデータをエクスポートする際、 画像データはどのようにして取り出したらいいのでしょうか。 画像のデータをバックアップしたくても方法が分からずに 非常に苦労しております。 どなたか是非 ご教授ください。
782 :
762 :2006/05/11(木) 01:44:40 ID:L8ejZay5
あぁ、すいませんヽ(;´д`)ノ
>>764 さんの言う通り一度DBに保存したデータを再度引っ張って
HP上に表示させたいのです。
データベースの中をテキストで開いてみたら改行に該当するような
ものが無く、書き込んだ文章がそのままダラダラ格納されてる
状態になってるみたいなのです(´・ω・`)
>>770 phpと言うのを使えば改行コードをそのまま保存⇔呼び出しと言うのが
出来るのでしょうか?
783 :
772 :2006/05/11(木) 01:54:24 ID:???
>>780 レスありがとうございます!
でも、ダメでした… 同じ現象になります。
お教えいただいた方法を調べたら、MySQL ML に、結構前のバージョンで同様の現象で
悩んでいる方いらっしゃいましたね…
あと、インストール時のロケールが、en_US.UTF-8 だったので、ja_JP.UTF-8に変更しましたが、
なにか関係あるのでしょうか。うーん…
(/etc/sysconfig/i18n を書き換えて再ログイン)
784 :
な :2006/05/11(木) 10:46:04 ID:???
mysqldumpで、クオートを `` で囲みたくないんだけど どうしたらいいでしょうか。 /etc/my.confに quote-names が書いてあるので 自動的についてしまいます。 それをコマンドラインオプションか または ~/.my.cnf内 で無効化したいんだけど 方法がわからないです。
785 :
NAME IS NULL :2006/05/11(木) 16:14:30 ID:eL1kTo6l
質問です。 Webアプリケーションで、ユーザーがレコードを任意の順番に並び替えることができるようにするには、どのようなスキーマにして、更新時にはどのようにするのがよいでしょうか? 並べ替えの時にプライマリキー以外の全部のフィールドを書き換えるのではちょっとパフォーマンスが悪すぎると思います。 よろしくお願いします。
787 :
785 :2006/05/11(木) 16:42:17 ID:???
>>786 レスありがとうございます。
わかりにくくてすみませんorz。
ユーザーがお気に入りのエントリーを作れるようにしています。
普通にエントリーを追加をしていくとauto_incrementさせとけばプライマリキーのidが増えていきますが、後からユーザーが表示する順番を並び替えられるようにしたいのです。
id favorite url
1 今日のお気に入り
http:// 〜
2 昨日のお気に入り
http:// 〜
3 明日のお気に入り
http:// 〜
こんな感じに並んでいるものを、ユーザーが好きな順番で表示させることができるようにしたいです。
(順番を並び替えるためのフォーム用ページも作ります)
やっぱりスレ違いでしょうか?
788 :
784 :2006/05/11(木) 16:43:28 ID:???
>>786 有効にする方向には上書きできるけど
無効にする方法がわからないのですにょ
あんまりほいほい/etc/my.cnfをいじりたくないし
無効化手段を知っとけば他にも役に立ちそうだし
>>787 favoriteの項目名に<A href="hoge.htm?order=favorite">のリンク作って、
受信側ページ(hoge.htm:この場合同じページになるかな?)でsqlに「order by favorite」付けれ
790 :
770 :2006/05/11(木) 17:07:44 ID:???
>>782 テキストエディタで開いて改行されていない状態なら
改行コードが入っていないと思われる。
入力とDBへの挿入ページでどんな処理をしているのかわからんが
> phpと言うのを使えば改行コードをそのまま保存⇔呼び出しと言うのが
> 出来るのでしょうか?
phpには改行コードを<br>に変換してくる
nl2brという関数が用意されているということ。
javaでそんな関数がないならユーザー関数を作ってください。
791 :
785 :2006/05/11(木) 18:30:54 ID:???
>>789 すみません。言葉足らずでした。
やりたいことは、ユーザーが
1 昨日のお気に入り
2 今日のお気に入り
3 明日のお気に入り
とか
1 明日のお気に入り
2 昨日のお気に入り
3 今日のお気に入り
とかいう風に色々な順番に並べ替えられるようにしたいのです。
YOU!ソート用のフィールド作っちゃいなYO!
793 :
785 :2006/05/11(木) 18:57:25 ID:???
>>792 なるほど。新たにフィールドを加えるということですね。
そうすると、どのような値を格納しておけばよいのでしょうか?
また、更新するとき(つまりユーザーが何らかの並び替えを行ったとき)にはどのようなSQL文を書けばよいのでしょうか?
おそらく最悪全てのレコードの値を書き換えないといけない気がしてしまいます。
>793 すいません。ユーザーが一発で全てのレコードを書き換えるという 操作をするというのがよく分かりません。 ふつう、インターフェースから一個ずつ順番変えない? スクリプトでも一個ずつ命令発行しないですか?
795 :
794 :2006/05/11(木) 19:37:46 ID:???
あ…、ひょっとしてリスト構造をDBでやりたいって話か。
>>794 エスパーな俺が判断するに
1.xxx
2.yyy
3.zzz
という order から zzzを先頭にもって来た場合、
zzz→1
xxx→2
yyy→3
と変更しないといけないんじゃないかと
>>793 は言っている
エスパー魔美 出現
まったくMySQLに関係ないな。 表示順番のフォールドでも作ればいいじゃんって、データベース設計レベルの話。 blogとかの解析でもすればいいのに。 ヒント:Movable TypeはMySQL使ってる。
フォールドって?
すみません、質問スレでは無いようなので恐縮ですが、 私の頭では分かりません...ご教授お願い致します。 tableA ------------------------------------------------ id name ------------------------------------------------ 1 taro 2 jiro 3 hanako tableB ------------------------------------------------ id mark ------------------------------------------------ 1 ○ 1 × 1 △ 2 ○ 2 × 3 ○ 3 × 3 □ tableAのidは主キーでtableBのidと共通の意味を持ちます。 上のようなテーブルからmarkが○かつ×かつ△のnameを求める時、 (taroが返ってきて欲しい) どう結合してSELECTをすれば良いのか分かりません。 GROUP?でもなさそうですし、単純に結合すればよいわけでもなさそうで... こんな時どのようにすればよいのでしょうか? よろしくお願い致します。
SELECT a.id, a.name FROM tableA a, tableB b1, tableB b2, tableB b3 WHERE a.id=b1.id AND a.id=b2.id AND a.id=b3.id AND b1.mark='○' AND b2.mark='×' AND b3.mark='△' ……面倒なので自動生成させような。
802 :
NAME IS NULL :2006/05/12(金) 01:18:58 ID:YOIFlMIp
サブクエリとろいですか?4.1と5.0で違いあります?
803 :
800 :2006/05/12(金) 01:55:53 ID:???
>>801 レス有難うございました。
○かつ×だけの場合などもあるのですがORDER BYで絞込みできるようなので、
ひとまず解決しました。
ただ、本当はtableBような感じでtableCも存在していて、
ANDが数十回繰り返されています...
でもコレしかないのでしょうから、仕方ないですね。
助かりました。
804 :
800 :2006/05/12(金) 02:02:17 ID:???
ORDER BY × GROUP BY ○ でした....
気持ちは分かるがサブクエリできない感じがあるんでココでもイんじゃね
table A ( key1 text , time timestamp , .... ) レコード数の上限は 10000程度 table B ( key1 text , key2 text ,.... ) レコード数はtableAと同程度 table C ( key2 text , key3 text ,.... ) レコード数の上限は 1000程度 というテーブルがあって select B.key2, max(A.time) as check from A,B,C where C.key2= B.key2 and B.key1=A.key1 and C.key3 like "...." group by C.key3, C.key2 order by check desc limit 10 ← 数は適宜変わる を実行すると結果が返ってくるまで数分以上かかり、実行中はCPUの使用率が100%を超えることもあるのですが、 計算量を減らして同様の結果を取得するためにはどんな クエリーにすればよいでしょうか >mysql --version mysql Ver 14.7 Distrib 4.1.12, for redhat-linux-gnu (i686) using readline 4.3
mysql辞めてボラクルにする。 mysqlは無料だしな。変な期待しても無駄。 10000 x 10000 x 1000を操作してる訳だし遅いのは当然。 全部で10000以下に収めたら?
>>807 key にテキストなんて使ってるのがそもそもダメ。
整数にしてインデックス付ければ、
今の時間からは想像も出来ないような時間で終わるよ。
テーブル設計し直しや。
うん。売り上げ明細の様な形式だし 1万程度なら恐らく一瞬で終わるのでは。
812 :
NAME IS NULL :2006/05/12(金) 16:46:37 ID:42cO6rDs
すみません。理由があって、Windows2000とWindowsXPを入れました。Windows2000の方はOracle用です。 WindowsXPHomeにはOracleが入れられないので・・ デュアルブートにする際、Windows2000からインストールしないといけないので、 先にWin2000を入れた後、WinXPHomeを入れました。Windows2000には、空き容量があまりないのでMySQLをインストールしたくありません。 で、WinXPHOMEはデュアルブートにしたところ、ドライブがD:\になってしまいました。 確か、MySQLはC:\にしかインストールできないと思ったのですが・・ D:\でもシステム本体がインストールされているならば、MySQLはインストールできるのでしょうか? よろしくお願いします。
>>812 システムドライブがC:以外だと、
この先MySQL以外の問題でハマりそう。
ドライブレターぐらい変えられないのかと。 PC二台買うか、HD繋ぎ換えられる様にしとくほうが便利。 XPProならVirtualPCServerって技も有ったけどねえ。
システムボリュームのドライブなんて変えられないだろ
システムD:\だけど何の問題も無いよ?
818 :
812 :2006/05/12(金) 20:23:43 ID:???
>>814 確かに僕もそれを危惧しています(;-- Win98入れてからWin2000入れて
その後98のところにXPを入れれば何の問題もなかったんですがね・・後の祭りです。
>>815 PC二台とか無理です・・貧乏なので。。VMWareとか考えたんですが、なんか
全然知らないので止めました
>>816 無理でした(;^^
>>817 ありがとうございます。これからインストールしてみます。
大変励みになりました。
>>807 > 実行中はCPUの使用率が100%を超えることもあるのですが、
俺は無知なので知らないのだが、100%超えることなんて理論的にあるの?
パーマンでも手をつないだら飛行速度が速くなるわけで パソコンも繋げたら100%超えるんじゃね? もしかしたら赤く塗って3倍の性n (ry
>>807 このクエリは、where の条件順が逆じゃない?
C.key3 like ".." を最初に判定すれば計算量減るんじゃまいか。
>>821 クエリわざわざ読んだとは。。。
アンタ偉い。
823 :
NAME IS NULL :2006/05/14(日) 00:44:55 ID:flto9HXq
mysqlをはじめてインストしたものですが、 設定環境の MYODBCに NOT found driver 3.51 not foundって表示されてcan't found って出るんです。どなたか原因わかりませんでしょうか? ちなみにCには2000が入っているのでXPの入ったDにインストしました。 パスはわかるところは変えたんですが。 31 :名無しさん@お腹いっぱい。:2006/05/14(日) 00:29:29 ドライバーは入れられたようですが、 コマンドプロンプトからcan't connectです。 startを選択しても青ランプに2秒くらい点灯するんですが、すぐ赤に戻ります。 なぜなんでしょうか?
mysqlってsubversionなんだっけ? cvswebみたいにソースの履歴見れる所有る? scripts 以下の mysql_create_system_tables っていつ無くなったのか知りたいだけだが。 古いのメンテ疲れたよう。orz 新しいのにしたいけど、動作チェック全部やり直しは避けたいと言う大人の事情が発生中。ソフト屋は氏ねる。
825 :
NAME IS NULL :2006/05/14(日) 01:58:54 ID:OkVhDshA
レプリケーションした時の、スレーブへの更新データ反映タイミングは、 どのようになりますか? マスターに更新クエリーを送った時に、まとめてフェッチしてくるのかな? と思ってるのですが、合ってるでしょうか? 更新タイミングの設定とかありますか?
826 :
NAME IS NULL :2006/05/14(日) 03:45:26 ID:9n193Jxj
2006-04-01 2006-04-30 2006-05-01 2006-05-31 2006-06-01 2006-06-30 こんな感じのDATE型のリストから 2006-04 2006-05 2006-06 と重複しない月までのリストを得るにはどんなクエリを送れば良いでしょうか? DATE_FORMAT()とDISTINCTあたりを使うんだと思うんですがよくわかりません。
mysql_create_system_tables って 4.1 から増えてたんだな。サンクス。
date_formatで年月を取り出すのは date_format (日付型カラム,'%Y-%m')と第2引数に,'%Y-%m'を指定
830 :
826 :2006/05/14(日) 08:45:15 ID:9n193Jxj
>>829 ありがとうございます。
ちょっと複雑に考えすぎていたみたいです。
select distinct date_format(date, '%Y-%m') from table;
で出来ました。
VB.NETのプログラムからmySQLのテーブルに ' (アポストロフィ)を含んだ 文字列を入れたいのですが、エラーが出てしまいます。 色々ネットで探して mysql_real_escape_string を使うみたい なことを見つけたのですが、使い方がよくわかりません。 QueryString = "insert into table set Title='" & Session("Title") & ";" こんな感じのクエリなのですが、アドバイスできる方がいましたら よろしくお願いします。
最近このスレでテキストのカラムに張ったインデックスが遅いというので どれくらい遅いか実験してみました。 CREATE TABLE `int_index` ( `id` int(11) NOT NULL auto_increment, `content` varchar(100) NOT NULL default '', PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=cp932; CREATE TABLE `text_index` ( `id` varchar(100) NOT NULL default '', `content` varchar(100) NOT NULL default '', PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=cp932; これらのテーブルに、1000万行突っ込みました。 text_index での id には10文字のランダムな英数を入れました。 これらに対し、20スレッドで各スレッドごと1000クエリ実行した結果、 整数インデックスは約 2200 ミリ秒 テキストインデックスは約 23000 ミリ秒 と10倍程度の差が出ました。 結構ちがうもんですね。
訂正 これらに対し、20スレッドで各スレッドごと1000クエリ実行した結果 ↓ これらに対し、20スレッドで各スレッドごと100クエリ実行した結果
835 :
NAME IS NULL :2006/05/15(月) 04:37:52 ID:X1TNH0dp
>>833 >1000クエリ実行した
どんなクエリーですか?単純なselect
java で実行したんですが PreparedStatement で select SQL_NO_CACHE * from int_index where id=? の ? の部分を1-1000のランダムな数です text_indexの方は、データに実際に存在するidを1000個の配列にして、 0-999のランダムな数で同様に入れてみました。 上の実験を100万行でやると、 text_indexのほうが、速かったのが不思議な点です。
へぇ〜。とすると、単純に比較できないのかな。 参考になりましたよ。
数が膨大な数になると整数インデックスが速いという感じですかね。 補足ですが、乱数は Random#nextInt(int seed) で発生させたのですが、 text_index と int_index で呼び出す回数を同じにしてあります。 key_buffer_size は両方の MYI ファイルを足した数より多く取ってあります。 仮想ページ(swap)をOFF(0M)にした状態で実験してあります。 100万行の時は 整数インデックス 平均約 1880ms テキストインデックス 平均約 840ms てな感じです。 どのあたりから整数インデックスが逆転するかなどの、 境界は実験していません。
ちょっと違うことだが、インデックスの有無が混ざってるときのパフォーマンスってどうなんだろう? 逆に遅くなったりすることもあるのかな?
んー何とも言えないなあ。 たまたま、その環境やそのデータでは、そう言う結果かも知れないし。 詳細なテスト手順や環境や、他のDBとの違いとかも欲しい所。 int_indexのほうは、いきなりランダム生成だろうけど、 text_indexの方は、データに実際に存在するidを配列にするのにselectして時間かけてみたりキャッシュに入ったりしてない?
>>840 もう一度色々と実験してみたところ、
100万件スレッド100クエリ1000において
整数インデックスがテキストインデックスより
16%速いことがわかりました。
テスト方法が正しいのか私としても気になるので、
どこかにソースを置いて見ていただきたいのですが・・・・
すません、ちょっと質問させてください。 MySQL 5.0.20.aにて、 +--------------------------+ | Variable_name | Value +--------------------------+ | character_set_client | utf8 | character_set_connection | utf8 | character_set_database | utf8 | character_set_filesystem | binary | character_set_results | utf8 | character_set_server | utf8 | character_set_system | utf8 +--------------------------+ こんな感じのキャラコードにして、中にハングルを入れました。 で、これを、MYODBCの3.51.2 で、Aceess2003(日本語版)から接続すると、 UTF8をSJISと解釈して、化けてしまうんですが、これを、UTF8をUTF8のままに扱うことってできます? やってみたのは、 Initial Statementに、以下の値を順番にセット ・無記入 datebase/client/connection/results すべてUTF8指定 ・SET NAMES "UTF8"; datebase/client/connection/results すべてUTF8指定 → UTF8で送られてくるものを、表示の時にSJISに変換してしまう ・SET NAMES "SJIS"; datebaseはUTF8 /client/connection/results は SJIS 指定 → 当たり前ながら、???に文字化け ・SET NAMES "EUCKR"; datebaseはUTF8 /client/connection/results は EUCKR 指定 → 当たり前ながら、よくわからない文字の羅列に文字化け フォントは、それぞれ、MSゴシックと、ArialUnicodeMS(ユニコード)/Batang(EUCKR韓国語用) を試しました → 変化なしです なんか、これ以外に試してみるとよさそうなものはありますでしょうか?
OpenOfficeのBaseを使え
844 :
NAME IS NULL :2006/05/15(月) 22:06:01 ID:JL6/1d73
複数のMODIFYを1回のmysql_queryでやるための書式を教えて下さい。 これらは全て失敗したものです。 mysql_query('ALTER TABLE mytable MODIFY myid varchar(10) NOT NULL default \'\' MODIFY mypass varchar(50) NOT NULL default \'\''); mysql_query('ALTER TABLE mytable MODIFY myid varchar(10) NOT NULL default \'\', mypass varchar(50) NOT NULL default \'\''); mysql_query('ALTER TABLE mytable MODIFY myid varchar(10) NOT NULL default \'\' AND mypass varchar(50) NOT NULL default \'\'');
>>844 直接クエリ打ってみればいいじゃん。
そうすればどの辺がおかしいかわかるじゃん
846 :
NAME IS NULL :2006/05/15(月) 22:26:48 ID:JL6/1d73
1つなら成功しているので1つずつのMODIFYを 2回のmysql_queryで実行することならできています。 2つを同時にする書式をご存知内でしょうか?
>>845 即座に回答できない845みたいな奴がアホなレスを付けると
こっちもいちいちレスを書かないといけなくなるから疲れる。
もう分かった。灰終了。
MySQLはNOT NULLを指定すると、デフォルト値が強制自動設定されてしまう仕様なんですか? (バージョンは4.0で確認しています)
KR=在日チョンってのも、おそろしい短絡だな
MSのソフトって、ユニコードだけど、UTF2とかじゃなかったっけ? UTF8はそのまま受け付けない気がする。 ただ、そうするとPostgreSQLのベータunicodeODBCはUTF8そのままつかえるんだが、 あれはどーなってんのかって話にはなる。
852 :
NAME IS NULL :2006/05/16(火) 20:46:15 ID:BMzd4DOE
DATE_SUB() ではなく TIME_SUB() みたいなの無いでしょうか? またはそういう処理方法ありますでしょうか? TIME型のカラムが2つ( t_start, t_end )あり、経過時間を取得したいのですが DATE_SUB( t_end, INTERVAL t_start HOUR_MINUTE ) 上記では NULL になってしまいます。
今や日本人のフリした在日チョンがあちこちに居るんだよ。 やがて亜米利加の移民問題のようなことが日本で起きても不思議は無い。 一億2000万人の日本人に対して、在日チョンは200万も居るし。
>>854 それってつまり、NOT NULLのカラムに値がない場合は、
はじくということができないことになる?仕様としてよくないなぁ。
NOT NULLにしているのに、どうして値をセットしないの? 値が入らないこともあるならNULLを許可すればいいのに。
>>856 未定義の変数エラーのような意味で、
必ずはじくようにできて欲しいわけ。わかる?
>>855 いや、NULLを突っこめばエラーになるよ。
何か変な仕様のヲレRDBを求めてる悪寒。 mysqlには無いから巣に帰れ。 ボラクルでも買って、クレーム入れて機能付けさせろ。
oracle買わなくてもpostgresにはあるって・・・
>>858 それは明示的にnullを入れた場合ですよね?
そうでなくて、insert時に指定が抜けている場合は、
エラーにして欲しいわけです。
できないならまあしょうがないんですけど、これを変な仕様と思う人は、
プログラマとして設計の適正がないんじゃないですか。
>>861 insert用のストアドを作ってチェック、とか思いつかないお前のほうが応用力が低い。
プログラマとして適正がないとしか言いようが無いな。
>>862 ストアド作ってまでチェックするほでもなく、
デフォルトでそういうのがあったほうが安全ということですよ。
おそらく速度を優先して今の仕様になってるとか、
何か理由はあるんだとは思いますが。
MySQLの仕様にいまいちなところがあれば、
それはそれで認めるのが改善の一歩ではないでしょうか。
実際に改善するわけではなくとも、姿勢として。
なんで変にむきになるんでしょう。あるソフトのいまいちな点に触れると、
その指摘した相手を攻撃する人って2chによくいますけど、
こういう人って困りますね。
>>863 何作ってるんだか知らないけど(卒論?)
MySQL以外のRDB使えばいいんじゃねーの?
>なんで変にむきになるんでしょう。あるソフトのいまいちな点に触れると、
>その指摘した相手を攻撃する人って2chによくいますけど、
>こういう人って困りますね。
自己紹介ご苦労さんw
>>864 >何作ってるんだか知らないけど(卒論?)
全然見当違いです。推測力もないんですね。
なんで変にむきになるんでしょう。あるソフトのいまいちな点に触れると、 その指摘した相手を攻撃する人って2chによくいますけど、 こういう人って困りますね。
人格攻撃まざってる時点でどーかと思うよ もうソフト関係なく、ののしりあいの世界に突入してんじゃん
>>861 >そうでなくて、insert時に指定が抜けている場合は、
>エラーにして欲しいわけです。
プログラム側でチェックしとけよ。
>>861 なんで? NULL突っこんでおけば済む話でしょ。
あー、ひょっとしてO/Rマッパーとか使ってない?
870 :
852 :2006/05/17(水) 12:04:07 ID:dx29ESON
>>852 SEC_TO_TIME( TIME_TO_SEC( t_end ) - TIME_TO_SEC( t_start ) )
今はこういう感じで、秒にして演算してから時刻に戻してます。
もっと良い方法ありましたら御教示おねがい致します。
強制IDになれば、
>>866 にnullを突っ込んでやるんだが。
スクリプト側じゃなくてMySQL自体でSQLインジェクション対策できますか? 例えば予め数種類のクエリパターンを定義しておいて、それ以外のクエリは無条件に破棄するようなフィルタ機能みたいなのです。
>>872 サーバサイド Prepared ステートメントってのがあるらしいけど、
使ったことない
ぬるぽ
「質問しておいて何返されても自分の価値観を一切曲げようとせず、 自分に同意しない者に対しては即答で見下すような態度」 な奴が一番困ったもんだっつーの! 「自分は『頑固な馬鹿』かもしれない」と心の隅にでも置いておいたほうがいいぞー。
>>875 まあまあ、春なんだし。
ふしぎな人は生暖かく見守ってあげましょう。
>>875 もう別にいいんだけど、そんなにいうなら、
NOT NULLでデフォルト値を自動設定する仕様の理由と利点を教えてください。
はいはい、ポスグレに有る機能なら、ポスぐれ使ってくれ。 マイエスキューエルをこっそり使ってもいいけど、このスレには二度と来るな。 プログラマって空気読めないから嫌われるんだよ。 このスレに来たならこのスレの空気読めよ。
はぁ、説明できなくなるときもい、出ていけですか。レベル低すぎ・・・。
>>877 たとえば
CREATE TABLE foo (
hoge int not null,
fuga int not null default 10
);
のときに
INSERT INTO foo (hoge) VALUES (1);
とかしたいとき。
あー、まさかカラム指定が出来るのをしらないとかっていう話じゃないよね?
>>881 質問の意味を取り違えてませんか?
テーブルの作成(変更)時に、デフォルト値自体を自動設定する
必要があるか?ということを聞いたのですが・・・。
例えば
>>881 の場合、hogeのdefaultとして0が自動設定されてしまうということです。
意味と利点があれば納得するし、 よくないけれど、仕様というのであれば、しようがないと思うだけです。
ぶっちゃけあれがないこれがないって文句のあるやつは使うなってのがMySQL のぽにしーだと思うんだ。トランザクションだって最近までなかったんだから。
ttp://dev.mysql.com/doc/refman/4.1/ja/insert.html >MySQL では、常にすべてのフィールドにデフォルト値がある。
>デフォルト値の存在は、MySQL がトランザクションテーブルと非トランザクションテーブルの
>どちらも処理できるようにするための必要条件となっている。
>MySQL では、フィールド内容のチェックはデータベースサーバではなくアプリケーション側で行う、
>という見解に立っている。
――だそうです。
だから NOT NULL 制約があるカラムの DEFAULT は非 NULL なんでしょう。
これでよろしい?>粘着してる人
ソースhackして自前で改造してください。 以上。
887 :
NAME IS NULL :2006/05/18(木) 01:41:42 ID:fNZ39rqr
MySQL Command Line Clientを実行して パスワード入力、show database;を入力したところ ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'datab ase' at line 1 というエラーが返ってきました。 testというデータベースが表示されるはずなのですが、 これはどういうことでしょうか? 初歩的な質問ですみません、 ちなみにバージョンは4.1.19です。
888 :
887 :2006/05/18(木) 01:45:14 ID:fNZ39rqr
すみません。databasesでした。 本の記載が間違っているだけでした。
>>888 因みに何ていう本のどのページの記述間違い?
そろそろ5系の日本語訳に取り掛かって貰いたいのだが。
892 :
NAME IS NULL :2006/05/18(木) 11:22:37 ID:+dYtd0v2
MYSQLとアクセスについて教えてください MYSQL+PHP でデータベースのデータだけはアクセスのmdbから拾いたいと おもっているのですがやり方がわかりません。 PHPからはMysqlからデータを拾っているようにしたいのですが。
アクセスからちょくでPHPじゃだめなのか? それか、アクセスとPHPの関係を逆にしたほうがいい気もする
まちがい アクセスとMYSQLの関係を逆に
895 :
NAME IS NULL :2006/05/18(木) 13:38:18 ID:+dYtd0v2
>893 MYSQL+PHP からaccessのデータベースを見たいのです。 MYSQL+PHPでページができていまして、これをあんまり変更せずに accessのデータを利用したいと思っているのですが。 ODBCを介してMYSQLのデータをアクセスで見る方法はホームページで 発見できたのですが・・・ ご存知でしたらお願いします
>>895 MYSQLにアクセスを参照するリンクテーブルつくろうって話だよね
すいません、わかりません。
が、
アクセスのデータを全部MYSQLに移植して、
アクセスにMYSQLのリンクテーブル(ODBC利用)つくったほうが早いとおもうよ・・。
897 :
NAME IS NULL :2006/05/18(木) 14:20:05 ID:+dYtd0v2
>896 そうなんですよ。MYSQLにアクセスを参照するリンクを作りたいんですけど。 だれもやろうとする人がいないのかなー? 調べてもでてこないんですよー。
必要ないもの。。。 とゆうか、データベースのデータ部分を、二箇所に分散させる利点がないもの 弊害はいっぱいでてくるだろうけど (MySQL等に「アクセス」からリンクさせることが多いのは、アクセスのデータベース部分じゃなくて インターフェイスとか、印刷部分を使うって理由からがほとんど)
mysqldを127.0.0.1で動作させたい場合はどうしたらいいですか? my.cnfの[mysqld]セクションになんと書けばいいのでしょう。 くだ質かもしれませんが、よろしくお願いします。
900 :
899 :2006/05/18(木) 17:48:02 ID:???
自己解決しました [mysqld] bind-address = 127.0.0.1 ですね。失礼しました。
prepare age
すみません、MySQL4.0でテーブル名が2バイトのテーブルを作っても文字化けしなかったのに MySQL5.0にしたら文字化けしてしまいました。 やはり、内部文字コードがUTF-8になったことが原因なのでしょうか? また、解決方法をご存知の方がおられましたらお教えください。
>>902 Q.データベース名、テーブル名、フィールド名に日本語は使えますか?
A.使うな。使えるけど。
>>903 えぇっぇ!日本語の掲示板とか作るときどうしたら良いんですか?
>>904 データベース"名"、テーブル"名"、フィールド"名"だ。
フィールドに日本語を格納すればいいだけだろ。
でも
>>902 なのはそれぞれの定義名がUTF-8で
書き込まれるようになったせいじゃなくて、
機能追加されたクライアントとサーバ間の
エンコード変換の辺りの設定だと思うぞ。
日本語でフィールドに格納してる値があれば
そこも似たように"文字化け"してないか?
テーブル名なんて英数でいいじゃん。 別途internationarizationテーブルでも持って、 select ja for internationarization WHERE "te-burumei" とか引ける様にしとけば、国際化もばっちり。
マニュアルにはっきり書かれている事すら理解できないほど字が読めないんだから化けててもいいじゃん。
909 :
NAME IS NULL :2006/05/20(土) 17:29:18 ID:BuO/P63m
MySQL Connector Net 1.0.7 ってWINDOWS S-JIS(CP932) って使えないの? チェンジテキストに Does not support Code Page 932 って書いてあるが。。。
サポートしないでくださいってことだからな
911 :
NAME IS NULL :2006/05/21(日) 10:58:51 ID:7ZSaUI4U
お助け下さい。 table a id,name 1,tanaka 2,sato 3,suzuki table b id,fl 1,1 1.2 1.3 2.2 select * from a left join b on a.id=b.id where b.fl=1; このクエリで想定した結果は、 id,name,fl 1,tanaka,1 2,sato,null 3,suzuki,null だと思ったのですが、 id,name,fl 1,tanaka,1 となります。 求める結果を出すのは、 どのようなクエリとなりますでしょうか。 お願いします。
>>911 where b.fl=1 or b.fl is null かな。確認はしていない。
913 :
911 :2006/05/21(日) 11:29:43 ID:???
>>912 レスありがとうございます。
> where b.fl=1 or b.fl is null
なるほど。いけそうですね。ためしていないのですが。
perlでコード書いてるのですが、全体的な処理からいえば、
一旦、table a の一覧を呼び出しちゃった方がよさそうなので、
フロー変更しました。
914 :
NAME IS NULL :2006/05/21(日) 11:39:56 ID:Kp7fgyj6
>>911 table bにid=2のエントリが有る以上、想定した結果はあり得ない。
>>911-913 where b.fl=1
ってやってるのにb.fl=1以外のモノが出てくると想定してる時点でSQL理解してないでしょ。
b.flに何が出てくるのを想定してるかわかんないけど、
多分1が欲しいんじゃなくてMIN(fl)が欲しいとかじゃないのか?
ファンタジービキニアーマー総合研究所。
なんだこのスレ 外部結合すら知らん奴がでかい面してんのか
mysqlだぜ?外部結合が使えないと考えるのが正常な反応だぜ
またスゴイ奴が登場したな。w
そういえばいつの間にか使えるようになってたな あれはいつごろからだろうか
多分昨日の夜から
明日って今さ!
1つのIDで一意に決まるデータが大量にあるのですが、 ある程度グループに分けたほうが可用性は高いのでしょうか?
>>927 自分の例だと、資料管理システムで
「保存期間が終了したら資料そのものは捨ててしまうが資料が存在した事は残す」
という仕様だったときに、
保存期間内のものは普段から検索対象とする事が多いが
期間を過ぎたものはほとんど検索する事はない、という事で
普段使いのパフォーマンスを上げるために
期限を過ぎたものを別なテーブルに移動させるようにした事はあるね。
そういう意味的なグループがあるのなら分ける手もあり。
930 :
927 :2006/05/22(月) 22:48:38 ID:???
>>928 特に根拠はないのですが、雑誌などを読むと、大抵書籍在庫管理などの
簡単なデータを元に設計をし、「正規化」って作業をした結果、テーブルが
複数できて、1つのテーブルは10個以下にまとまります。
一方、自分はRPGのキャラデータ管理で使おうと思っているのですが、
筋力や知性、覚えた魔法、持っているアイテム、経験値なんかはキャラ毎に
固有の情報なので、キャラID1つで100個近い種別の値と対応付けれます。
設計の仕方のルールにのっとるとこれ以上分解できないので、
100個くらい要素があるけど完了してしまっていいのか、
それとも「ステータス」「アイテム」などに1つのテーブルが10個程度にまとまった
ほうがいいのか、そんな感じで悩みだしてしまい、ご相談させていただいた次第です。
>>929 なるほどー、そういう意味はないです。
今後拡張などが入って、ステータスの要素が増えたり魔法が増えたりは
考えておきたいと思ってます。
このスレ見るのやめとこう
とりあえず分けて作ってみることにしました。
>>930 それ、ちゃんと正規化されてない予感。
少なくともアイテムや魔法は分解できるだろ。
934 :
NAME IS NULL :2006/05/23(火) 12:45:40 ID:EfawsPRW
エラーが発生していてわかる方がいらっしゃいましたらご教授ください。 PHP−MySQLを使ってWinXPのローカル環境にてテスト開発を行っています。 ブラウザ上で入力された文字を受け取り、PHP上でSQL文を作成し 以下のような単純なselect文を発行すると select count(field1) from test_table where field1 = 'テスト' and field2 = '2ちゃん' を発行すると 『 Illegal mix of collations (sjis_japanese_ci,IMPLICIT) and (latin1_swedish_ci,COERCIBLE) for operation '='』 というエラーが発生し、止まってしまいます。 sjisとlatinを比較できないと言っていると思うのですが、 PHPソースはSJIS、 MysqlもSJISで作成しており、 statusコマンドを発行すると Server characterset: sjis Db characterset: sjis Client characterset: sjis Conn. characterset: sjis と表示されております。 このエラーの回避方法がわかる方がいらっしゃいましたら ご教授お願いできませんでしょうか。 よろしくお願いいたします。
>>934 その確認したstatusコマンドは、PHPのクエリ関数から発行してる?
プロンプトからmysqlコマンドを使ってるなら、それはPHPからの操作とは
異なったClientを利用してるわけで、PHPからの操作でのstatusは表示されないよ。
>>933 もう少し勉強します、ありがとうございました。
2つのテーブルのを内部結合を テキストファイルにリダイレクトすると、 全行の2列目のデータの後に改行が入って困ってます。 下記が実際のテーブル構成です。 mysql> desc o_cm; +-------+---------------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+---------------------+------+-----+---------+-------+ | id | bigint(20) unsigned | NO | PRI | NULL | | | name | varchar(100) | NO | | NULL | | +-------+---------------------+------+-----+---------+-------+ 2 rows in set (0.00 sec) mysql> desc o_cost; +--------+-----------------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +--------+-----------------------+------+-----+---------+-------+ | hiduke | date | NO | | NULL | | | id | bigint(20) unsigned | NO | | NULL | | | cost | mediumint(8) unsigned | NO | | NULL | | +--------+-----------------------+------+-----+---------+-------+ 3 rows in set (0.00 sec) SQL文 mysql> select o.hiduke,cm.name,o.cost from o_cost o join o_cm cm -> on o.id = cm.id into outfile 'aa.txt'; テキストファイルを開くと・・・ 2006-05-01nameの値1 1414 2006-05-01nameの値2 12156 2006-05-01nameの値3 0 ・ ・ ・ みたいな感じになってしまいます。 どうすれば解決できるでしょう???
>>937 (1) insert 時に nameに改行が入らないようにする。
(2) select 文の name を trim("\n" from name) as name とかする。
select hoge,fuga from table_name where no=? order by (hoge+fuga) みたいな、結果を取得してそれを計算したもので order する場合、 using filesort は避けられないのでしょうか?
>>939 そらそーだろ。
計算してるのにINDEXが使える実装を思いついたら教えてちょ
>>940 ですよね。
となるとデータ設計がよろしくなかった感じがしますねorz
計算結果を保持するテーブル作るとかかなぁ。 別にカラムを追加してもいいけど。 あとはストアド使うとかトリガ使うとかでフォロー。 もちろんアプリ側でフォローするのもあり。
>>942 計算結果保持カラムや、テーブルまであると、
なんか管理が面倒な感じがするので、
where no=? の部分をもっと細かく no=? && period>?
みたいに範囲を細かくして、行数減らして
適切なインデックス張って filesort することによるコストを減らすことで逃げるとかどうでしょう?
テストで自己参照外部キーを持つテーブルを作ったのですが、 削除できなくなりました。。 ALTER・・で外部制約を削除して ALTER・・で列を削除して DELETE・・でデータを削除して DROP TABLE ・・・ でテーブルを削除しようとすると ERROR 1217 (23000): Cannot delete or update a parent row: a foreign key constraint fails というように、まだ外部制約があるかのようなエラーがでます。。。 SHOW CREATE TABLEで制約がきちんと削除されてるのは確認してます。 こういうときってどう対処すればいいんでしょう?? 強制的に削除することって可能なんでしょうか? それとも削除の方法が間違ってるんでしょうか? ちなみに、 CREATE TABLE・・は下のとおりです。 CREATE TABLE test_table( id TINYINT UNSIGNED NOT NULL, name VARCHAR(100) NOT NULL, mgrid TINYINT UNSIGNED, FOREIGN KEY (mgrid) REFERENCES cas_m (id) ON DELETE CASCADE ON UPDATE CASCADE, PRIMARY KEY (id ) ) ENGINE=InnoDB DEFAULT CHARSET=sjis;
945 :
NAME IS NULL :2006/05/25(木) 15:14:15 ID:iIuI8ioE
板違いかもですがご容赦を。 FC4へ mysql 4.1.15 をソースからインストールし、SSH経由でmysqlの コンソールから日本語が入力できず困ってます。漢字だけはじかれます。 character_set_xx と SSHの文字コードは合っています。 mysql < query.txt のようにパイプを経由すればOK。 redhat9では出来ていた気が。(でもrpm) 回避方法があれば教えてください。
半角カタカナだとlike文がうまく機能しません。 文字コードはSJISです。 select * from table where name like '%ア%'; アを含むものをとってきたいのですが何もヒットしません。 select * from table where name like 'ア%'; だと、ちゃんとアで始まる物がヒットします。 あと基本的には大文字小文字区別したいので、 VARCHAR BINARI属性にしてるんですが、 オプションで大文字小文字区別無しで検索したいとき どうやってやればいいのかわかりません。
948 :
947 :2006/05/25(木) 22:02:02 ID:???
自己レス、likeを使わずに INSTR(name, 'ア') でうまくいきました。 あとは大文字小文字チェックなし・・・
>>947 定義は 非binaryにしてselectする際に
アプリケーション側でbinary演算子を使う、使わないの
場合わけすればいいんでないの?
>>947 >あと基本的には大文字小文字区別したいので、
>VARCHAR BINARI属性にしてる
が間違い。"ちゃんと"SJISにしとけ。
951 :
947 :2006/05/25(木) 22:16:38 ID:???
>"ちゃんと"SJISにしとけ。 すんません、この意味がわかりません。 カラムごとに文字コード設定できるんですか? あともうbinary属性で進んでしまって戻れなさそう・・・ たしかに区別したいときだけbinary(name)すればいいんだけど。
>>951 俺は949だが、MySQLのバージョンは何?
4.1以上ならばテーブルの文字コードをutf8にして
クライアントの文字コードをcp932にして
select * from table where name like '%ア%';
を実行したらちゃんと選択できたぞ
当方WindowsXP MySQL5.0.16
953 :
947 :2006/05/25(木) 22:41:26 ID:???
バージョンは5.0.20a テーブルはSJIS。これはもう決定事項なので変更不可です。
954 :
949 :2006/05/25(木) 23:02:35 ID:???
>>953 テーブルの文字コードsjisにして再度実験したが
select * from table where name like '%ア%';は
こちらの環境ではうまくいったぞ
本当にクライアントとサーバの文字コード一致してる?
>>954 [mysql]、[mysqld]ともにdefault-character-setはsjisですね。
文字コードの問題ならlike 'ア%'もうまくいかないと思うんですが、
こっちはうまくいくんですね。
って、今やったらうまくいってる!
試しにBINARY属性消したからだな・・・
>>956 なるほど、当方nameフィールドをbinary指定したら
確かに現象再現したわ
やっぱnameフィールドはbinary属性にしないようにすれば
幸せになれそうだと思うんだがどうだろうか
たぶんmysql設定のミスだと思うのですが、mysql+PHPで抜けれなくなってます。 test.phpというファイルで、初めに mysql_connect("localhost","root","root") or die(mysql_error()); mysql_select_db("test"); としてmysqlデータベースへ接続しようとすると、 Warning: mysql_connect(): Access denied for user '●●'@'localhost' (using password: NO) in 「phpファイルのディレクトリ」on line 2 とエラーが表示されます。 ●●は、このtest.phpファイルを設置している、homeディレクトリの名前です。 (これは同時にFTPのログインアカウント名です) mysql_connect でユーザ名やパスをいろいろ変えて設定してみても、 「FTPのアカウント名@localhost」で接続を試みているようで、接続できない状態です。 ちなみに、初期からあるtestデータベースには接続できました。 また、別の共用レンタルサーバ等でも、データベース接続は何度も行なっています。 今回、自分でインストして設定してみたら、この謎のエラーがでてきました。 いろいろ調べたり書籍を読み漁ってみたのですが、 「●●がFTPアカウント名」というものは無くて困っています。 環境はFreeBSD/Apache2/PHP4/MySQL5/です。 何かヒントでも頂けますと本当に助かります。
960 :
956 :2006/05/26(金) 09:15:52 ID:???
>>957-958 どうもです。BINARY属性消しの件は交渉してみます。
ずっとpostgesでmysql使うの初めてなんでハマりまくりです・・・
下記のようなテーブルがあったとして、 +------------+--------+--------+ | Date | name | cost | +------------+--------+--------+ | 2005/04/01| maru | 1000 | +------------+--------+--------+ | 2005/04/02| koba | 1000 | +------------+--------+--------+ | 2005/04/01| seki | 1000 | +------------+--------+--------+ | 2005/04/03| maru | 1000 | +------------+--------+--------+ | 2005/04/04| maru | 1000 | +------------+--------+--------+ | 2005/04/04| seki | 1000 | +------------+--------+--------+ | 2005/04/05| maru | 1000 | +------------+--------+--------+ | 2005/04/01| maru | 1000 | +------------+--------+--------+ これを +--------+------------+------------+------------+------------+------------+ | name | 2005/04/01| 2005/04/02| 2005/04/03| 2005/04/04| 2005/04/05| +--------+------------+------------+------------+------------+------------+ | maru | 2000 | 0 | 1000 | 1000 | 1000 | | koba | 0 | 1000 | 0 | 0 | 0 | | seki | 1000 | 0 | 0 | 1000 | 0 | +--------+------------+------------+------------+------------+------------+ のように抽出する場合は どんなSQLになるでしょうか??
>>961 アプリ側でやるほうが遥かに簡単だけど、俺は優しいから SQLの方法も教えたろ。
ただし、
(1) SQLでは列は動的に増減できないので、あらかじめ Date の内容を知っていること
(2) 下記の例は 3.23.x くらいの話なので、サブクエリとかは使ってない
(3) 巨大なテーブルだと、えらく遅いと思う
という前提でよろしく。
select name
, sum(if(date="2005-04-01",cost,0)) as "2005/04/01"
, sum(if(date="2005-04-02",cost,0)) as "2005/04/02"
, sum(if(date="2005-04-03",cost,0)) as "2005/04/03"
, sum(if(date="2005-04-04",cost,0)) as "2005/04/04"
, sum(if(date="2005-04-05",cost,0)) as "2005/04/05"
from sample_table
group by name
order by name;
>>960 sjis(cp932も)のBINARYで半角カナがLIKEでマッチしないのは単にバグだと思うんで、
レポート出しておくといいかもね。
#ちなみにujisでもマッチしましたんで、ピンポイントな問題かと。
半角カナなんてレガシーな文字コードは捨てていいよ。
>>966 似たような感覚で、ざっくりとCP932もCP51932も
eucJP-msも切り捨てて欲しいものよ。SJISもEUC-JPもいっそ。
確かに文字コードで悩むのはもう終わりにしたいな unicodeの趨勢が決定的になれば実装者はどれほどラクか
文字コードの問題による日本IT業界の経済損失って、 実は相当大きいと思う。 意味不明なことに労働時間を浪費してるんだもん。
>>969 ばっかだな
その文字コードごときのおかげでおれは儲かってるんだから
それでいいんだよ
「後ろから何文字」で検索するとインデックスって効いてくれないよね? これって、検索前に仮テーブルでもこさえてやったほうが 速度は劇的にアップしたりするんかね って聞く前に自分で試すから。 お前らオレに教えたりすんなよ
linux のマシンに mysql Ver 14.7 Distrib 4.1.12, for redhat-linux-gnu (i686) using readline 4.3 windowsのマシンに mysql.exe Ver 14.3 Distrib 5.0.0-alpha, for Win95/Win98 (i32) をそれぞれ入れて、それぞれstandaloneでちゃんと動いていることを確認しました。 windowsの方からlinuxのmysqlデータベースに(まずはコマンドラインで)アクセスしたいのですが、 linux側で GRANT ALL PRIVILEGES ON db.* TO .. hosts.allow にwindowsホストのアドレスを追加して windows側から mysql.exe -u user -h hostname とやっても ERROR 2003 (HY000): Can't connect to MySQL server on 'hostname' (10065) です。 そもそもこのやり方が正しいのかどうかが自信ないのですが 他に設定で見ておくべきところはどんなところでしょうか? あるいは誘導お願いします。
ツッコミ所満載な訳だがどうしたものか・・・・・・ 有料サポート購入するのがいいんじゃね?
>>972 hosts.allowは関係ない。というか、何故hosts.allowを設定しようと思ったのか...
windows側から ping hostname が通るかとか、telnet hostname 3306 がどうなるかとか。
tcpdをリンクしてある可能性はあるかもよ(w 馬鹿はutf8で統一しとけばいいじゃん。 sjisで使おうなんて考えるな。 漏れはソース弄ってjisで使える様にしてるけどな。
976 :
NAME IS NULL :2006/05/27(土) 14:42:37 ID:bNSDh8D4
+---------------------+----+--------+ | time | rw | name | +---------------------+----+--------+ | 2006-05-27 14:01:07 | w | apple | | 2006-05-27 14:01:00 | w | orange | | 2006-05-27 14:04:17 | r | apple | | 2006-05-27 14:04:14 | r | orange | | 2006-05-27 14:04:13 | r | apple | | 2006-05-27 14:04:12 | r | banana | +---------------------+----+--------+ というテーブルがあり、rwのrのnameを抽出し、rwがwの項目のnameを除外したいのですが、 (上記の場合、bananaを抽出したい) 現在、 SELECT name FROM table WHERE rw =
977 :
NAME IS NULL :2006/05/27(土) 14:44:38 ID:bNSDh8D4
+---------------------+----+--------+ | time | rw | name | +---------------------+----+--------+ | 2006-05-27 14:01:07 | w | apple | | 2006-05-27 14:01:00 | w | orange | | 2006-05-27 14:04:17 | r | apple | | 2006-05-27 14:04:14 | r | orange | | 2006-05-27 14:04:13 | r | apple | | 2006-05-27 14:04:12 | r | banana | +---------------------+----+--------+ というテーブルがあり、rwのrのnameを抽出し、rwがwの項目のnameを除外したいのですが、 (上記の場合、bananaを抽出したい) 現在、 SELECT name FROM table WHERE rw = "w" GROUP BY name SELECT name FROM table WHERE rw = "r" GROUP BY name でそれぞれ取得し、perlで配列比較しています。 これをSQLのみでやる方法はあるのでしょうか?
>973 そもそもこのやり方が正しいのかどうかわかんないです。 >974 ping host は通ります。 sshでログインもできます。 >telnet host 3306 接続中: ホストへ接続できませんでした。 ポート番号 3306: 接続に失敗しました
979 :
sage :2006/05/27(土) 16:00:00 ID:73zfxdQu BE:108341273-
>>977 SELECT name FROM table WHERE rw =
980 :
sage :2006/05/27(土) 16:02:10 ID:73zfxdQu BE:77387235-
>>977 SELECT name FROM table WHERE rw = 'w'
AND name NOT IN (
SELECT name FROM table WHERE rw = 'r'
)
GROUP BY name
試してないけど、こんな感じじゃない?(MySQLでてきたっけ…)
:書き込み時に、ダブルクォーテーションが通らなすなぁ…
981 :
NAME IS NULL :2006/05/27(土) 16:34:53 ID:bNSDh8D4
>>980 できました^^
ありがとうございます。
ダブルクォーテーション切られますね。。
>>978 linux側で telnet localhost 3306 してみたらどうなる?
これができないようなら、my.cnf で skip-networking とか bind-address を調べてみる。
localhostから3306につなぐことができたら、windowsかlinuxのファイアウォールとか。
Q: Windows ソフトのことで困っています。助けてもらえますか? A: はい。DOS プロンプトにいって、「format c:」とタイプしましょう。 ものの数分で、困っておいでの各種問題は消滅することでしょう。
redhatはデフォルトでファイヤーウォール入れようとしてたはず。 漏れは面倒だから無効にしてインスコしたけど。
mysql.sock って /tmp だとなんか不安なんですが、 皆さんデフォルトのままですか?
またスゴイ人が現れたな。もー、たまらん。
何で不安なんだ? 他人から消されたり編集されたりできると思ってる理由は?