もう13時か、
2ちゃんねる ■掲示板に戻る■ 全部 1- 最新50 [PR]萌え猫写真館が復活。[PR]  

MySQL 総合 Part14

1 :NAME IS NULL:2008/06/13(金) 10:18:03 ID:q0zt6p92
快速 RDBMS、MySQL の総合スレです。
前スレ[MySQL 総合 Part13] http://pc11.2ch.net/test/read.cgi/db/1201632550/l50
[関連スレと過去ログ]
http://find.2ch.net/index.php?STR=MySQL
http://makimo.to/cgi-bin/search/search.cgi?D=db&q=MySQL&sf=0&link2ch=on

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

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

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

・関連ツール及びユーティリティ
・関連書籍
>>2

  | .| /./  /      |   | _,,,,||,,,l.,,_ ト      /  | _ |    .|   /
.  | | .| |  l      .| .,-'|.l  .|l .| `|. l     '  /´ /    /   /
  | | |.|  .|      , |´ | .|  | _|,_ l .|      ./  ''`ト  ./  /
  | | |.|  |       |  .| |_,,l-,─-.,_、_ |     /   .λl,/   /
.  |. |. ||  |       .| | /::::l  ヽ `'' |   / ,  ,.ミ,|´|   ./
,,,__.| .| ヘ .|        | .|/ |:i::::::〉., ノl  | /  .//  ∨| /
  `'' ‐ 、l |        .|||l'l:|:|l:::::`':::::i´||  ''    /   ...:::::l..''
      .`ヽ、       |:| ヾl.ヾ::::::::::| .||        :::::::::  l
        .\_    -''lヾ ヘ:、.ヘ;;_;ノ ノレ            .l
          .ヾ=,,,_   .ヘ  ,ヾ_,,=..''´....      _,,,   /
           ヽ .i'`''‐--.〉''´  .ヽ::::::::  _,,, -‐'''´:::::l ./.|      drop tableは1日10回な!
.\          ヽ`ニ /     l.   /:::::::::::::::::::::::/ i''ヘ .l
  `ヽ         .l-‐''l      /   .l:::::::::::::::::_;;-ヘ l ヽ ヘ
   ./.`iヽ       .|ヽ|     ./ ,,,,,,,_.ゞ,,, -‐''ヽ. |.| .| ヾ.、.ヽ
  / /|.| ヽ      .| .|    /ヽ     /:::::ヾ .| ,l '| .l.l '|ヽ.、.ヽ
// /./.|,, -'''''''''''''''-.、.'-<    .|  ヽ   /:::::::::lト''´ .| | | .i.| .ヾ.、.ヽ
/ / /./        ヽ,.`   .l   ヽ,'ノ/ ヾ_;;;l.l   |/ .l l |  ヾ.、lヘ
  ./ .//l          i    |    .ヾ   |:::::|.|  .|' l//   i.|| i.|

327 :NAME IS NULL:2008/08/25(月) 15:47:23 ID:???
VIEWでつけた名前を忘れたのですが、調べる方法はありますでしょうか?

328 :NAME IS NULL:2008/08/25(月) 17:54:12 ID:???
SHOW FULL TABLES

329 :NAME IS NULL:2008/08/25(月) 18:42:35 ID:???
>>328
d

330 :NAME IS NULL:2008/08/26(火) 19:07:37 ID:???
SELECT maildir FROM userdata WHERE username=%u

というメールサーバからメールディレクトリを取ってくるクエリがあるのですが、
「%u」だと、たとえばhogehoge、というユーザ名しかとらないので、
これに「@sample.jp」を強制的につけて

SELECT maildir FROM userdata WHERE username=CONCAT(%u, '@sample.jp')としたのですが、

Aug 26 19:02:07 main postfix/virtual[7777]: warning: mysql query failed: Unknown column 'hogehoge' in 'where clause'
と出てきました。
どのように文字列を結合すればいいのでしょうか?

331 :NAME IS NULL:2008/08/26(火) 21:37:22 ID:1ujB939S
UPDATEについて質問です。

例えば、フィールド(sort)が100より大きい場合は
+100ずつ加算して更新する

と言うような事って出来るのでしょうか?

332 :NAME IS NULL:2008/08/26(火) 21:48:19 ID:???
UPDATE table
SET sort = sort + 100
WHERE sort > 100

333 :NAME IS NULL:2008/08/26(火) 23:08:32 ID:???
>>330

勘だけど
SELECT maildir FROM userdata WHERE username=CONCAT('%u', '@sample.jp');

%uじゃなくて'%u'じゃない?

334 :NAME IS NULL:2008/08/27(水) 12:24:17 ID:tjPXlk5i
「force index」と「use index」はどのように使い分けるといいのでしょうか?

以下のような説明を見つけましたが、
--------------
異なる点として、この構文の場合、テーブルのスキャンは非常にコストがかかる
という前提に立つ。
つまり、テーブルのスキャンが実行されるのは、どのインデックスを使用しても
テーブル内のレコードを検索できない場合に限られる。
--------------

意味が分かりません。
非常に大きなテーブルの場合は force がいいという意味なのでしょうか?


335 :NAME IS NULL:2008/08/27(水) 16:06:23 ID:???
MySQL5で、設問テーブルが
tableA
mid | cid | dat
-----+-----+-----
 1 | 1 | A |
 2 | 2 | B |
 3 | 1 | C |
 4 | 1 | D |
 5 | 2 | E |
 6 | 1 | F |
としてあり、

その設問に対して複数回答者の解答データ用として
tableB
uid | mid | res
-----+-----+-----
 1 | 1 | 1 |
 1 | 3 | 0 |
 1 | 6 | 1 |
 2 | 2 | 1 |
 2 | 6 | 0 |
 3 | 1 | 1 |
 3 | 4 | 0 |
 3 | 5 | 1 |
 3 | 6 | 1 |
があります。

設問は(mid)をキーとして、回答者は(uid)をキーとしています。
上の例で、uid=1のユーザーは、設問1・3・5に回答していることになります。
resは正誤結果です。

このような状態で、cid=1の設問をリスト化し、
そこにuid=1のユーザーの正誤結果を同時に取得できないかと悩んでいます。

SELECT A.mid,A.cid FROM tableA AS A
LEFT JOIN tableB AS B ON B.mid = A.mid
WHERE A.cid = 1 AND B.uid = 1

だと、未回答の設問が引っかかりません。

以下のような結果を取得したいのですが、可能でしょうか?
mid | cid | res
-----+-----+-----
 1 | 1 | 1 |
 3 | 1 | 0 |
 4 | 1 | NULL|
 6 | 1 | 1 |




336 :NAME IS NULL:2008/08/27(水) 17:35:56 ID:GXeo9qij
複数のテーブルをJOINで結合するのと、
1つのテーブルの結果を取得して検索キーにする(つまりSQLを複数実行)
場合、どちらの方が処理が早くて、負荷が少ないのでしょうか?

正規化してテーブルを分けていたら、JOINばかりになって
SQLのコードが長くなったり、処理が増えて悩んでいます。

337 :NAME IS NULL:2008/08/27(水) 18:01:22 ID:???
そのキーや検索結果が膨大になる場合、
複数のSQLでやるほうが大変だと思うよ。
まあケースバイケースで。

338 :NAME IS NULL:2008/08/27(水) 18:45:19 ID:???
JAVAのPreparedStatementで設定できる「?」の個数って、8個が限界ですか?

JAVA 1.5.1
DBMS MySQLの5.0.27
JDBCドライバ mysql-connector-java-5.0.4

9個目の「?」に値をセットしようとするステップで以下のエラーが発生します。
java.sql.SQLException: Parameter index out of bounds. 9 is not between valid values of 1 and 8

カラムがたくさんあるテーブルだってあるだろうに、8個じゃショボすぎます・・・(私は11個あれば足りますが・・・)

もう決め打ちで動作テラモッサリ覚悟で行くしかないのか。


339 :NAME IS NULL:2008/08/27(水) 18:51:24 ID:???
>>335
すみません。
サブクエリを使うことで、自己解決しました。
スレ汚し、失礼いたしました。

340 :NAME IS NULL:2008/08/27(水) 20:24:23 ID:???
>>338
? が8個しかないのに pstmt.setObject(9, value) とかやってるんじゃない?

341 :338:2008/08/27(水) 21:08:48 ID:???
>>340










・・・その通りでございました・・・
「?」がシングルクオテーションに囲まれてました。
my.iniとかmysql-connector-java-5.0.4のソースを追っても的外れでしたw


助かりました、ありがとうございます!

342 :NAME IS NULL:2008/08/28(木) 06:25:22 ID:???
シェルの話になると思うのですが、
ダウンロードしたCSVをインポートしたいのですが、

------------
#!/bin/bash
wget http://example.jp/hoge.csv
mysql -u test
use test;
drop table 'test';
....
-----------

と記載しても、

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql>

で、止まってしまいます。
cronで回したいので、シェルスクリプトでmysqlのコマンドを打つことはできないのでしょうか?

パスワード無しの特権ユーザtestを作成しています。

343 :NAME IS NULL:2008/08/28(木) 10:30:10 ID:???
>>342
mysql -u test -e " \
use test; \
drop table test; \
....
"
でできないか?(改行前のバックスラッシュはいらんかも?ためしてない。)

でも自分なら、
---test.sql---
use test;
drop table test;
create table ...
load data infile .....
------------
みたいなファイルを用意して、

---test.sh---
#!/bin/bash 
wget http://example.jp/hoge.csv 
mysql -u test < test.sql
------------
ってするかな。(ってか、すでにそうしてる。)

344 :NAME IS NULL:2008/08/28(木) 17:52:34 ID:PqsfWYi1
aテーブルにレコードが1件有り、bテーブルにレコードが5件あるとします。
そしてcodeというフィールドを持ち、すべて1が登録されているとします。

SELECT COUNT(a.code) AS num FROM a INNER JOIN b ON a.code=b.code
WHERE a.code='1' GROUP BY a.code

としたのですが、結果のnumが5になります。
aテーブルのレコードが1つなのですから、同じcodeで結合したら
1件しかヒットしないと思ったのですが、どうしたらいいのでしょうか?
4.1.20を利用しています。

345 :NAME IS NULL:2008/08/28(木) 21:03:34 ID:???
GROUP BY

346 :NAME IS NULL:2008/08/28(木) 21:37:27 ID:???
ちょっとお聞きしたいんですが
画像を表示させる場合
<img src="$pic">でもいいんですかね?

347 :NAME IS NULL:2008/08/28(木) 22:32:01 ID:???
ダメだと思うよ

348 :NAME IS NULL:2008/08/29(金) 10:26:36 ID:???
誤爆か

349 :NAME IS NULL:2008/08/29(金) 17:39:25 ID:PbXS3bYh
このような質問ですみませんが、
ファイルをジャンル分けしようと思っています。

ジャンルごとにテーブルを作成するのと
一つのテーブルに全て詰めてしまうのとでは
どちらの方がパフォーマンス、効率がいいのでしょうか?

ジャンルごとに対象のファイル名を抜き出す場合は
やはりジャンルごとにテーブルを作った方がいいですよね。
こういった場合に一つのテーブルに詰める事の優位な点などはあるのでしょうか。

350 :NAME IS NULL:2008/08/29(金) 18:07:04 ID:???
>>348
誤爆っていう言い方は訂正するべきでしょ。

原爆症で苦しんでいる方がいるのに、
こういう終戦の月に無教養・非常識すぎるんじゃないの?

351 :NAME IS NULL:2008/08/29(金) 18:07:28 ID:???
普通は
>ジャンルごとにテーブルを作成
これはありえない。

352 :NAME IS NULL:2008/08/29(金) 18:08:13 ID:???
一発だけなら誤射かもしれない

353 :NAME IS NULL:2008/08/29(金) 18:09:17 ID:???
>>350
そういうのはこっちで。
http://etc7.2ch.net/denpa/

354 :NAME IS NULL:2008/08/29(金) 19:39:38 ID:PbXS3bYh
>>351
なるほど、では一つのテーブルで頑張ってみようと思います。
どこかで50万件ぐらいでデータベースが悲鳴を上げることは無い、
というのを見たのですが、検索の効率が悪いならば、と思ったのですが安心しました。

ありがとうございます。

355 :NAME IS NULL:2008/08/29(金) 21:21:38 ID:???
んとね、そこはクエリに対するインデックスの張り方がキモなわけでして。
適切に張ってある限りはテーブルを分けようが一緒だろうが
パフォーマンスはほとんど変わんないよ。

356 :NAME IS NULL:2008/08/29(金) 22:24:38 ID:PbXS3bYh
>>355
なるほどです。

>354の後からしばらく考えていたのですが、
実装としてはXMLの方が簡単そうな気がしました。
検索効率や、ファイルを削除した時の管理の楽さなどはdbの方が良さそうな気はしますが。

本当に参考になりました、ありがとうございます。
まだしばらく考えてみてみます。

357 :NAME IS NULL:2008/08/29(金) 23:05:49 ID:???
>>356
いや、メインカテゴリとサブカテゴリに分ければ良いだけじゃないか?
君の言う「ジャンル」というのが、ヤフオクで言う「コンピュータ」「音楽」
とかになるなら

コンピュータ(メインカテゴリ)
└ソフトウェア(サブカテゴリ)

でいいと思うけど。

358 :NAME IS NULL:2008/08/30(土) 00:55:06 ID:Ac0i/DJg
>>357
そうですね、そんな感じを想定してます。
ただサブカテゴリまで使わない感じの本当に単純なリストですが。

それと複数のカテゴリに登録する予定なので
xmlなどで「コンピュータ.xml」などとしてその中に登録していきリスト化してしまえば、と>356では考えたのですが、
table file
+--+----+-----+
| id | title | cate |
+--+----+-----+
| 1 | hoge| comp |
| 2 | hige | music|
| 3 | hage| comp |
| 4 | hage| music|
+--+----+-----+
とあったとき、sql の where を file.cate = "comp" というように絞った方がxml運用より楽そうですね。
それとxml運用ではディレクトリのファイル制限があった場合にカテゴリを追加出来なくなってしまいますしね。

解答者からちょっと嫌われそうな事ですが、
現在オライリーのPHP&MySQLを読書中(7章)でして、
まだMySQLの優位性などがよく分かってないので、
思考があっちらこっちら行ってしまってます。

解答の回答がおぼつかなかったりしてすみません。

359 :NAME IS NULL:2008/08/30(土) 11:26:45 ID:???
MySQLのチューニング関連の本って出てる?

360 :NAME IS NULL:2008/08/30(土) 11:32:20 ID:poqNHsYq
出てるけど、ほとんどのものはパラメーターの解説ぐらいなもの。
ただで読める、公式のレファレンスを読んだほうがいいのでは?

361 :NAME IS NULL:2008/08/30(土) 11:35:32 ID:???
>>360
d


362 :NAME IS NULL:2008/08/30(土) 11:42:02 ID:???
SQL質疑応答スレから移動してきました。
非常に基本的な質問で申し訳ありませんが、お願いします。
環境はMacOSX10.5上に自分でインストールしたMySQL5です。
サーバもクライアントも同一マシン上で動いています。

grant all on *.* to bbsuser IDENTIFIED BY 'bbs1234';
というコマンドで、bbsuserという名前でbbs1234というパスワードの
ユーザを作りました。
そして、ターミナルから
mysql -u bbsuser -p
でmysqlに接続しようとしたのですが、
Access denied for user 'bbsuser'@'localhost' (using password: YES)
というエラーが出て接続できません。

http://dev.mysql.com/doc/refman/5.1/ja/access-denied.html
のページも読んで、
mysql -u bbsuser
ならサーバに接続できることが分かったのですが、パスワードオプションを
つけるととたんにダメになってしまいます。
なぜなのか分からずに途方に暮れています。どうかお知恵を貸して下さい。


363 :NAME IS NULL:2008/08/30(土) 13:48:23 ID:???
GRANT ALL PRIVILEGES ON *.* TO bbsuser@localhost IDENTIFIED BY '********'

ON *.* だとユーザを分離する意味が薄れるんで、ON bbs.* とかに制限した方がイイ

364 :362:2008/08/30(土) 13:56:46 ID:???
>>363
ありがとうございます!早速やってみたらできました。
それと、ユーザが一部のデータベースにしかアクセスできないようにもしました。
本当にありがとうございます。

365 :NAME IS NULL:2008/08/30(土) 14:12:38 ID:???
>>358
だからその構造がおかしいだろ。

main_category
+-------+----+
| main_id |name|
+-------+----+
|  1 | hoge |
+-------+----+

sub_category
+------+------+-----+
| sub_id |main_id|name|
+------+------+-----+
| 1 | 1 |test |
+----+---------+----+

こうすればいいだけだろ。

366 :NAME IS NULL:2008/08/31(日) 02:04:32 ID:Fg60kWc8
>>365
返信遅れてすみません。

なるほどです。
sub_categoryの方からidを引き出して
そのidを使ってmain_categoryから引き出せば効率がいいんですね。

やはり文字列よりも整数で抜き出す方が壮大に早いんですね。
ありがとうございます、そうします。

367 :NAME IS NULL:2008/08/31(日) 09:58:12 ID:???
> やはり文字列よりも整数で抜き出す方が壮大に早いんですね。

当たり前だろw
文字列だって所詮は文字コードの数値比較だけど、桁数が全然違うしな。

368 :NAME IS NULL:2008/08/31(日) 21:01:11 ID:Uz/XNAcD
ご教示ください。

ORDER BYでソートをしたとき、
特定のレコードが何番目になるかを調べるにはどのようにすればよいでしょうか?
また、その際にリストと同時に、その番目を取得する事は可能でしょうか。

たとえば、SELECT ID,NAME,AGE FROM PERSON ORDER BY AGE;
この時にID=10のレコードがリストの何番目になるのかを知りたいのです。

369 :NAME IS NULL:2008/09/01(月) 09:24:43 ID:???
たぶんoracleのrownumのようなものを期待しているのだろうけれどありません。
何とかする方法はFAQなのでmysql rownumでググれ。

370 :NAME IS NULL:2008/09/01(月) 11:25:43 ID:knw+y/WY
order byを書かずにselectした場合の順番って順不同ですか?
あるいは、insertされた順でしょうか。
内部的に時刻情報を保存しているのは無駄だから、やっぱり順不同…?

371 :NAME IS NULL:2008/09/01(月) 11:28:11 ID:???
順不同というか、単なる集合でしょ。

372 :NAME IS NULL:2008/09/01(月) 11:49:34 ID:???
集合なので順番という概念はないとすると、そもそもORDER BYの存在自体が意味不明でしょ。
現実的なデータハンドリングを考えないと。

で、結論だけど、データの発見順とでもいうところか。
無駄にランダマイズしているわけでもないので、環境と状況が同じなら順番も同じではある。
しかし環境と状況に依存するということはつまり、順不同と考えておくべきである。

373 :NAME IS NULL:2008/09/01(月) 11:54:50 ID:???
>>372
名答だ。

374 :NAME IS NULL:2008/09/01(月) 12:04:22 ID:Sur8/I/j
lsとかglobみたいな感じか

375 :NAME IS NULL:2008/09/01(月) 12:12:30 ID:???
ありがとうございました

376 :NAME IS NULL:2008/09/05(金) 04:24:49 ID:???
MySQLと連携しているWebアプリケーションを標的としたSQLインジェクション攻撃
ttp://www.isskk.co.jp/soc_report/SOC_report_20080812.html
今回の攻撃は、MySQL の拡張機能である ”INTO OUTFILE” を使用して、
指定したディレクトリに jatest4.php というファイルを保存するというものでした。
作成された jatest4.php は単純に文字を表示するだけの php コードであり、
データベースに保存されている情報を抜き出してファイルに書き込む行為は行っておりませんでした。
攻撃者は、Web サーバ上に作成された jatest4.php にアクセス可能か確認することで、
攻撃の成否を確認し、サーバが脆弱であるか確認を行っていると考えられます。

127 KB [ 2ちゃんねる 3億PV/日をささえる レンタルサーバー \877/2TB/100Mbps]

■ おすすめ2ちゃんねる 開発中。。。 by FOX ★
このスレを見ている人はこんなスレも見ています。(ver 0.20)
【AWS】Amazon Web Services 使い専用スレ 3 [Web収入]
.htaccess質問コーナー Part7 [Web制作]
Fedora (Core) 総合スレッド Part 42 [Linux]

新着レスの表示

掲示板に戻る 全部 前100 次100 最新50
名前: E-mail (省略可) :


read.cgi ver 05.0.7.3 2008/07/26
FOX ★ DSO(Dynamic Shared Object)