MySQL 総合 Part15 at DB
[2ch|▼Menu]
1:NAME IS NULL
08/11/24 06:20:30
快速 RDBMS、MySQL の総合スレです。
前スレ[MySQL 総合 Part14] スレリンク(db板)
[関連スレと過去ログ]
URLリンク(find.2ch.net)
URLリンク(makimo.to)

[MySQL Developer Zone] URLリンク(dev.mysql.com)
[MySQL 日本語リファレンスマニュアル] URLリンク(dev.mysql.com)
[MySQL Internals Manual] URLリンク(dev.mysql.com)

[MyNA] URLリンク(www.mysql.gr.jp)
[MLja] URLリンク(lists.mysql.com)

ここで質問をする前に、MyNAでのFAQを最初に確認しましょう。
URLリンク(www.mysql.gr.jp)
MyNAでの「心得の条」
URLリンク(www.mysql.gr.jp)

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


2:NAME IS NULL
08/11/24 06:21:39
【関連ツール及びユーティリティ】

[phpMyAdmin] URLリンク(www.phpmyadmin.net)
[phpMyBackupPro] URLリンク(www.phpmybackuppro.net)
[MySQLCC] URLリンク(www.mysql.com)
[MySQL-Front] URLリンク(www.mysqlfront.de)
[mytop] URLリンク(jeremy.zawodny.com)
[Common SQL Environment] URLリンク(www.hi-ho.ne.jp)

MySQL ABでの各種GUIツールはMySQL GUI Toolsとして統合されています
(WorkbenchはGUI Toolsから独立しました。)
URLリンク(dev.mysql.com)
・MySQL Administrator
・MySQL Query Browser
・MySQL Migration Toolkit

URLリンク(dev.mysql.com)
・MySQL Workbench

【関連書籍】

[MySQL Books]
URLリンク(dev.mysql.com)
URLリンク(www.amazon.co.jp)
URLリンク(www.amazon.co.jp)


3:NAME IS NULL
08/11/24 16:22:57 pg62ATq6
記念すべき3ゲット!


ルシーン(ルシーン-ja)とsenとアパッチantをダウンロードしたのですがインストール方法が一切分かりません。
windowsなのでexeファイルが無いとお手上げです。
windowsのインストールを詳しく書いたサイト無いでしょうか?

4:NAME IS NULL
08/11/24 17:07:38 pg62ATq6
それかmecabのperlモジュールのインストール方法を教えて下さい。
その中のREADMEファイルにはLinuxのインストール方法さか書いてありませんでした。
よろしくお願いします。

5:NAME IS NULL
08/11/24 20:09:54 pg62ATq6
過疎?

6:NAME IS NULL
08/11/24 20:43:03
MySQLと関係ないから誰も絡まないんじゃないの?

7:NAME IS NULL
08/11/24 21:06:31
全角が含まれない物を検索したいのですが
REGEXP "^[¥x00-¥x7F]*$"では駄目でした。
01でも20でも同様です。どなたか教えてください。

8:NAME IS NULL
08/11/24 22:59:26 pg62ATq6
>>6
mysqlで日本語の文字列を正しく早く検索するならmecabやルシーンは必須です。
みんなインストールせずにmysql使ってるのかな?
本当はmysqlの標準fulltextindexで日本語が対応してればいいんだけど。

9:NAME IS NULL
08/11/25 08:34:56 LcwULAiS
複数の行を、一行にまとめたいんです
hoge
fuga
piyo

hoge,huga,piyo

文字列版のSUMみたいな関数があれば出来ると思うのですが、
そういうものはないようです
どうすればできますか?

10:NAME IS NULL
08/11/25 08:55:56
hoge=hoge+fuga+piyo

11:NAME IS NULL
08/11/25 09:00:40
GROUP_CONCAT

12:NAME IS NULL
08/11/25 16:59:54
>>8
いっそVMWare-Serverとかで仮想環境作ってLinuxでやるとか

Win系でサーバーいじってないんでわからんです

13:NAME IS NULL
08/11/25 18:30:20
>>11
それが4.0系で使えればなぁ…

14:NAME IS NULL
08/11/25 21:48:21
削除フラグってどういう名前にしてる?

15:NAME IS NULL
08/11/26 01:24:56 5XmocAv7
オライリーのクックブックに、
varchar binary
のカラムが出てきたので、phpMyAdminで設定しようと思ったのですが、
設定する場所がないようです。バージョンは5.0.51です。
varcharをケースセンシティブにするには、コレーションを
utf8_bin
にすればいいのでしょうか?

16:NAME IS NULL
08/11/26 11:38:45
workbenchだけど
たかがIDEなのにfkはってテーブルドラッグするとC2Dでもカクカクしまくり
明らかに作りがおかしい


17:16
08/11/26 11:53:59
ちなみに、テーブル20
fk10ぐらいかな
後はテーブルエディター表示してるくらい
E6300 メモリ2GB 7900GS

まだまだ良いツールとはいえないな>workbench

18:NAME IS NULL
08/11/27 00:06:02 AvSF7aUT
テーブルAとテーブルBがあり、Bの主キーがSerialで、AがBの主キーを参照
するとき、型はどうすればいいんですか?

19:NAME IS NULL
08/11/27 18:38:26
5.1 GAでた!
URLリンク(dev.mysql.com)

20:NAME IS NULL
08/11/27 18:58:20 kyWMw81w
パスワード忘れて直したいんですが
バグちゃって直せないので設定ごと消したいのですが
どうすればいいですか?suse10.1 mysql5 です

21:NAME IS NULL
08/12/01 01:46:21

登録が必要らしいけど、MySQLユーザコンファレンス2008
の資料がダウンロードできるみたい。
URLリンク(jp.sun.com)



22:NAME IS NULL
08/12/01 19:37:18
PHPプログラムから外部接続を実装しているのですがコネクション数が1以上にならなくて困っております。
状況はこんな感じです。

Aサーバ(master DB)xxx.xxx.xxx.xxx
Bサーバ(slave DB) yyy.yyy.yyy.yyy

AサーバはWEBサーバも兼ねています。
select文はすべてslaveに
slaveのshow statusの結果、Max_used_connectionsが1となっていました。
netstat -n|grep ':3306'(外部接続のポート)を見てもコネクションが1つしかないようです。

外部接続時の同時接続数を増やすにはどうしたらいいでしょうか?


23:NAME IS NULL
08/12/02 07:23:01 YOG6P4GK
MySQLのクエリキャッシュって、
該当のテーブルが少しでも変更されたら、
そのテーブルに関するキャッシュがすべて破棄されるのですか?
それとも、変更された行に関わるキャッシュのみ破棄されるのですか?

24:NAME IS NULL
08/12/02 07:27:24
つーか
SQLの解釈部分だけキャッシュしてんじゃねーの


25:NAME IS NULL
08/12/02 09:00:40
該当のテーブルじゃないよ
ひとつでもDMLが走ったら
サーバー全体のクエリキャッシュを破棄する

読み取り専用のDBじゃないと
基本的に役に立たない

26:NAME IS NULL
08/12/02 15:37:55
えっ・・そうなんですか
それは本当に使い道が限定されてますね
ありがとうございました

27:22
08/12/02 17:18:56
どなたかお願い致しますm(_ _)m

28:NAME IS NULL
08/12/02 18:00:01
誰も使ってないから接続数1(自分だけ)なんじゃないの?

29:NAME IS NULL
08/12/03 07:09:56 Tn2R8xLf
日本語の設定について質問です。

現在、MySQLの日本語の設定を、CHARSET=latin1として使っているのですが、
普通に日本語を使えています。
でも、これでいいかどうか不安なのですが、シフトジスとかEUCに変更するべきでしょうか。。。?


30:NAME IS NULL
08/12/03 10:14:44
バージョンによる。
今後はUTF-8にしよう。

31:NAME IS NULL
08/12/03 12:28:48 G5L2Kaa9
お助けを!。テーブルから最新5件を取りたいと思っています。
idがオートインクリメントで10件データ入っており(1-10)
SELECT id,name FROM test_tbl WHERE LIMIT 5 ORDER BY id DESC
これで登録された最新を5件取得できたのですが
10,9,8,7,6 という順になってしまいます(DESCなので当然なのですが)
これを6,7,8,9,10として取得できる方法はあるのでしょうか。


32:NAME IS NULL
08/12/03 17:30:56
select id, name from (select id, name from q31 order by id desc limit 5) q order by id;

33:NAME IS NULL
08/12/03 21:33:05
こんばんは
現在MYSQL+PHPで本のデータベースを作ってます。

本にも色んな種類があるので別けたいのですが

コンピュータ
PHP
XML
MYSQL


etc

料理
日本料理
フランス料理


etc

とこんな感じに別けたいのですが どのような設計をすればいいのでしょうか?
よろしくおねがいします

34:NAME IS NULL
08/12/03 22:19:51
>>33
>現在MYSQL+PHPで本のデータベースを作ってます

どこまで作ったの?

35:NAME IS NULL
08/12/03 22:58:26
今は接続のとこまで作りました^^

36:NAME IS NULL
08/12/03 23:24:01 KgTn2hhN
>>30
おれも、latin1で普通に日本語使っているんだが、だめなのか、、、?
そもそも、latin1って日本語の文字コードじゃないはずなのに、なぜ日本語使えてるのかわからん。
でも、使えてるからまぁいいやーって思ってるけど、ちょっと気になるなぁー、、


37:NAME IS NULL
08/12/04 08:26:18
>>36
MySQL は latin1 として処理している。
クライアントプログラムが SJIS(とかEUC)と思ってそれを入力&表示しているだけ。

困ってないなら別にいいけど、charset はちゃんとしておいた方が無難。

38:NAME IS NULL
08/12/04 14:51:47
スレリンク(hp板)より誘導されて参りました.

現在CMSをサーバへインストールしているのですが,MySQLデータベースサーバの設定を行っている際に
Access denied for user'データベースのユーザー名'@'localhost' (using password: YES)と怒られました.

当方の環境ではデータベースのあるサーバがlocalhostではないので,
これを任意のアドレスに変更したいのですが具体的な手順が分かりません.

解決策について,どうかご指導願います.

39:NAME IS NULL
08/12/04 18:51:18
それはMySQL側でどうこうする話じゃないだろ。

40:NAME IS NULL
08/12/04 23:06:17
>>38
接続するときにホスト名を指定するといいよ。

41:38
08/12/05 00:02:32
>>39
結局は繋ぐほうの問題,ですか.

>>40
わかりました.頑張ってみます.

42:NAME IS NULL
08/12/06 23:24:37
rootのパスワードを忘れてしまい、下記のようなエラーメッセージが出ました。

ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)

対応策はググって見つけたのですが、それはすべてリナックス向けで、私の環境は
ウインドウズです。ウインドウズ向けの対策をご存じの方、ご教授いただけないで
しょうか?

どうぞ宜しくお願い致します。

43:NAME IS NULL
08/12/06 23:51:15
LinuxもWindowsも対策は同じだと思うけど。試してみたの?

44:42
08/12/06 23:53:15
申し訳ございません、自己解決しました。

45:NAME IS NULL
08/12/07 14:10:23 oP/f2X5+
指定されたデータ型より大きなものを入れた場合にwarningsが発生しますが、
「Data truncated; out of range for column 〜」

以下のようにデータ型「date」の所にそれより大きな文字列を入れてもwarningsが発生しません。
---------------------------
create table test(d date);
insert into test(d) values('2004-01-02 03:04:05');
show warnings;
---------------------------
warningsを発生させる方法はないでしょうか?
宜しくお願いします。

MySQL4.1

46:NAME IS NULL
08/12/08 18:58:12
MySQL5を使ってるんですが、重いクエリの時は、すべて(4個)のCPUを同時に使ったりしてくれないのでしょうか?
出来れば、4個全部使って欲しいのですが、方法は無いんですか?



47:NAME IS NULL
08/12/08 19:15:33
MySQL、PostgreSQLにはないよ
Oracleにはあるよ

48:NAME IS NULL
08/12/08 20:55:27
>>33

49:NAME IS NULL
08/12/09 00:02:49
>>46
重い原因がCPUなら、ちゃんと使ってくれるはず。
IO負荷で重いんだったらCPUは使いきれない。

50:NAME IS NULL
08/12/09 01:22:52 PYU51CNx
カラムの文字列の中の「/」の数を数えたいのですが、
適当な関数がありません
どうしたらいいでしょうか?

51:NAME IS NULL
08/12/09 01:42:14
関数つくればいいんじゃね?

52:NAME IS NULL
08/12/10 17:03:55

MySQL5の限界を上げたいのですが、どこをチューニングしればいいのか教えてください。
基本的なチューニングは出来てると思います。

サーバーは、DB専用で4CPU メモリ8GB

max_connections 許容接続数 2000 本
Max_used_connections 過去発生した最大接続数 916 本
(mysql接続のみの数字)

916本で、MySQLに接続が出来なくなってしまいます。
これを2000まで持って行きたいのです。

CPUやメモリは、余裕があります。

アドバイスを下さい。神様。

53:NAME IS NULL
08/12/10 19:41:16
OSの種類とバージョン
MySQLのバージョン
32bit/64bit
ulimit -aの出力
917本目をつなごうとしたときのエラーメッセージ

ぐらいは書かないと神様でも分からないと思うよ


54:NAME IS NULL
08/12/10 19:55:29
そうですよね。。
OSはdebian Etch 64bit
Linux db 2.6.18-6-amd64 #1 SMP Fri Oct 10 05:11:18 UTC 2008 x86_64 GNU/Linux

サーバー側:MySQL5.0.32-Debian_7etch8-log
クライアント側:MySQL5.0.32


エラーは出てないですが、WEBサーバーから接続が出来なくなってしまいます。
しばらくしたら、接続出来るようになるのですが・・。

まず、MySQLへの接続なしで、負荷ツールで負荷をかけても問題なく処理されるのですが、
MySQLへの接続をすると、しばらくして接続が出来なくなります。

Apache2とMySQL5のサーバーは物理的に分かれています。


55:NAME IS NULL
08/12/10 20:58:17
max_connectionsを増やすときは、open_files_limitも増やす必要がある。

sql/mysqld.cc
static int init_common_variables(

 max_open_files= max(max(wanted_files, max_connections*5), open_files_ 
 files= my_set_max_open_files(max_open_files);
 /* ↑ここでulimitのopen files制限に引っかかるなどしてしまうと */
 if (files < wanted_files) {
  if (!open_files_limit) {
   max_connections= (ulong) min(files-10-TABLE_OPEN_CACHE_MIN*2, max_connections);
   /* ↑ ここでmax_connectionsを減らされてしまう。

mysqldのログでこんなのが出てないかも確認してみて。
[Warning] Changed limits: max_open_files: 1024 max_connections: 886 table_cache: 64

でもデータベースに900接続って時点でわりと異常なので
アプリケーションがきちんと切断してるかも確認してください。

56:NAME IS NULL
08/12/10 22:05:22
ありがとうございます。

早速、ログを見てみましたけど、何も吐き出されてませんでした。

負荷ツールを使ってデータを取ってみたのですが、下記のコマンドで1800まで行って、実際にDBへ繋げたのが140まで下がってきた所でした。
#netstat -an | wc -l 
1800


もしかして、何か根本的におかしいのかな。

アプリ側では、明示的に切断はしてませんが、、スクリプトが終われば、勝手に切断されるんですよね??
PHPとPDOで接続しています。

あと、よく分かりませんが、
Max_used_connections 過去発生した最大接続数 1786 本 まで行きました。
けど、ページが表示されない・・待ちの状態で、DB接続出来なくタイムアウトに。

なんでしょうね・・。

57:NAME IS NULL
08/12/10 23:21:53
色々調べてみましたが、netstat -anのコマンドで見てみると「ESTABLISHED」だらけになってました。

#netstat -an | wc -l で 140以下になればうまく接続出来るようです。



58:NAME IS NULL
08/12/11 03:42:57
linux同士でレプリケーションをしているときに、
cronで同期ができているかどうかをチェックするにはどのようにすればいいでしょうか?
レプリケーションができているかどうかを
シェルスクリプトから確認するにはどのように行えばいいでしょうか?

59:NAME IS NULL
08/12/11 13:37:08

自己レスです

>>56
WEBサーバーからDBサーバーへ接続が出来ないときでも、
DBサーバーからMySQLへアクセスする事が出来ました。

恐らく、ネットワーク周りが原因なのかなぁと。

60:NAME IS NULL
08/12/11 14:17:19

質問ばかりですいません・・。

mytop で見てると、Userが「unauthent」になっているのが多いのですが、これはどういう意味なのでしょうか?

61:NAME IS NULL
08/12/12 10:46:46 Wbs0cP7F
winのMySQL5.1で日本語の値をinsertしようとすると、
insert into hoge values("あああ");
でenterしたあと延々と>で入力を促されて
コマンドが実行されません。

文字コード周りが原因かと思って調べた結果my.iniを書き換えたのですが直りません。
どなたか原因等分かる方居ましたらご教示ください。
show variables like "char%";
を実行した結果は以下のとおりです。
| 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

62:NAME IS NULL
08/12/12 11:12:54
AUTO_INCREMENTでPRIYMARY KEYである行(行の名前はid)を追加するSQLを
下記のように組みました。

alter table input add column input int PRIYMARY KEY(id) AUTO_INCREMENT;

上記だとエラーだとになります。どこがおかしいのでしょうか?
ぐぐってみてもわからないので質問させていただきました。ご教授頂ければ
幸いです。

63:62
08/12/12 11:27:07
タイポがありました。正しくは
alter table input add column input int PRIMARY KEY(id) AUTO_INCREMENT;
です。

64:NAME IS NULL
08/12/12 12:17:36
>>60
back_log関係あるかなあ?

>>61
Windowsだったら全部utf8ではダメ。以下の設定が基本。
| character_set_client | cp932 |
| character_set_connection | cp932 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | cp932 |
| character_set_server | utf8 |
| character_set_system | utf8 |


65:61
08/12/12 18:38:35 HVvqI17v
>>64
レスありがとうございます。
なんとか分からないなりにその設定になるようmy.iniを書き換えてみたのですが、
テーブルに格納は出来たものの、取り出した時に文字化けしてしまいます。

show variables LIKE 'char%'の結果は>>64のとおりに出来たのですが、
おそらく自分のCLIENT SECTIONとSERVER SECTIONの記述が間違っている部分がある気がします…。
すいませんが、正しいCLIENT SECTIONとSERVER SECTIONの内容を教えて頂けないでしょうか?

66:NAME IS NULL
08/12/12 19:41:04
[mysqld]
character_set_server = utf8

[client]
default_character_set = cp932

ねんのため一回データベースとテーブルつくりなおしてみて。


67:NAME IS NULL
08/12/12 23:47:06 EUNHJOeo
質問します。
最近slow.logなんてものを知ったばかり素人です。

このslow.logが、例えば100MBの時と1KBの時とでは
処理速度に極端な差が出たりするものなのでしょうか?

そりゃ100MBの方が遅くなるだろうというのは感覚として分かるのですが。

68:NAME IS NULL
08/12/13 00:54:19
スロークエリを吐くこと自体の負荷は
100MBのファイルに100バイト追記するのも
1KBのファイルに100バイト追記するのも変わらんよ。

それはおいといて、
スロークエリログが100MBも出るってことは
そもそもチューニングされてないってことだよね。
そのデータベースは遅いだろうね。

69:NAME IS NULL
08/12/13 01:12:14
>68
ありがとうございます。
となると、150MBのslow.logを消した昨日辺りから妙に動作が軽いのは
ログのサイズには無関係か……


>100MBも出るってことは
ですよねぇ。

パソコンに詳しいからと言う理由で唐突にサーバ管理を任されてしまい
どこからメンテナンスすればいいものか……。

70:NAME IS NULL
08/12/14 02:34:41
どなたかお助けください。

max_allowed_packetを4Mにセットした上で、マルチプルインサートを使って
9000件程度のデータを4MB弱のSQL文にまとめて実行しているのですが
Packets larger than max_allowed_packet are not allowed.エラーが
出てしまいます。

登録すべきデータ件数が多いので、出来るだけまとめて登録したいのですが
SQL文が実際にはどのくらいのパケットサイズになるかを見積もるには
どうすればよいのでしょうか? どこまで削れば通るのか皆目見当がつかないもので…orz

71:NAME IS NULL
08/12/14 05:45:22
max_allowed_packet を 100M とか設定して、通るまで減らしてみたらだめなの ?

72:NAME IS NULL
08/12/14 11:03:09
>>71
ご指摘ありがとうございます。データ総数が100万件を軽く超えるので
少しでも高速化するため、プログラム内でmax_allowed_packet値を取得して、
それと見比べながらSQL文を構築、限界まで伸ばしてから実行、という
手順を取っています。全件つなげても流石に100MBは行かないと思いますが
限られた範囲で頑張れたらなぁ、と。わがままなのですが。

なお、SQL文を短くするほうで試してみましたところ、
9215件分の 3,825,253byte のSQL文は通りましたが、
9425件分の 3,911,372byte はだめでした。max 4,194,304byte に対して
300KB近くの余裕が必要ということで、MySQL内部での処理時には1件毎に
何らかのヘッダが付いて処理されていると推測しています(流石にSQL
1文に300KBは無いと)。で、そのヘッダサイズが分かれば解決!と
思っているのですが、そもそもこの考えが正しいのか皆目見当が付きません。
MySQL内部でのパケット構造はググってもなかなか見つからないもので
引き続きお知恵をお貸しいただければ幸いです。

73:NAME IS NULL
08/12/14 13:29:40
そこまでするなら、パケットダンプして確認してみたら?

74:NAME IS NULL
08/12/14 15:10:59
そのまえに50件ずつINSERTするのと5000件ずつINSERTするので
どれだけ性能差があるのか測ってみたら?

一般的には10〜100件あたりに最適値があるんだぞ

75:NAME IS NULL
08/12/15 17:21:29
質問です。

mysql4.1までテーブルを作った際に、
数値型のカラムのデフォルト値は、明示しなくても0になりましたが、
現在試している5.0.67ではデフォルト値がNULLになってしまいます。
これは5.0からは明示しなければいけない仕様に変わったんでしょうか?
テーブル作成クエリの例と作成したカラムの内容は以下のとおりになります。

クエリ
create table test_table( col int not null );
カラム内容
+-------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| col | int(11) | NO | | NULL | |
+-------+---------+------+-----+---------+-------+

すみませんが、どなたか教えていただけますよう、よろしくお願いいたします。

76:NAME IS NULL
08/12/15 19:01:03
sourceコマンドで大量のinsert文を入れてるんだけど
1行目だけ必ずエラーが出る
その1行目を手動で入れるとエラーは出ない
2行目以降は全て正常に入る

なんだろう?
UTF-8に統一しててエンコード問題でもないと思うんだけど

77:NAME IS NULL
08/12/15 21:36:40
T字型ER手法がメジャー

78:NAME IS NULL
08/12/15 22:36:59
>>75
SQLモードによるんだそうだ。
URLリンク(dev.mysql.com)

>>76
BOMがついてるとか?
ためしてないけど

79:75
08/12/16 13:26:55
>>78
ありがとうございます。
どの環境でも同じように使うには、
面倒ですが、デフォルト値は明示したほうがよさそうですね。

80:NAME IS NULL
08/12/16 14:03:07
develとかserverとかclientとかあるけど具体的な違いってなんなの?

81:NAME IS NULL
08/12/16 14:27:31
>>80
名前の通り。そのまんまの用途だと気づけ。

82:NAME IS NULL
08/12/16 15:29:50
用途の違いは分かるけど具体的な機能の違いはなんなの?って聞いてるの

83:NAME IS NULL
08/12/16 18:04:26
全文検索で、特定のレコードだけインデックスしないって出来る?


84:NAME IS NULL
08/12/16 21:05:36
>>82
clientはサーバになれないし、develがないと MySQL ライブラリを使用するプログラムをコンパイルできない。

MySQL全体を用途毎にわけただけ。

85:NAME IS NULL
08/12/16 22:16:11
mysql5.01のバッチモードにて、あるテーブルに条件にあるデータが入っていた場合、後続バッチを強制中止させたいのですが。
select 1/count(*) from hoge;
として、レコード0の場合もエラーになりません・・・
set session sql_mode='STRICT_ALL_TABLES';も、insert/updateにしか0除算エラーにしてくれないらしく困っています。

なにかselectでエラーとして中止させる良い方法は無いでしょうか。

86:NAME IS NULL
08/12/16 22:49:31
>>85
URLリンク(forums.mysql.com)
なんかUDFつかえとかちょっとトリッキーみたい。
素直にストアド書くか、C/Perl/Javaとかで書いたほうがよさそう?

87:85
08/12/17 11:06:00
>>86
ユーザ定義関数からraiseですか。
割とどんな事でもクエリが落ちない仕様っていうのは、mysqlの利点にもなってるのでしょうね・・・

>素直にストアド書くか、C/Perl/Javaとかで書いたほうがよさそう?

ですねぇ。
ありがとうございました。


88:NAME IS NULL
08/12/17 14:35:32
これはどういう意味?組み合わせアルゴリズムってjoinの事?

URLリンク(dev.mysql.com)
組合せアルゴリズムを使用して処理されたビューに、
インデックスを使うことは可能です。
しかし、誘導可能なアルゴリズムで処理されたビューは、
その背後にあるテーブルのインデックスを活用することができません
( 一時テーブルの作成中にインデックスを使用することはできます ) 。

89:NAME IS NULL
08/12/17 15:05:46
index関係調べてるとmysqlなんて使うべきじゃなかったと後悔するな・・・

90:NAME IS NULL
08/12/17 15:15:57
userテーブルにprofileフィールドやareaフィールドやcategoryフィールドがあったとして
3つ全て別のテーブルへの参照だったとする
この場合、それら3つのフィールドへの全文検索を行うにはどうするか?

正規化したらindex使えなくなるとか無いだろ・・・
他のRDBMSはビューに対してインデックス張れたり
オプティマイザがもっと賢かったりインデックスが強力だったり
こういうところで躓かない高機能さがある

91:NAME IS NULL
08/12/17 15:18:05
たぶん最善案はprofile,area,category全部に個別に全文インデックス張って
3つサブクエリ発行して積集合を求める方法
他のRDBMSの3倍+α(積集合負荷)の処理時間になりそう

あー

92:NAME IS NULL
08/12/17 15:41:54
>>91の方法でもクエリされたキーワード(AND)全部含んでないと該当しないから
結局複数テーブル間の検索は出来ないわw

おわった

93:NAME IS NULL
08/12/17 15:44:20
積集合じゃなくて和集合じゃないか?
オプティマイザがタコいのには狂おしいほど同意するけど

94:NAME IS NULL
08/12/17 16:05:54
と言うか、結合後のテーブルに対してインデックス出来ないとダメ
テーブルをまたいだインデックスを張れるか、
ビューに対してインデックスを張れないといけない
MySQLには探したところそういった機能は無い(代替になるようなものも)

正規化を崩してパフォーマンスを求める場合がある、と言われる典型的な例だと思う。
MySQLではareaテーブルとか作っちゃいけないんだよ。

95:NAME IS NULL
08/12/17 16:07:50
昔からある問題のはずなのに未だ解決されてないところを見ると
MySQL自体使わないほうが良いと思ったわ
開発停滞してるだろこれ

96:NAME IS NULL
08/12/17 17:28:57
新機能の不具合が多すぎて
パフォーマンスまで手が回ってないんだよ。

97:NAME IS NULL
08/12/17 17:40:55
MySQLって確かC言語(笑)で実装されてるよね
そりゃ開発も停滞するわ
そんなもん普及させるなよな・・・

98:NAME IS NULL
08/12/17 17:58:35
いや、Cなら普通では。PostgreSQLもCですよ?

MySQLはCとC++のハイブリッド。
ソースを見てグローバル変数のすさまじい数に絶望するといいよ!


99:NAME IS NULL
08/12/18 09:28:34 PtYRnTev
SELECT の結果を使って UPDATE でフィールドを更新
することはできるのでしょうか?

UPDATE tbl SET (tbl.a, tbl.b) = (SELECT なんとかかんとか

100:NAME IS NULL
08/12/18 09:57:44
できた

mysql> update q99 set col2 = (select ename from emp where empno = 7788);
Query OK, 1 row affected (0.15 sec)
Rows matched: 1 Changed: 1 Warnings: 0

mysql> select * from q99;
+------+-------+
| col1 | col2 |
+------+-------+
| 1 | scott |
+------+-------+
1 row in set (0.00 sec)


101:NAME IS NULL
08/12/18 10:27:09 PtYRnTev
>>100
確認ありがとう,そしてすんまそん,
俺の言葉足らずで.
>>99 の例みたいに,二つ以上のフィールドを
SELECTの結果で一気に更新したかった.
で,SET 節を (x,y,z) = みたいにまとめて
書く方法があるのかと思って.

102:NAME IS NULL
08/12/18 10:36:12
timestamp型のカラムの内容を元に、毎日一定の時刻にデータの削除をしたいんですが
このような事は可能でしょうか?
また、可能な場合はどのように設定すれば?


OSはFC6、mysqlは5.1.6です。

103:NAME IS NULL
08/12/18 11:35:18
>>101
他のRDBMSみたいに
set (col2, col3) = (subquery)って書ければいいのに、
できないね。

こんな変態SQLでできるらしい。

mysql> update q101, (select empno, ename, job from emp where empno = 7788) v_emp set q101.col2 = v_emp.ename, q101.col3 = v_emp.job where q101.col1 = v_emp.empno;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0

mysql> select * from q101;
+------+-------+---------+
| col1 | col2 | col3 |
+------+-------+---------+
| 7788 | scott | analyst |
+------+-------+---------+
1 row in set (0.00 sec)



104:NAME IS NULL
08/12/18 12:15:12 PtYRnTev
>>103
それって,いわゆる updatable view ってやつだよね?
俺も試してみたいんだけど,「アップデート可能な
テーブルじゃないぜ!」って怒られた.

SET 節に field1=(SELECTほげほげ), field2=(SELECTほげほげ)
って書くと UPDATE できるんだけど,無駄に複数回の
SELECT が発生してイヤン.

MySQL でも updatable view が使えるとは知らなかった.
なんか俺のやり方に問題があるんだろうなぁ.

105:NAME IS NULL
08/12/18 22:30:20
MySQL 5.1はバグが多そうなので、5.0を使用してみようと思ったのですが、
日本語マニュアルは5.0だけないようですね。
5.0は谷間世代で、5.0使ってる人って少ないんですかね?

106:NAME IS NULL
08/12/19 04:18:27
phpmyadmin のスレってなかったっけ?

「EXPLAINで確認」って、どういう機能?

107:NAME IS NULL
08/12/19 07:47:20
新機能を除けば、5.0より5.1の方が品質は良い
5.1を使いつつ新機能は当面使わないのが勝ち組

108:NAME IN NULL
08/12/19 13:44:26
すみません、色々調査しましたがどうしてもうまく行かないので
質問させてください。

下記の様な掲示板データをテーブルに格納しております。
idは自動的に付与され、resはidの記事に対する返答が
あった場合、id(親記事)の番号は入ります。

この構成で、2008-12-18の記事だけ取得するが、
それに関連する返答も取得したい場合のクエリを
教えていただきたいと思います。

下記の構成だと、idの1とidの2が取得できれば良いのですが。。。

┌──┬─┬───┬────┐
│id    │res   │ comment   │time     │
├──┼─┼───┼────┤
│1     │0    │ あいう     │2008-12-18 00:0 │
├──┼─┼───┼────┤
│2    │1    │ かきく     │2008-12-19 00:10│
├──┼─┼───┼────┤
│3    │0   │ さしす      │2008-12-19 01:20│
├──┼─┼───┼────┤
│4    │3   │ たちつ     │2008-12-19 09:30│
├──┼─┼───┼────┤
│5      │3   │ なにぬ    │2008-12-20 10:00 │
└──┴─┴───┴────┘

109:NAME IS NULL
08/12/19 14:02:17
>>107
ふーん、montyは全く逆のこと言ってるね

110:NAME IS NULL
08/12/19 16:16:13
>>108
select * from tbl_test where DATE(time) ='2008-12-18' or res in(select id from tbl_test where DATE(time)='2008-12-18');
これで出ることは出る

111:NAME IS NULL
08/12/19 16:46:41
>>118

108です。

ありがとうございます。
とりあえず抜き出せたことだけでも良かったです。

本来ならばデータは大量にあるのでスレッドのように抽出出来れば
いいのですが、こちらはまた考えて見ます。
既にご存知であればお教えください。




112:NAME IS NULL
08/12/19 16:48:03
失礼
108です

>>111
>>110さんへの返答です。



113:NAME IS NULL
08/12/20 06:23:55
日本語を入力して、
データーを取り出してみたら、

?????

になってるんだけど、何が悪かったかな?

114:NAME IS NULL
08/12/20 06:31:07
URLリンク(d.hatena.ne.jp)

自己解決した。
UTF-8って入れないと文字化けするみたい。

115:NAME IS NULL
08/12/20 10:03:24 ca+8LuOv
SSDの内蔵SATAディスクが出てきたけど、あれにindex (*.MYI ファイル) だけでも格納したら、速くなるだろうか。
誰かやってみた人いませんか。

116:NAME IS NULL
08/12/21 08:36:09
>>115
起動直後の一発目は速くなるかもしらんけど、
あとはOSのディスクキャッシュが効くだろうから
変わらん気がする。
期待すべきはデータを取り出すほうじゃないかな。

117:NAME IS NULL
08/12/21 09:07:23
シフトJISにするとSQLインジェクションに対応できないという
記事を読んだのですが、UTF-8でデーターベースを設定していても
シフトJISの文字が入ってきた場合、強制的にシフトJISとして
流通してしまうのでしょうか?

118:NAME IS NULL
08/12/21 09:10:28
URLリンク(blog.ohgaki.net)

SET NAMESは禁止

MySQLには文字エンコーディングを変更する「SET
NAMES」SQL文が用意されています。(PostgreSQL
も同様のSQL文、SET CLIENT_ENCODINGがありま
す)この機能はSQLコンソールからは使ってよい機能
ですが、アプリケーションからは使ってはならない機
能です。 SQLインジェクションに脆弱になる場合があ
ります。

119:NAME IS NULL
08/12/21 09:25:06
>>117
文字化けしたデータとして流通するでしょ
知識の問題じゃなく単に分析力の問題じゃん、それ
UTF-8のところにSJIS無理やり流し込むとか文字化けして当然なんだから
気にせずサニタイズしたらいい
ある文章が文字化けしてるのか自然な文章なのかを判別するのは割りと凝った事が必要そう

120:NAME IS NULL
08/12/21 09:36:16
つまりデーターベースで使われる文字コード自体を
utf-8としておけば、シフトJISの文字コードの文字が
入ってきても、普通にサニタイズすれば問題ないという
ことですね。

強制的にセキュリティを破られるのかと思った。

121:NAME IS NULL
08/12/21 09:39:34
質問

準備された文=Prepared Statement=バインド変数=プレースホルダー

であってる?

122:NAME IS NULL
08/12/21 16:30:37
>準備された文=Prepared Statement
これはいいだろうが、二つ目、三つ目の=は変。

バインド変数は プレースホルダにバインドされる変数



123:NAME IS NULL
08/12/22 04:38:10
MySQL 4.1以降での文字の扱い

MySQLはバージョン4.1以降で文字の扱いが大きく変わりました。

それまでのMySQLは、クライアント側で使っている文字(バイトの並び)
がそのままDBに格納され、取得するとそのまま返ってくるという非常
に単純な挙動でした。従って、クライアント側で使用している文字エ
ンコーディング(符号化方式)がDBで使用する文字エンコーディングと
異なる場合は、クライアント側でDBに合わせて変換を行う必要があり
ました。

しかし、MySQL 4.1以降ではサーバ側とクライアント側にそれぞれ文字
エンコーディングが指定できるようになり、ちゃんと設定すればサーバ
が透過的に変換してくれるので、クライアント側で事前に変換をする必
要が無くなったのです。

ここまでなら便利な機能が増えて良かった良かったとなるのですが、現
実はそうも行かないのでした。

MySQLはサーバもクライアントもデフォルトでlatin1という文字コード(?)を
使用します。latin1というのは名前の通りの文字コードで、漢字とかはか
らっきしダメです。MySQLサーバで何も指定せずにDBを作るとその中の
テーブルでは基本的にlatin1を使う事になりますので、日本向けのサー
ビスでMySQLを使用するなら、大抵はujis(EUC-JP),sjis(Shift_JIS),utf8(U
TF-8)のどれかを指定してDBを作ります。

DBの文字エンコーディングをUTF-8にして、DBサーバに対してクライアン
トとなるアプリケーションからUTF-8のINSERT SQLを発行した場合、問
題なく動きそうですが、MySQLのクライアントは何も設定していなければ
SQLの文字エンコーディングがlatin1だとサーバに通知するので、サーバ
ではlatin1からDBの文字エンコーディングであるUTF-8へ変換するルー
ルを送られてきたUTF-8に適用してしまい、大抵の場合文字化けしてグ
チャグチャになります。

4.1より前のバージョンではこういう変換は行われなかったため、その時
代に書かれたアプリケーションの中には動かなくなるものもあり対策が
必要になりました。

124:NAME IS NULL
08/12/22 05:19:04
skip-character-set-client-handshake

ってどこに設定するのかな?

125:NAME IS NULL
08/12/22 08:00:40
「SQLインジェクション対策でプリペアドステートメントを使おう」
って記事をよく見かけるのですが、
プリペアドステートメントの使いかたが
わかりません

126:NAME IS NULL
08/12/22 08:03:27
URLリンク(jp.php.net)

ここのページに

「アプリケーションで明示的にプリペアドステート
メントを使用するように すれば、SQL インジェク
ションは決して発生しません」

って書いてあるのだが、文字コードに
シフトJISを使っている場合は、
プリペアドステートメントでも通過されて
しまうよね?

127:NAME IS NULL
08/12/22 09:26:33
SQLインジェクション対策で、
mysql_real_escape_string を使ってエスケープするのと、
preparedstatement と使う方法と、
2種類あるようですが、
どっちを使うべきなのですか?

128:NAME IS NULL
08/12/22 18:29:38
prepareが使える環境ならprepare

129:NAME IS NULL
08/12/22 18:29:46
>>126
>文字コードにシフトJISを使っている場合は、

何コード使ってようが、関係ないと思う。

>プリペアドステートメントでも通過されてしまうよね?

「通過されてしまう」とは?

>>127
一般論としては、prepared statement なんだろうけど、
クエリーキャッシュが効かなくなるとかの難点もある。

130:NAME IS NULL
08/12/22 18:40:36
SJISなら発生するか文字化けするか二択じゃないの?
入力時に文字化けさせて出力時に修正して表示する、とかならあるだろうけど

131:NAME IS NULL
08/12/22 20:04:52
5.1ではPrepared Statementでもクエリーキャッシュが効いちゃったりなんかしちゃったり
URLリンク(dev.mysql.com)

132:NAME IS NULL
08/12/23 03:56:48
スレリンク(php板:820番)

この質問ってどうなの?
レンタルサーバーでmy.cnfが
編集できない、って問題なんだけど。

どうやって回避するのが普通なの?

133:NAME IS NULL
08/12/23 04:03:18
CREATE/DROP TEMPORARY TABLE と、TEMPORARY TABLE への INSERT/UPDATE/DELETE/SELECT
だけができるようなアクセス権限設定は可能でしょうか?
CREATE TEMPOARY TABLE テーブル名を決め打ちするくらいしか思いつきませんでした。



134:NAME IS NULL
08/12/23 07:17:53
myisam の場合は、myisampack するとテーブルが ReadOnly になるので、
実質的には temp table しか変更できなくなるけど。


135:NAME IS NULL
08/12/23 15:00:45
データベース example1 があったとき、このデータベースの default character set を調べるにはどうしたらいいですか。

136:NAME IS NULL
08/12/23 15:36:02
show create database example1;


137:NAME IS NULL
08/12/23 16:06:11
>>136
ちょーさんくすです。

138:133
08/12/23 17:36:15
どうもありがとうございます >>134

InnoDB 使っているのですが、一時作業用にDATABASEを作っておいて、
そこではなんでもできる権限を付与するのがいいのかなあ。


139:NAME IS NULL
08/12/23 21:57:04
インストール直後の設定がうまくいかない・・・。

140:NAME IS NULL
08/12/23 23:49:43
>>132
charset はサーバ単位じゃなくても、データベース/テーブル/カラム単位に設定できるので、好きにしなされ。

141:NAME IS NULL
08/12/24 03:42:50
質問です。
PHPから操作するときなんだけど,hoge1ていうテーブルをuseするとき,
mysql_selectdb("hoge1");

mysql_query("use hoge1");
って何か違うの?

142:NAME IS NULL
08/12/24 07:11:15
最終的にそのPHPスクリプトが掴んでいるMySQLサーバーとのセッション上で
use hoge1 と同等の処理を実行するという点では同等だと思います >>141

個人的には MySQL と PHP のどちらに処理を寄せるかの趣味の問題かな、という気が
しますけれども、どちら派が多いのですかね。SQL文レベルでの紛れを嫌うのであれば
PHP上で mysql_selectdb を使う方が無難ですかねえ。

php5-5.2.4 のソースコードを眺めてみましたが、mysql_selectdb の方は最終的に
MySQL C API の mysql_select_db() を呼び出しているようです。

mysql_query の方は(当然ながら)引数として何でもありなので最終的には MySQL C API
の mysql_real_query() を呼び出しているようです。

mysql-5.0-5.0.51 のソースコードを眺めたところでは mysql_select_db() の
mysql_real_query() どちらも実質的には(マクロですが) simple_command()
を発行しているだけかな…最終的にサーバーと通信する際に流れる(MySQLプロ
トコルの)パケットは同じになるような気がします(けど調べ方がわからない)。




143:NAME IS NULL
08/12/24 08:01:39
>>140
違うよ
データーベース側の文字コードと、
クライアント側の文字コードを、同じとみなす、、
って設定をどうやるのか、って聞いてるの。

明示的に指定しないと、MySQLは、デフォルトで
lation-1を勝手にあてはめやがるから。

144:NAME IS NULL
08/12/25 11:23:14
WinXPproSP3でMySQL5.0を使用しております

小一時間ほど前からMySQLを始めたのですがバックアップの項目でつまっています
何が間違っているか教えていただけないでしょうか?
mysqldump -uroot -pxxxxxx -hlocalhost test > c:\Documents and Settings\xxxxxx\test.sql
と入力すると
ERROR:
Unknown command '\D'.
Outfile disabled.
Outfile disabled.

と表示されてしまいます
\Dがひっかかってるのは一目瞭然なのですが、教本ではこれでバックアップが出来てるようです
ためしに/Dや\d、/dなどに変えてみても(他の\も/に変えてます)同じようにOutfile Disabledと出てしまいます
何が問題なのでしょうか?

145:NAME IS NULL
08/12/25 12:18:13
すみません、自己解決しました
MySQLのコマンドラインからじゃなくて、Winにくっついてるほうからなんですね

146:NAME IS NULL
08/12/26 10:23:55
URLリンク(www.google.co.jp)

MySQL
じわじわ低下しとる

147:NAME IS NULL
08/12/26 19:38:15
3000レコードほどのデータベースを更新する処理を考えています。

UPDATE hoge SET key = val, key = val, WHERE id = 1
UPDATE hoge SET key = val, key = val, WHERE id = 2

と3000個クエリを発行するのと、

REPLACE hoge (key,key) VALUES (val,val), (val,val)...
としてひとつのクエリで済ませるのではどちらが早いものなのでしょうか。

148:NAME IS NULL
08/12/26 19:39:02
Syntax Errorですね。上のWHEREの前のコンマは不要です。

149:NAME IS NULL
08/12/26 19:50:10
それってやってることが違うよね?
UPDATE: 空振りしたらなにもしない
REPLACE: 空振りしたらINSERTする

150:NAME IS NULL
08/12/26 21:40:18 OVbkJfdS
突然すみません。
質問させていただきます。
現在MySQLを使っていて以下のようなエラーが出力されました。

・・・・
File "/usr/lib/python2.4/site-packages/MySQLdb/connections.py", line 35, in defaulterrorhandler
raise errorclass, errorvalue
OperationalError: (2013, 'Lost connection to MySQL server during query')

以前はこのクエリーで問い合わせで来ていたのですが現在は上のようなエラーが出力されて
クエリー結果が返ってきません。

どなたかわかる方がいらっしゃったら回答の程よろしくお願いいたします。

151:NAME IS NULL
08/12/27 00:19:53
>>149
空振りはしない前提です。
UPDATE hoge (key,key) VALUES (val,val)という記法が使えないので、
REPLACEでユニークなキーを指定してやり、UPDATEの代わりにします。
INSERTはたくさん結合させてひとつのクエリにした方が早かったので類推しました。

今は少し忙しいので、暇が出来ればちょっとベンチマークを組んでみます。
誰かご存じの方がおられたらよろしくお願いします。

>>150
クエリが長すぎるのではないでしょうか。
他にもいくつかの理由が考えられますが、
Lost connection to MySQL server during queryで検索するといろいろ出てきます。

152:NAME IS NULL
08/12/27 19:21:15
>>148
できるよ。
以上。
はい、次。

153:NAME IS NULL
08/12/27 22:36:05
全部変えたいならWHERE句はずせば1行ですむのでは

154:NAME IS NULL
08/12/28 00:55:41
>>153
すみません、書き方が悪かったです。
ひとつひとつデータが違うので、その手は使えないのです。


155:NAME IS NULL
08/12/28 08:37:22
データーベースのエンジンいっぱいあるけど、
自分が調べた範囲ではINNODBが一番よさそうなんだけど、
普通はINNOを選択しておけばいいの?

156:NAME IS NULL
08/12/28 09:57:30
>>154
だったら id IN() で1000個並べたら1行で済む。

157:NAME IS NULL
08/12/28 10:55:18
InnoDBでよいよ

158:NAME IS NULL
08/12/28 13:50:43
オレ、いまだにMyISAMなんだが
時代にとりのこされてるのか?
特に困ったことないけど。

159:NAME IS NULL
08/12/28 13:55:09
困ってないなら、それでいいやん

160:NAME IS NULL
08/12/28 17:32:34
トランザクションを使えないのでは?

161:NAME IS NULL
08/12/28 19:35:36
トランザクションと全文検索が一緒にできるようには
もうならないのかな
結構待ってるんだけど…

162:NAME IS NULL
08/12/29 11:29:25
@ITのDBセミナー(ORACLE)でMySQLはVerがすぐあがる
そのたびにVerUp作業が入るから・・・と否定的な発言があったけど
実際使ってる人どうですか?

乗り換えを考えています

163:NAME IS NULL
08/12/29 11:51:40
いまだに4.0.20aですが そろそろ乗り換えた方が良いですか?

164:NAME IS NULL
08/12/29 11:59:51
テーブルを作り替えなきゃならないのかどうか、GRANT 関連が変わったかどうか、
取り敢えずこの二つは、リリースノートの最初に大書して欲しいものだとは思う。

165:NAME IS NULL
08/12/29 18:43:27
MySQLのバージョンアップは相当遅い部類だと思うけど。
5.0 2005/10
5.1 2008/11

Oracle
10.1 2004/04
10.2 2005/06
11.1 2007/10

166:NAME IS NULL
08/12/29 19:02:41
マイナーバージョンアップだと思って痛い目に遭う事を言ってるんじゃないの?
5.0.3 と 5.0.5 とで違うとか聞いたが。

167:NAME IS NULL
08/12/29 20:29:56
誰かSSDをキャッシュとして利用したZFS上でMySQL動かした人いますか?
URLリンク(blogs.yahoo.co.jp)

168:NAME IS NULL
08/12/29 20:35:48
SSD,安くなったとは聞いたがそんなことが出来るのか

はてなの全文検索で、DB全部メモリに乗っけるのがこの前話題になってたな
そりゃ早いわ

169:NAME IS NULL
08/12/29 21:01:23
MySQLの定番ベンチマークって何がいいですか?
DBエンジンによってはファイルシステム次第かもしれませんが。
rawデバイスに乗せるっていうのを誰かやっていたような。


次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

4386日前に更新/292 KB
担当:undef