MySQL 総合 Part17

このエントリーをはてなブックマークに追加
1NAME IS NULL
オラクル社製(予定)RDBMS、MySQL の総合スレです。
MySQL 総合 Part15(16) http://pc11.2ch.net/test/read.cgi/db/1240291265/
[関連スレと過去ログ]
http://find.2ch.net/index.php?STR=MySQL
http://makimo.to/cgi-bin/search/search.cgi?D=db&q=MySQL&sf=0&link2ch=on

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

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

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

・関連ツール及びユーティリティ
・関連書籍
>>2
2NAME IS NULL:2009/11/23(月) 07:22:46 ID:X6i6+8qI
【関連ツール及びユーティリティ】

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

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

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

【関連書籍】

[MySQL Books]
http://dev.mysql.com/books/
http://www.amazon.co.jp/exec/obidos/search-handle-url/ix=books-jp&fqp=keywords%01MySQL
http://www.amazon.co.jp/exec/obidos/search-handle-url/ix=books-us&fqp=keywords%01MySQL
3NAME IS NULL:2009/11/23(月) 11:09:06 ID:+o/Ub6PC
>>1
乙です
4NAME IS NULL:2009/11/23(月) 13:00:38 ID:???
>>1
乙カレーライス
5NAME IS NULL:2009/11/23(月) 18:50:49 ID:???
乙カレンダー
6NAME IS NULL:2009/11/23(月) 18:54:53 ID:KwUk/mR7
ところで
SELECT * FROM table WHERE field1 IN ('apple','orange') OR field2 IN ('metal','wood');
みたいな複数カラム&複数キー検索をスマートにする方法はどんなのが考えられますか?
よろしくお願いします。
尚、キーは実際はもっと数を増やしたいのですが。
7NAME IS NULL:2009/11/24(火) 18:02:22 ID:8R6XCZ3d
質問させてください。

selectとinsertのみが行われるテーブルがあります。
テーブルは月毎に作成されて大体800万レコード位になります。
今までInnoDBでテーブルを作成していたのですが、
selectとinsertはMyISAMの方が早いかと思い変更を検討してます。

ただMyISAMではselectでもテーブルロックがかかるとの事だったので、
selectもinsertも頻繁に起こる環境の場合はInnoDBの方がいいんじゃないかと思ってます。
selectとinsertのみのテーブルでもinnoDBの方が良いという事はありえますか?

よろしくお願いします。
8NAME IS NULL:2009/11/24(火) 22:29:33 ID:???
MyISAMにはconcurrent insertという機能があって
一つのINSERTと複数のSELECTは同時に走ることができる

でもInnoDBでうまく動いてるならそのままでいいんじゃないの
9NAME IS NULL:2009/11/25(水) 19:32:30 ID:NAh8t8yE
どう考えてもわからないので質問します。

イベント情報の検索システムを作ってるんですが、
イベントの出演者名/イベント日/イベントジャンル の指定がある場合のクエリについてお願いします。

関係するテーブルは以下です
イベントの基本情報)evKihonTB > id(主キー), evName, evDay, evGenre
イベントの出演者情報)evPlayerTB > id(主キー), evId, pName
 ※evPlayerTB.evId=evKihonTB.idの関係です

出演者名の指定がなければ、evPlayerTB.evId = evKihonTB.id を条件にLEFT JOINすればいいですが、
出演者名{$pName}があると手順がわからなくなりました
とりあえず
1)SELECT evPlayerTB.evId FROM evPlayerTB WHERE evPlayerTB.pName LIKE '%{$pName}%'
  を実行して、該当する名前の人の所属するイベントIDを取得
2)結果データ$rsの中を対象にforeachしてその中でイベントID(evId)を取得しつつ
  $sql = SELECT evKihonTB.* FROM evKihonTB WHERE evKihonTB=$value['evId']
  クエリ実行

とすればいいのかと思ったのですが。ここで疑問です
1)の時に、条件({$pName})の名前が複数登録されてた場合(山田太郎と山田次郎がいるなど)
取得されるevIdも同じものが複数になります。
このとき、スクリプト側で余分を除外するのでなくSQLで一イベント一件の指定が出来ますか?
 ※全体にLIMIT 1することは出来ません。山田太郎が複数イベントに参加してる可能性もあるので。。
また、そもそも上の1)2)とはちがうスマートな方法あるでしょうか?

長くてすみません、ご意見よろしくお願いします。
109:2009/11/25(水) 19:44:58 ID:NAh8t8yE
あーー!大失敗、すみません書き直します。上の1)2)のクエリ部分無視してください。

イベントの基本情報と、出演者全てを取得するのが目的なので、
僕の考えでは、
1)入力された名前を条件に基本情報も取得します
SELECT evKihonTB.* FROM evKihonTB.id LEFT JOIN evPlayerTB ON evKihonTB.id = evPlayerTB.evId
WHERE evPlayerTB.pName LIKE '%{$pName}%' AND …以下、日付条件など

2)この結果をforeachして、evPlayerTBから、指定された名前の人以外の出演者たちを取得します
$sql = SELECT evPlayerTB.* FROM evPlayerTB WHERE evPlayerTB.evId=$value['evId']
これをクエリ。

このあとの疑問と悩みは上記と同じです。
1)の段階で、同じ名字の人が何人いようと一イベント一件の指定法など、なにとぞ宜しくお願いします。

長レスでよごしてしまい、お騒がせしてすみませんでした。
また、プログラムはPHPを考えています。
11NAME IS NULL:2009/11/25(水) 21:03:59 ID:???
どういう結果が欲しいのかさっぱりわからんw
唐突に名字なんて出てくるのはなんで?データ上に表現されてないよね?
129:2009/11/25(水) 21:37:24 ID:NAh8t8yE
>>11
説明不足ですみません
>1)の時に、条件({$pName})の名前が複数登録されてた場合(山田太郎と山田次郎がいるなど)
ここのことです。
名字でなくてもいいんですが、「出演者名」で指定された文字が複数の出演者名の名前中にあった場合、です。
宜しくお願いします
13NAME IS NULL:2009/11/25(水) 22:21:43 ID:iF08TxUS
debian初心者ですが、質問です
今まで他のOSでMySQLを使っていたのですが、事情があって
Debianで、そのDBを運用する事になりました。
でもterminalの画面でも、PHPをつかったWebAppでも
文字化けして?????
しか表示してくれません。

一応my.cnfもphp.iniもdefault_charsetにはUTF-8としています
何が原因なのでしょうか?

もしご存知でしたらお教え願います。
よろしくお願いいたします。
14NAME IS NULL:2009/11/26(木) 15:19:20 ID:???
>>13
そういえば、俺も InnoDB の時だけ同じように「???」になっちゃうんだよね。
phpなどのAPIから呼べば正しく取得できるけど、
MySQLのコンソールでだけ化ける。
原因は分からない。役立たずでごめん。
15NAME IS NULL:2009/11/26(木) 23:41:19 ID:???
>>13
mysql> set names utf8;
やってみた?
16NAME IS NULL:2009/11/27(金) 02:14:00 ID:???
あと、ターミナルの日本語環境も・・
17NAME IS NULL:2009/11/28(土) 19:33:52 ID:???
随分前なので記憶が曖昧なんですが、
MySQLを一度インストールして調子が悪かった為アンインストールしました。
その後に再度インストールしようとすると途中でinternal error 2503と2502が出て、
失敗してしまいます。
レジストリを弄ったりしましたが詳しくないので正直解決方法が解りません。
services.mscにMySQLの項目も表示された状態になっています。
環境はWindows Vista Ultimate Service Pack 2です。
解決策など有りましたら教えて頂けると嬉しいです。
18NAME IS NULL:2009/11/29(日) 00:38:53 ID:???
たぶんMySQLに限らず何もインストールできない状態になってるな
レジストリ弄ったってのはhttp://www.msfn.org/board/minor-bug-integrating-ie7-t86346.htmlを見て
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer の権限を変えたって事か?
ならそこまで書いとけよ
二度手間になるだろ
19NAME IS NULL:2009/11/29(日) 01:09:39 ID:???
>>18
すみません。
回答有難う御座います。
詳しくないのにレジストリ内のMySQLって単語を検索して、
引っかかった物を削除していたら
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer
CurrentVersion下にInstallerの項目が無くなっていました。
20NAME IS NULL:2009/11/29(日) 01:41:29 ID:???
連投すみません。
自分の見間違えだった様で
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer
項目は存在しました。
お騒がせして申し訳ありません。
これってインストール出来る状態に戻せるのでしょうか?
最悪OSの再インストールも考えています。
21NAME IS NULL:2009/11/29(日) 17:02:22 ID:???
>>20
もう、本家から"withiout-insatll"パッケージ落としてきて、手動で入れちゃえば?
ウチではもう随分前から、バージョン上がるごとにUpしたり、複数バージョン同時に
試したりするのに、いちいち入れ替えるのメンドクセーから、インストーラー使ってないなあ。
22NAME IS NULL:2009/11/29(日) 20:05:39 ID:???
>>20
覚悟ができてるのなら、
2chで聞くのは無駄。

さっさと再インストールするべき。
23NAME IS NULL:2009/11/29(日) 23:50:21 ID:JvyHdHfV
質問します。
SELECT * FROM TABLE1 ORDER BY RAND(); ってやると、ランダムな順番でデータを取得しますが、
ランダムだけど、特定のidを一番上に(最初に)取得したいんです
どうしたら良いんでしょうか?
TABLE1の構造は id, name だけのシンプルなものとします。
たとえば、1から100まで行があって、id30を最初に抽出して残りの99こは
ならび順ランダムで取得したいんですが…
よろしくお願いします
24NAME IS NULL:2009/11/30(月) 01:00:10 ID:???
id = 30でSELECTした後
id <> 30 ORDER BY RAND();とくっつけりゃいいんじゃないの?
25NAME IS NULL:2009/11/30(月) 20:03:30 ID:bD0H6ETy
MySQLをWinXP64bitで動かすのは邪道ですか?マージ処理が早そうなんで。
26NAME IS NULL:2009/11/30(月) 21:18:41 ID:???
>>23
可能です。
以上。
↓次の方どうぞ
27NAME IS NULL:2009/12/01(火) 08:20:28 ID:???
てすと
28NAME IS NULL:2009/12/01(火) 08:24:10 ID:???
>>23
ORDER BY
id="id30" DESC,
RAND()
29NAME IS NULL:2009/12/02(水) 00:19:52 ID:DFvwjp69
文字化けの問題皆さんどうされているのでしょうか?
コマンドプロンプトでShift_JISで入力したものをPHPでブラウザに出力すると文字化けします
PHPコードはEUCで保存しているのですが、Shift_JISで保存するとデータベースからの出力分だけでなく、当たり前ですがPHP側の日本語も文字化けします
ではコマンドプロンプトにEUCで打ち込もうとするとコマンドプロンプトにエラーと怒られます

皆様はどの文字コードでMySQL側にデータを入力し、どのテキストエディタを使って文字コードでPHP等の保存をされているのでしょうか?
自分はmy.iniの設定は[mysql]と[mysqld]に、default-character-set=sjis を指定しております

3023:2009/12/02(水) 11:30:16 ID:???
23です、答えてくれた皆さんありがとうございました
助かりました、本当にありがとう
31NAME IS NULL:2009/12/03(木) 02:23:22 ID:???
へー
PHPにはmb_convert_encodingのようなエンコード変換関数って無いんだ?
32NAME IS NULL:2009/12/06(日) 08:18:37 ID:???
SET NAMES
33NAME IS NULL:2009/12/07(月) 11:22:36 ID:???
お詳しい方、CONCATの使い方を教えてください。

イメージとしては、
--------------------------
SELECT *
FROM my_table
--------------------------
これを↓
--------------------------
SELECT *
FROM CONCAT('my_', 'table')
--------------------------
こういうクエリで実現したいのですが、エラーが出てしまいます。
#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 '('my_', 'table') at line 2

MySQLの文字列関数とかを組み合わせて使うのが初めてなので、
そもそも考え方とかが間違っているのでしょうか・・・。
34NAME IS NULL:2009/12/07(月) 14:04:17 ID:VuPU4EWA
varcharの長さと、文字セットについて教えてください。

テスト用にwindowsに入れたmysqlでテーブルを作ろうと思ったら
varchar(65535)のカラムにで
ERROR 1074 (42000): Column length too big for column 'comment' (max = 21845); use BLOB or TEXT instead
というエラーが出ました。これはvarchar(n)のnは文字数で、サーバーの文字コードがutf8になってるから、最大で3バイト消費するutf8を考慮して
65535/3なのかなあ、と想像したのですがこの辺まで問題ないでしょうか?

で、本番用の環境は今のところMysqlサーバーの文字コードがデフォルトのまま(latain1?)になっていて、接続した時クライアントでset names utf8を実行して
使っています。CREATE DATABASEする時はDEFAULT CHARSET UTF8を指定しています。この環境で同じテーブルをクリエイトすると
65535のまま通ってしまいます。

この状態で使い続けたとして、例えば一文字3バイト消費する文字を21845文字以上いれようとするとどうなるのでしょうか?
バイト換算して65535文字以上はカットされるのでしょうか?その際、おかしな場所できられて、最後の文字が文字化けとかしないのでしょうか?

問題ないのであれば、逆にvarchar(21845)と指定しまうと1バイト文字ばかり入れた時、無駄というか、もったいない気がするのですが・・・
UTF8でデータをしまいたい時は、どのような設定にしてますか?
35NAME IS NULL:2009/12/07(月) 17:56:02 ID:???
>>34
varchar なので、1バイト文字1文字のために3バイト確保するような、
無駄な領域を確保することはないはず。

…と思ったら、内部は UCS2 で保存されてるんだったっけ?
36NAME IS NULL:2009/12/07(月) 18:46:53 ID:???
>>33
抽出対象のテーブル名を可変にしたいって事?
37NAME IS NULL:2009/12/07(月) 20:10:30 ID:???
>>36
そういうことです。
可能でしょうか…?
38NAME IS NULL:2009/12/07(月) 21:19:07 ID:???
39NAME IS NULL:2009/12/08(火) 08:29:16 ID:???
>>34
そもそもvarcharのサイズには制限が
あったはず。255だか。

だから、わざわざ警告が代替型を
言ってくれてる。
>use BLOB or TEXT instead
40NAME IS NULL:2009/12/08(火) 08:32:32 ID:???
>>37
無理。
関数は使えるところがきまってる。
41NAME IS NULL:2009/12/08(火) 09:01:35 ID:???
>>34
>latain1カラムにutf8テキスト
試したか?
できないと思うんだけど。

42NAME IS NULL:2009/12/08(火) 11:09:44 ID:???
>>40
そうだったのですか
ありがとうございます!
43NAME IS NULL:2009/12/08(火) 13:38:01 ID:???
http://snazzy.smart-bbl.info/2009/05/mysql-%E3%81%AEdb%E3%82%92%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF%E3%83%89%E3%83%A9%E3%82%A4%E3%83%96%E3%81%B8/
ここ参考にしてdatadirをネットワークドライブに割り当てましたが、
mysql再起動時に1067エラーで立ち上がってくれません。

作成したネットワークドライブはマイコンピュータ上では確認、クリックで移動できますが
コマンドプロンプトで
cd /d z:\
とすると
「指定されたドライブが見つかりません。」
とでます。
起動時にdatadirのドライブがみつからなくて落ちてるのだと思いますが、
どうすればうまくいくかご存知の方教えていただけないでしょうか。

OSはVista Bizです。
44NAME IS NULL:2009/12/08(火) 13:51:31 ID:???
>>40
サブクエリ使えばいけると思うが。
4545:2009/12/08(火) 15:51:28 ID:???
VistaのUAC切ったらうまくいった
...根本的な解決になってないけどとりあえず報告
46NAME IS NULL:2009/12/08(火) 19:30:53 ID:rUX8tQvJ
相談させてください
Web掲示板を作りたいと思っています。
そこでtableの構造について悩んでいるのでアドバイスを頂けると助かります

1. threadとresというテーブルを作り、threadにはスレ名とレス総数、thread_idとresにはレス情報が収まる
2. threadとresというテーブルを作り、threadにはスレ名のみ、resにはthread_idとres情報が収まる(スレ毎のレス数はCOUNT()で計算する)

仮に、掲示板が大勢の人達によってアクセスされ書き込みされるような場合
上記二つの構造だとどちらがいいのでしょうか?
よくみるfreeのcgi掲示板とかでは 1 のやり方が殆どでした(DBは使わずファイルに書き込み保存する形式)
また、その他にいい構造や手段がありましたらご教授お願いしますm(__)m
47NAME IS NULL:2009/12/08(火) 19:33:57 ID:rUX8tQvJ
>>46訂正
1. threadとresというテーブルを作り、threadにはスレ名とレス総数、resにはthread_idとレス情報が収まる
48NAME IS NULL:2009/12/08(火) 23:32:59 ID:???
ある端末でWindows Server 2003 R2でMySQL5.0.27使ってるんですが、
2時間程度ある処理(Javaのバッチ処理でConnector/J5.0.3を使用してMySQLと接続)を
ぶん回すと、レスポンスが全体的に悪化します。
識者に確認したところphpMyAdminのランタイム情報で
「中断しました。」が800程度出ているせいだと断言されたのですが、
開発端末で検証したところ、中断コネクションが多発しても性能劣化は発生しませんでした。

そもそも「中断しました。」が多発することで性能劣化はおきえるものでしょうか?

コネクションの切り貼りが多くなる実装が悪いことは重々承知です。
49NAME IS NULL:2009/12/10(木) 00:49:46 ID:???
>>46
2番で充分じゃね?
間に合わなくなったらサーバー増やせば良いし
50NAME IS NULL:2009/12/10(木) 10:23:18 ID:???
固定長構想にすると、本当にレコードの検索が速くなるんでしょうか?
51NAME IS NULL:2009/12/10(木) 16:16:36 ID:???
>>50
ウチでちょっと前にやってみた時は、
レコード500万、テーブルサイズ約300MB(可変長時)、約800MB(固定長時)のテーブルで、

正味、プライマリーキー(int型)に対する検索だけでははほぼ五分。
でも、一緒に引いてくるカラムがvarcharの時とcharの時で、後者が方が約10%程度早かった。

ちなみにインサート時は、Load Data Infile ではこれまたほぼ五分だけど、
一行ごとのインサートや、後からAlter table等でIndexの追加、変更なんかをした時は、
固定長の方が5%前後早かった。

まああくまで自前の環境と自前のデータでちょっとやってみただけなので、他環境のことは知らない。
自分的には、ファイルサイズ三倍弱で、この程度のパフォーマンスUpだと割りに合わないと感じたので、
可変長に戻した。あとは自分でやってみて判断してくれ、としか言えない。
52NAME IS NULL:2009/12/10(木) 16:36:03 ID:???
amebaの開発者が書いたmysqlの本だかに、
結局IO周りでボトルネックになるからvarcharのほうがいいよって書かれてた気が。
53NAME IS NULL:2009/12/10(木) 18:50:12 ID:???
>>51
乙。
参考として聞きたいんだけど、
そのcharカラムのサイズは?

>>52
可変長カラムは間接アクセスが必要
なので、一般的に、固定長カラムよりも
速度的には不利だと、公式ドキュメントに
書いてあったはず。
5451:2009/12/10(木) 21:29:53 ID:???
>>53
テーブル構成はこんな感じ
(c1 int(10) unsigned,
 c2 varchar(32),
 c3 varchar(128),
 primary key(c1) )CHARSET=ASCII
なんのデータなのかは想像におまかせします・・(w)。

>>52
そう、そのことも念頭にあったので、datadirをRamdisk上に配置して、
さらにmysqld起動直後に、インデックスとテーブル両方メモリキャッシュに
読見込んだ上でやってみた結果が>>51

いろいろやってみて面白かったのは、select * from と select c1,c2,c3 で取った時は、
可変、固定ともに差が出ないのに、select c2,c3 とか、select c1,c3 とか、select c3 とか
の時は、固定長の方が明らかに優位があった(最大で10%程度)(まあ予想通りっちゅやそうだが)。
あと、c2をインデックス化して、where c2 = ** の時も、固定長の方が早かった(これはようわからん)。

上のパターンでは、ファイルサイズで大体予想つくと思うが、可変時で1レコード当たり約60byte程度、
固定長ではレコードあたり約160byteなので、容量が実用量の2.5倍以上になる。

予想としては、varcharカラムが多くて、且つ avg(length()) の割合が高ければ高いほど、
固定長にする値打ちが上がって来るように思う。
逆に、実容量がカラム定義より少なく、且つメモリに乗らないくらい大きくなればなるほど、
可変長の方が有利になるんでないかな。
55NAME IS NULL:2009/12/10(木) 21:30:21 ID:???
varchar(300)で済むカラムをvarchar(65534)にすると、なにかデメリットってありますか?
実質、使用容量もシーク時間も変わらないのでは? と思ってしまうのですが

バージョンは5系です。
5653:2009/12/11(金) 09:01:35 ID:???
>>54
肝心なことを聞き忘れた。orz
ストレージエンジンはMyISAMだよね?
5754:2009/12/11(金) 16:38:42 ID:???
>>56
もちろん。ってか、MyISAM以外で、Row_format=fixedには出来ないんじゃないの。
Innodbはテーブルの格納の仕方がかなり違うみたいだし。
5853:2009/12/11(金) 19:02:21 ID:???
>>57
了解です。どーも。

>Innodbはテーブルの格納の仕方がかなり違うみたいだし。
InnoDBはけっこう冗長だそうなんで
完全に別として、MEMORYだったりは
するかも、とちょっとおもてた。
5948:2009/12/12(土) 10:09:15 ID:???
どうやら、OSのリソースリークをMySQLが誘発してるっぽいんですが、
過去事例とかご存知の方いらっしゃいませんか。
60NAME IS NULL:2009/12/12(土) 10:40:42 ID:???
http://bugs.mysql.com/
キーワード:leak
ステータス:All
で検索したら230件ヒットしたから確認してみたら。
61NAME IS NULL:2009/12/12(土) 11:12:01 ID:???
マルチポストっぽいが、誘導されてここに来ました。

ネットワークエンジニアなんだが、昨日、会社からデータベーススペシャリストの
資格取れと言われた。
MySQLからはじめようと思うのだが、MySQLの良い基本書はないかな?
できればコマンドラインからの入力から説明している基本書がいい。
Webの説明は見にくいのが辛い…。
62NAME IS NULL:2009/12/12(土) 14:29:34 ID:???
>>61
資格を取るのが目的なら、その資格の参考書買って勉強するのが一番てっとり早い
63NAME IS NULL:2009/12/12(土) 14:34:29 ID:???
>60
thx。一通り目を通したけど、怪しいような違うようなというのが多いですわ。
リーク系バグの影響を受けてるんだとは思うけど、
それなら開発環境で再現するだろって内容が再現しないから厳しい・・・
64NAME IS NULL:2009/12/12(土) 17:28:32 ID:???
俺が手元に置いてんのは

MySQLコマンドブック
インストールから関数の解説までは一通り載っている。
入力についてもmysqlコマンドラインでの説明もある。

けどMySQLで資格と言っても…w
65NAME IS NULL:2009/12/12(土) 23:14:43 ID:???
>>62
>>64

レスサンクス。
一応、DBスペシャリストの参考書は持っている。
しかし、正規化とかあんまよくわかっていない。
SQLも理論ではわかりづらいので、フリーのDBで勉強しようと思ったまで。
マジレスするが、MySQLで受かるとは毛頭思っていない。
ただ、フリーのDBがPostgreSQLとMySQLくらいしか思いつかんかった。
まぁ、こんな調子だからDBスペシャリストの勉強もベトナム戦争のように
泥沼化して、不合格になるのがオチだろうなw
66NAME IS NULL:2009/12/12(土) 23:35:49 ID:???
>>65
他にも
SQLServer ExpressEditionとかOracle10gXEがあるよ
67NAME IS NULL:2009/12/13(日) 02:32:22 ID:???
>>65
MySQL GUI Toolsが超オススメ。
68NAME IS NULL:2009/12/13(日) 19:27:00 ID:???
>>55
のことも教えてください><
69NAME IS NULL:2009/12/13(日) 21:55:21 ID:???
>>68
かわらんと思う
VARCHARは実データが何バイト入るかだけが問題
70NAME IS NULL:2009/12/13(日) 22:25:09 ID:???
INNER JOINってややこしくないですか?
71NAME IS NULL:2009/12/13(日) 22:37:18 ID:???
72NAME IS NULL:2009/12/13(日) 23:57:55 ID:???
myisamで起こるロックについて質問させてください。
現在ちょっと重たいSELECTを発行しています。
すると他のselect文もロックされてしまいます。

> 5924480 wp 192.168.xxx.xxx:63080 wordpress Killed 9533 Sending data SELECT count(*) FROM wp_posts INNER JOIN wp_term_relationships ON (wp_posts.ID = wp_term_relationships.object_id)
> INNER JOIN wp_term_taxonomy ON (wp_term_relationships.term_taxonomy_id = wp_term_taxonomy.term_taxonomy_id) WHERE 1=1 AND wp_term_taxonomy.taxonomy = 'category' AND wp_term_taxonomy.term_id IN ('22407',........)
> 5924495 wp 192.168.xxx.xxx:63105 wordpress Query 9532 Locked SELECT count(*) FROM wp_posts INNER JOIN wp_term_relationships ON (wp_posts.ID = wp_term_relationships.object_id)
> INNER JOIN wp_term_taxonomy ON (wp_term_relationships.term_taxonomy_id = wp_term_taxonomy.term_taxonomy_id) WHERE 1=1 AND wp_term_taxonomy.taxonomy = 'category' AND wp_term_taxonomy.term_id IN ('91717')

http://blogs.sun.com/takemura/entry/myisam%E3%82%B9%E3%83%88%E3%83%AC%E3%83%BC%E3%82%B8%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%B3%E3%81%AE%E3%82%B3%E3%83%B3%E3%82%AB%E3%83%AC%E3%83%B3%E3%83
%88%E3%82%A4%E3%83%B3%E3%82%B5%E3%83%BC%E3%83%88%E6%A9%9F%E8%83%BD%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6
> MyISAMは皆さんご存知のように、テーブルレベルのロックのみで行レベルでのロックがサポートされていません。MySQLではSELECTコマンドの実行時に暗黙的リードロック(Shared Read lock)がかかるようになっており、
一般的にはこのロックが対象のテーブルに存在している場合には、書き込み処理(INSERT,UPDATE,DELETE,ALTER TABLEなど)がロック待ちとなります。SELECTの実行が完了してからINSERTなどが実行される形になります。
この辺があやしいのかとも思うのですが、
> 書き込み処理(INSERT,UPDATE,DELETE,ALTER TABLEなど)がロック待ちとなります。SELECTの実行が完了してからINSERTなどが実行される形になります。
とあるので、selectがロックする->updateがロックされる->selectがロックされる
となるのかな、と思ってるのですが原因と断定できず困っています。

この辺のことを詳しく書いてあるようなサイト・書籍・キーワードなどを探しています。教えてもらえませんか?
73NAME IS NULL:2009/12/14(月) 10:14:01 ID:???
>>69
ありがとうございます!
74NAME IS NULL:2009/12/15(火) 06:48:43 ID:???
>>65
ぶっちゃげRDBMSはPostgreSQL、教科書は増永先生などの基礎論のを
一冊買って勉強した方が良い。
標準SQLの対応としてはPostgreSQLの方が一日の長があるし、正規化
も数学的に大変クリアな概念なので一度ちゃんとした教科書できちんと
した理屈付けや定義は見ておいた方が良い。
遠回りに見えるかもしれないけど標準SQLも関係代数もつぶしがきく
知識なので絶対に無駄にはならないと思うよ。
75NAME IS NULL:2009/12/15(火) 14:14:52 ID:???
76NAME IS NULL:2009/12/16(水) 00:56:57 ID:???
質問させてください。板違いなら誘導おねがいします。

質問◆MySQLをインストールする前の状態にするにはどうしたらいいのでしょうか。

経緯◆データベースの勉強のためLAN内のサーバ(CentOS5.4)に、PC上のsshクライアントから
yumでインストールしました。
# rpm -qa mysql
mysql-5.0.77-3.el5
# rpm -qa mysql-server
mysql-server-5.0.77-3.el5
# rpm -qa perl-DBD-MySQL
perl-DBD-MySQL-3.0007-2.el5
# rpm -qa php-mysql
php-mysql-5.1.6-23.2.el5_3

ところが初回起動時、自分が意図しないパスワードを設定したらしく(※)下記のエラーで立ちあがりません。
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
そこで、権限無視モードで立ち上げる方法を検索して起動しました。
# /etc/init.d/mysqld start --skip-grant-tables
MySQL を起動中: [ OK ]
しかし
# mysql -u root
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
となってしまいました。
クライアントが無事起動したら
UPDATE mysql.user SET password=PASSWORD('password') WHERE user='root';  とするつもりでした。

(ちなみに「# mysqladmin -u root」は大量の情報を吐いたあとrootプロンプトにもどってしまいました。
また 「$ mysql」 一般ユーザでは立ち上がります)

# yum remove mysql
Erasing : mysql 1/4
Erasing : php-mysql 2/4
Erasing : perl-DBD-MySQL 3/4
Erasing : mysql-server 4/4
Complete!
と削除したあと、またインストールしてみましたが同じ結果でした。サーバのコンソールからもやりましたが同様でした。


どうやらパスワードリセットの方法は使えないようなので、MySQLをインストールする前の状態にしたいのです。

(※)自分が意図しないパスワードを設定したというのは、sshクライアントの画面の内容を保存しておこうと、大量の文字をコピーした
んですが、それをsshに貼ってしまったのです!なかなかプロンプトが帰ってこず、Ctrl+Cをしたら画面には Clean up... と出ていました…。
なにかをClean up中にCtrl+Cしてしまったわけです。

よき解決策をご教示いただければ大変にたすかります。
よろしくおねがいいたします。
77NAME IS NULL:2009/12/16(水) 04:08:48 ID:???
>>76
rm -rf /var/lib/mysql/*
/usr/bin/mysql_install_db

以上。
mysql_install_dbは、mysql-serverパッケージに含まれてる。
78NAME IS NULL:2009/12/16(水) 11:21:54 ID:???
MySQL 5.5 がでましたね。
もちろんおまえらはもう version up したよな?
79NAME IS NULL:2009/12/16(水) 15:53:33 ID:???
そんなホイホイあげられるかよ
80NAME IS NULL:2009/12/16(水) 17:18:42 ID:???
WinXP + MySQL5.1.41

optimize について教えてください。mysqlで以下のメッセージが出ました。対象テーブルはInnoDBです。

mysql> optimize table ***;
+----------+----------+----------+-------------------------------------------------------------------+
| Table | Op | Msg_type | Msg_text |
+----------+----------+----------+-------------------------------------------------------------------+
| test.*** | optimize | note | Table does not support optimize, doing recreate + analyze instead |
| test.*** | optimize | status | OK |
+----------+----------+----------+-------------------------------------------------------------------+
2 rows in set

Optimizeではなく テーブルを再作成してAnalizeを代わりに使えって言ってるみたいですけど、
InnoDBはOptimizeをサポートしていないんですか?
81NAME IS NULL:2009/12/16(水) 21:07:56 ID:???
InnoDBは、OPTIMIZEをすると
ALTER TABLE ... ENGINE = InnoDB が代わりに実行されるようになっている。

テーブルの再編成をしたかったのなら、これでOK
8280:2009/12/16(水) 21:28:22 ID:???
問題は無い…という風に理解してよろしいのでしょうか?
8376:2009/12/16(水) 21:57:40 ID:???
>>77
出来ました!感謝です。
色々と試してみたいと思います。

ありがとうございました。
84NAME IS NULL:2009/12/17(木) 00:45:08 ID:???
>>82
よろしいです
85NAME IS NULL:2009/12/17(木) 13:41:21 ID:???
NULL と 0 が同義に扱われてると知らなかったのですが、
値が正確に NULL か 0 かを評価することってできないのでしょうか?

やりたいことは、

+----------+
| num | data |
+----------+
| 0 | A |
| 1 | B |
| NULL | C |
+----------+

ここでフィールド num の値が 0 以外のものをすべて SELECT で抽出したいのです。
(表の場合だと B と C のレコードだけ取りだしたい)

以下では 0 が NULL と扱われているようで、うまくいきませんでした。

SELECT * FROM tbl_name WHERE num != 0 ×
SELECT * FROM tbl_name WHERE num + 1 != 1 ×

詳しい方教えていただけないでしょうか。
86NAME IS NULL:2009/12/17(木) 16:30:07 ID:???
>表の場合だと B と C のレコードだけ取りだしたい

SELECT * FROM tbl_name WHERE num != 0 OR num IS NULL
87NAME IS NULL:2009/12/17(木) 21:33:12 ID:???
>>84
了解しました m(_ _)m
88NAME IS NULL:2009/12/18(金) 06:45:22 ID:???
>>86
ありがとうございます!
89NAME IS NULL:2009/12/18(金) 14:14:19 ID:mi4KaXUR
MySQLというか設計の話になると思うんですけど
1対1のリレーションを作るとき、例えば
shopとshop_addressを別のテーブルに分けて作るとき、shopがaddressを持ってると考える方が
自然っぽいので
CREATE TABLE shop
(
id int unsigned NOT NULL AUTO_INCREMENT,
shop_address_id int unsigned NOT NULL,
name int unsigned,
PRIMARY KEY (id)
);
CREATE TABLE shop_address
(
id int unsigned NOT NULL AUTO_INCREMENT,
address int unsigned,
PRIMARY KEY (id)
);

ALTER TABLE shop
ADD FOREIGN KEY shop_address_id
REFERENCES shop_address (id)
ON UPDATE CASCADE
ON DELETE CASCADE
;
こんな感じにテーブル作ると思うのですが、これを逆に
CREATE TABLE shop_address
(
shop_id int unsigned NOT NULL AUTO_INCREMENT,
address int unsigned,
PRIMARY KEY (id)
);
みないに外部キー自体をそのテーブルの主キーにするのは変でしょうか?
MySQLって外部キーにも自動でインデックスを貼るみたいだし、登録・アップデイト時のコストを考えると
コッチのほうがいいような気がするんですが、おかしいでしょうか?
お願いします。
90NAME IS NULL:2009/12/18(金) 14:27:04 ID:IKJKYiUP
Alter table構文を使って、既存のテーブルにon update cascade等を追加する方法はありますか?
91NAME IS NULL:2009/12/18(金) 14:43:13 ID:???
>>90
一回外部キー制約自体を削除して新たに制約をALTERするのじゃだめですか?
92NAME IS NULL:2009/12/18(金) 15:03:58 ID:???
>>91
それで大丈夫でした。ありがとうございました。こうやってやるんですね。
93NAME IS NULL:2009/12/18(金) 15:11:10 ID:???
C:ドライブにインストールした後で、
新たに作るデータベースを、D:とか他のドライブに作れますか?
94NAME IS NULL:2009/12/19(土) 18:00:34 ID:j3ghDKdv
Linux、DBともに初心者です。
MySQL5.0、text型のフィールドにShift_JISの文字列を入れる処理を行いました。

 【クエリ例】
 REPLACE foo_table SET bar = 'サシスセソ\' WHERE 〜;

 【結果】
 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 〜

クエリでは、Shift_JISにおける「ソ」の2バイト目がバックスラッシュになる関係で、「ソ\」としていますが、
これがどうやら、直後の「'」と結びついてしまい、結果として文字列のシングルクォーテーションが閉じてない
……と判断されてしまうのではないかと思いました。

「ソ」の後に「\」を付けない場合、ターミナルからではそもそもコマンドとして受け取ってもらえません。
「ソ\ 」のように、後ろに別の文字(半角空白など)を挿入した場合は何ら問題なく実行されます。


十中八九、どこかの設定がマズいのだと思いますが、何かヒントを頂けませんでしょうか。
アプリケーションを変える、文字コードをShift_JIS以外にする、というのは運用上難しいです。
95NAME IS NULL:2009/12/19(土) 19:20:33 ID:???
>>94
俺は ExcelVBA MySQL5.1.37
str1 = Replace(str, "\", "\\", , , vbTextCompare)
という風にしてtext型のカラムに入れてる

ちなみに、testで
aa int
tt text

insert into t(aa,tt) values(1,"サシスセソ\\");
これでセット出来たよ
96NAME IS NULL:2009/12/19(土) 19:43:17 ID:???
ソ\\\
97NAME IS NULL:2009/12/19(土) 19:50:27 ID:???
>>94
状況不明。
手順をもっと具体的に。

推測できる問題は、ターミナル、MySQL
クライアントの文字エンコーディングの
設定か?

ちなみに、ちゃんとした環境だったら、
\とかいちいち気にしなくてもいいはず。
98NAME IS NULL:2009/12/19(土) 20:37:49 ID:???
>>95
VBAって\によるエスケープってありましたっけ?

>>96
ダメでした


>>97
先に挙げたクエリを叩いたら文法エラーって言われたので何でだろ?ってだけで。
正直、それ以上の手順はありません。

>ちゃんとした環境
そうなんですよね。
前にMySQLを使ってた時(バージョンは不明)は、そんな問題を気にしたことが無かったんで。偶然かもしれませんが。
99NAME IS NULL:2009/12/19(土) 23:41:21 ID:???
4つのテーブルをINNER JOIN させたいです。
例を下さい
10094:2009/12/20(日) 00:54:36 ID:???
今気づいた。
>94のクエリ例にWhere句がくっついてるのは気にしないでください。
必要な部分だけ切り貼りしたり、書き換えてる時にミスったようです。
101NAME IS NULL:2009/12/20(日) 16:10:32 ID:???
どういう環境で入れたのか
102NAME IS NULL:2009/12/21(月) 09:33:28 ID:???
>>98
>クエリを叩いた
その手順を言えっつーんだよ。

ターミナル、MySQLクライアント、あるいは
他の何か、の切り分けができねーだろ。


ところで、Windows環境で
SELECT "ソ"
を実行してもそうなるみたいだな。
ターミナルの文字エンコーディングが
ShiftJISだとダメなんでは。
utf8にでもすれば。
10394:2009/12/21(月) 11:34:24 ID:???
解決はしてませんが、原因の切り分けが出来ました。
アプリケーションからMySQLにクエリを渡すとき(サニタイズ時)に原因があったようです。
お騒がせしました。

アプリケーション(Perl)からMySQLを叩いてエラーを出したとき、
その時のクエリを標準エラーに渡すような作りになっていたのですが、
それをターミナル上でコピペしてたので、当然エラーになっていました。
104NAME IS NULL:2009/12/21(月) 17:22:46 ID:???
SELECT * FROM table WHERE (col1,col2) IN ('val1','val2')
ってMySQLではできないのでしょうか? 5.1を使ってますがエラーがでます。
105NAME IS NULL:2009/12/21(月) 17:27:32 ID:???
>>89
いいんでないの?
そうやってる場合も多いと思う。
106NAME IS NULL:2009/12/21(月) 17:39:12 ID:???
プライマリーキーは数値じゃなくてもいいんですか?
107NAME IS NULL:2009/12/21(月) 18:24:00 ID:???
>>104
括弧不足
108NAME IS NULL:2009/12/21(月) 18:25:22 ID:???
>>106
おk
109NAME IS NULL:2009/12/21(月) 18:34:32 ID:???
>>107
どこに括弧を入れればいいんでしょうか?
110NAME IS NULL:2009/12/21(月) 18:48:06 ID:???
SELECT * FROM table WHERE (col1,col2) IN (('val1','val2'),('val1','val2'))
ああ、こういうことですか。
複数カラムに同じキー配列を検索かけることはできないんですかね?
111NAME IS NULL:2009/12/22(火) 09:49:21 ID:???
>>110
OR/AND
112NAME IS NULL:2009/12/22(火) 12:40:38 ID:???
>>111
質問者が聞いているのは微妙にそこじゃない気がする
113NAME IS NULL:2009/12/22(火) 13:10:43 ID:???
>>112
エスパーあらわる!
114NAME IS NULL:2009/12/22(火) 15:42:56 ID:???
updateするときのvaluesみたいな感じで、そのまま並べられないの?
という質問とみた。
115NAME IS NULL:2009/12/22(火) 16:37:34 ID:???
たぶんこれを冗長じゃなく書きたいんじゃないかと。

col1 in ( 'val1', 'val2' ) or col2 in ( 'val1', 'val2' )
116NAME IS NULL:2009/12/22(火) 17:05:54 ID:???
>>115
そうです。
117NAME IS NULL:2009/12/22(火) 18:37:56 ID:???
104=109=110=115 です
118NAME IS NULL:2009/12/22(火) 19:07:29 ID:???
すいません間違えました
104=109=110=112=114=116=117 です
119NAME IS NULL:2009/12/22(火) 19:52:34 ID:???
ひとり漫才かよ
112と114は違うでしょ。
120NAME IS NULL:2009/12/23(水) 03:30:41 ID:???
すいませんすいません
104=109=110=112=114=116=117=118=119 です
121112=114:2009/12/23(水) 11:58:54 ID:???
お前は俺だったのか!
122NAME IS NULL:2009/12/23(水) 21:08:36 ID:dybUrgQR
MySQL5.1 で、複雑な処理をするストアドを書こうとしてます。
結果をレコードセットとして受け取りたいんですが、、どうにもやり方がワカランです。

create procedure sample ( OUT param ??? , IN param2 INT)
BEGIN
SELECT ......
......
END
と書くのはいいけれど、paramに結果セットを入れて…呼び出し側からはレコードセットを…と思ってます。
(実際はPHPで呼び出したいんですが)
やり方として間違っているのか、MySQLでは出来ないのか…
ググってサンプルを参考にはしてるのですが、複数結果を返すようなものが見あたらず…
よろしくお願いします。
123NAME IS NULL:2009/12/24(木) 02:06:04 ID:JPg1Hzat
MySQLって再配布自由なんだっけ?
自分のアプリにバンドルして問題ない?
124NAME IS NULL:2009/12/24(木) 09:03:09 ID:???
>>123
>再配布自由
なわけがない。
あたりまえ。
詳しくはライセンスを読め。
125NAME IS NULL:2009/12/24(木) 10:26:40 ID:???
あたりまえはともかく
ライセンス違反を指摘された時に2chで聞いたからと答えるつもりなのかと
126NAME IS NULL:2009/12/24(木) 13:20:30 ID:???
別にええんちゃう
127NAME IS NULL:2009/12/24(木) 19:01:12 ID:???
どっちにしても責任は本人がとるしか
ないんだしな。
128NAME IS NULL:2009/12/24(木) 21:26:23 ID:???
>>123
問題ない
129NAME IS NULL:2009/12/24(木) 23:12:07 ID:???
自分のアプリがGPLなら良いんちゃう?
130NAME IS NULL:2009/12/25(金) 20:23:13 ID:???
>>122
1ヶ月ぐらい前に同じことで悩んだ。
たぶんできない
131NAME IS NULL:2009/12/26(土) 13:05:51 ID:???
InnoDBについてですけど、、、、
ibdata1って大きいファイルがありますけど、
例えばAと言うデータベースはこのファイルに、Bというデータベースはあのファイルにって使い分けはというか指定は出来ないのですか?
132NAME IS NULL:2009/12/26(土) 14:16:12 ID:???
innodb_file_per_table = 1 を設定して
データベースを作り直せばできる。
133NAME IS NULL:2009/12/26(土) 14:34:00 ID:???
>>132
有難うございます!
134NAME IS NULL:2009/12/26(土) 16:04:57 ID:???
MyISAMみたいにそのファイルコピーしても
バックアップ・リストアはできないから注意してね
135131:2009/12/26(土) 18:29:04 ID:???
>>134
すいません、ついでに教えてください。
今はバックアップは mysqldump で取っていますが、innodbの場合、他にバックアップの手段は有るのでしょうか?
136NAME IS NULL:2009/12/26(土) 19:39:44 ID:???
はじめまして
主キーと外部キーとユニークキーは理解できるのですが、
ただの KEY というのはなんでしょうか?
137131:2009/12/26(土) 19:54:04 ID:???
ググってみると
InnoDB Hot Backupというのがあるけど、これって商用みたいですね。
失礼しました
138NAME IS NULL:2009/12/26(土) 22:04:22 ID:???
>>136
インデックスだろ。
検索速度向上用。
139NAME IS NULL:2009/12/27(日) 02:41:54 ID:???
>>138
ありがとうございます
お礼が遅くなりすいません
140NAME IS NULL:2009/12/28(月) 11:54:10 ID:???
>>134
あとほかにどのファイルが必要なんだっけ?
141NAME IS NULL:2009/12/28(月) 14:38:05 ID:???
InnoDBの物理バックアップ(ファイルコピーによるバックアップ)は
そもそもテーブルやDB単位では取れない。
基本的にdatadir以下を全部コピー。
質問の直接の回答としては、足りないのは以下の3ファイル。

datadir/ibdata1 (innodb_file_per_tableしてもなお必要)
datadir/ib_logfile0
datadir/ib_logfile1
142NAME IS NULL:2009/12/28(月) 14:39:02 ID:???
もちろんファイルコピー時にはmysqldを停止すること。
停止したくなければHotBackupを買うこと。
143NAME IS NULL:2009/12/28(月) 15:10:22 ID:???
>>141
ありがとう
ib_logfile*もいるのかーこれかー
144NAME IS NULL:2009/12/30(水) 20:32:54 ID:???
>>142
>HotBackup
のメリットってなんなんだろう?
dumpすればいいと思うんだけど。
145NAME IS NULL:2009/12/30(水) 23:07:45 ID:???
TESTTIMEがDATETIME型で、2009-12-30 20:32:00のとき、
UPDATE test SET TESTTIME = TESTTIME + 10;
とすると,
2009/12/30 20:32:10となって、次に+100とすると2009/12/30 20:33:10
となります。
本当は、TESTTIME + 秒 としたとき、秒分の加算された結果が欲しかったのですがうまくいきませんでした。
一応考えたのが、DATETIME型はやめて、INT型でmysqlの外からtimestampの値を入れようと思ったのですが
これだと2038年頃で扱える数値の限界がきてしまうみたいなので避けようと思いました。
何か良い方法はありませんでしょうか。

やりたいことを詳しく書くと
・アクセスした時間を記録する
・同時に記録を削除したいタイマーをセットする
・時間は秒単位で検索したい
・記録した時間がタイマーより下回ったらアクセス記録を削除する
といったようなことがしたいです。よろしくお願いします。
146NAME IS NULL:2009/12/30(水) 23:21:36 ID:???
すみません質問した矢先にBIGINTなるものがあることを知りました
自己解決しました
147NAME IS NULL:2009/12/31(木) 09:38:53 ID:???
>>144
物理コピーなのでバックアップ・リストアが速い
mysqldumpもバックアップは速いけどリストアが死ぬほど遅い
148NAME IS NULL:2010/01/01(金) 19:51:38 ID:???
まぁインデックス作り直しになるわけだから遅いのは当然っちゃ当然だわな
149NAME IS NULL:2010/01/02(土) 17:54:37 ID:+FDt10vX
mysql.hって何処で手にはいるの?
150NAME IS NULL:2010/01/02(土) 19:37:15 ID:???
>>149
mysql-noinstall-5.1.42-win32(winなら
151NAME IS NULL:2010/01/04(月) 11:01:24 ID:???
最近 MySQl (5.1.41) が

100104 10:48:15 InnoDB: Error: page 1 log sequence number 19962114575
InnoDB: is in the future! Current system log sequence number 3012747198.
InnoDB: Your database may be corrupt or you may have copied the InnoDB
InnoDB: tablespace but not the InnoDB log files. See
InnoDB: http://dev.mysql.com/doc/refman/5.1/en/forcing-recovery.html

のようなエラーをログに吐き、しばらくすると止まってしまいます。
メッセージのリンクを読んで、
innodb_force_recovery = 4
で起動して、全dumpとリストアをかけたのですが、それでも直りません。
解決策をご存じの方いらっしゃいませんか?
152NAME IS NULL:2010/01/04(月) 11:03:37 ID:???
>>145
time_add( testtime, interval 100 seconds)
だったかな。
153NAME IS NULL:2010/01/04(月) 18:14:26 ID:???
追加の時、数字を指定しなくても
自動で一番後ろに追加することってできないの?
154NAME IS NULL:2010/01/04(月) 20:20:56 ID:???
>>151
dumpして、
データベースをdropして
mysqldを停止して
ibdata1とib_logfile*を削除して
innodb_force_recoveryを外して
mysqldを起動して
リストア。
155NAME IS NULL:2010/01/04(月) 21:50:23 ID:???
MySQLを救え!
http://www.helpmysql.org/ja/
156NAME IS NULL:2010/01/04(月) 21:57:45 ID:???
俺はBigtableもしくは他のKVSと心中することにした
157NAME IS NULL:2010/01/04(月) 22:25:46 ID:???
>>154
ありがとうございます。
レスを頂いた直後から作業を開始しましたが、リストアって時間かかりますね。
でも、ログエラーは(今のところ)出ていません。
このままうまくいくことを願いつつ、お礼申し上げます。
158NAME IS NULL:2010/01/04(月) 23:23:10 ID:???
追加と更新って、どう違うんだ?
159NAME IS NULL:2010/01/04(月) 23:26:13 ID:???
INSERTとUPDATEくらい違う
160NAME IS NULL:2010/01/04(月) 23:49:15 ID:???
それを聞いてるんじゃん
161NAME IS NULL:2010/01/05(火) 18:21:18 ID:???
MySQL5.0.45でストアドを書いてるんだけど、
エラーが起こったときに「HANDLER FOR SQLEXCEPTION」でエラーが起こったことはわかるけど、
どんな内容のエラーが起こったのか取得できなくて困ってます。
エラーの内容を取得する方法って有りますか?
162NAME IS NULL:2010/01/06(水) 00:21:44 ID:???
全角でテーブル名とかカラム名とか使っちゃいけない感じ?
いちいちバッククォートだかアクサンだかで区切るのめんどい。
SQLITEはそこら辺融通が利いたんだけどなあ。
163NAME IS NULL:2010/01/06(水) 00:33:27 ID:???
>>162
マジで全角使いたいの?
164NAME IS NULL:2010/01/06(水) 01:04:45 ID:???
>>163
テーブル設計するときは大体全部の項目が全角じゃん。
postgreとかSQLITEとかSQLServerだとそのまま流し込むのが一般的じゃん。
ドキュメントの手間省けるし。何よりオレがそれに慣れきってる。
だから今更全部エスケープとか正直辛い。なんか回避方法があれば是非。
165NAME IS NULL:2010/01/06(水) 02:43:35 ID:???
PG視点とSE視点の違いってこういうことなのかな、と思った
166NAME IS NULL:2010/01/06(水) 07:53:00 ID:???
DELETE + EXISTS の組み合わせの SQL って使えないですよね?
DELETE FROM T1 A
WHERE EXISTS (SELECT * FROM T1 B WHERE A.C1 = B.C1)
みたいなのってエラーになりますよね?
167NAME IS NULL:2010/01/06(水) 12:35:20 ID:???
>>164
俺、その職場じゃなくて良かったわ。
168NAME IS NULL:2010/01/06(水) 13:51:30 ID:???
これだから非英語圏はあああああああああ
169NAME IS NULL:2010/01/06(水) 19:35:45 ID:???
kaiin_id
juusho
dennwabangou
170NAME IS NULL:2010/01/06(水) 21:35:45 ID:???
MSSQLや、Access使いは全角派が圧倒的だな。
多分プログラムを書かない人たちだからかな。
個人的にはマジでやめてほしい。
Oracle派は半角大文字だね。
MySQL、PostgreSQL、SQLite派は半角小文字だな。
171NAME IS NULL:2010/01/07(木) 02:02:18 ID:???
>>170
英単語で適切なカラム名を決められないときは、
何を入れるべきなのか分かってないことがほとんどだと思う。
たいていあとで泣きを見る。

unicode の問題とかは、些細なこと。
172NAME IS NULL:2010/01/07(木) 02:03:35 ID:???
>>170
そんなに毛嫌いするほどのものでもないだろ
クライアントの強い要望でそういう設計したことあるけど
あれはあれでおもしろくて便利だったぞ
173NAME IS NULL:2010/01/07(木) 16:09:43 ID:???
UNIQUE属性を付けるとめちゃくちゃ行のサイズが膨れるんだけど、どして?
CREATE TABLE ユーザ(
ID SERIAL,
ユーザID VARCHAR(30) NOT NULL UNIQUE,
パスワード CHAR(32) NOT NULL,
メールアドレス VARCHAR(255) NOT NULL UNIQUE,
ユーザ種別 INTEGER NOT NULL DEFAULT 1
);
たったこれだけのテーブルなのに一行が2300バイトとかそれくらい行きやがる。
制約としてユニークがほしいだけなのに、なんかインデックス作成されてるし。
どうすりゃええのん。
174NAME IS NULL:2010/01/07(木) 18:51:17 ID:???
ユニークかどうか調べるのにインデックスが必要なんだ
これはMySQL以外でも同じ
メールアドレスにUNIQUEつけるのはかなり厳しい
175NAME IS NULL:2010/01/07(木) 19:01:22 ID:???
メールアドレスって、そもそもユニークなもんじゃないの?
176NAME IS NULL:2010/01/07(木) 19:11:43 ID:???
よく考えたらメールアドレスは変更される可能性もあるから、
UNIQUEは外してメールアドレス管理テーブル作ったほうがいいと判明した。
(変更の際と登録の際にユニークチェックすればいい)
ありがとう。ユニークはIDだけにしておくわ。
177NAME IS NULL:2010/01/08(金) 01:58:04 ID:???
MySQL の勉強を始めました。
phpMyAdmin にはじめから登録されている データは バッククォートを使用しない記述で成功するのですが(SELECT * FROM pma_history)
自分で作成したデータは バッククォートを使用しないと失敗してしまいます。(SELECT * FROM `pma_history`)
バッククォートを使用しないようにするにはどうしたらよいのでしょうか?

又、バッククォートを使いたい場合に ` をコピー&ペーストでやっているのですがキー入力で使う場合には
どう入力すればよいのでしょうか?

MySQLのバージョンは 5.1.37です。
初歩的で申し訳ありませんがご教授お願いします。


178NAME IS NULL:2010/01/08(金) 08:02:48 ID:???
Shift + @
179177:2010/01/08(金) 19:30:56 ID:???
>>178
ありがとうございます。
これで記述が楽になります。
180NAME IS NULL:2010/01/08(金) 20:09:58 ID:u4qBdSv5
mysqlは一つのクエリー文を実行するときに関係するテーブルはロックされますか。

具体的には、

update aaa set bbb = bbb+1 where ccc = 'ddd';

このクエリー文を二つのクライアントA,Bから同時に実行したときに、インクリメントが二度行われるかが知りたいのです。
Aのクエリー実行のためにbbbを読む、Bのクエリー実行のためにbbbを読む、Aがbbb+1を書き込む、A用にbbb+1を書き込む、B用にbbb+1を書き込む、というように実行されたらBで実行したほうしか反映されませんが、実際のところどうなのでしょうか。
181NAME IS NULL:2010/01/08(金) 20:28:54 ID:???
SQL単位で処理はアトミックなので+2される。
182180:2010/01/08(金) 21:57:45 ID:???
謝謝
183NAME IS NULL:2010/01/09(土) 21:02:05 ID:???
LAN内で別PCのmysqlにアクセスしようとしたら
Access denied user 'root'@'mac-mini'
と表示されてしまいます。

mysqlテーブルでは
Host:% User;root
も設定してあります。

なぜ接続できないのでしょうか、パスワードもあっています。
184NAME IS NULL:2010/01/09(土) 23:48:20 ID:ZiGlb1UO
LEFT JOIN でのインデックス作成の内容がよく分からないので誰か教えてください

テーブルが二つあって `A.id`, `A.b_id`, `A.text`, `B.id`, `B.value` というカラムで 5 つ全てにインデックスを作成していて (カラム名と同じインデックス名)
LEFT JOIN で A テーブルに B テーブルを JOIN してます

この状態で `B.value` に対して検索を行ったクエリを explain で確認すると
B テーブルに対しての type フィールドは eq_ref、possible_keys フィールドは PRIMARY,value となっていてインデックスが使用されているのは判るのですが
A テーブルの type フィールドは ALL で、possible_keys フィールドは b_id となっていまして (他の key, key_len, ref フィールドは NULL です)

これで A テーブルのインデックスって使われているんでしょうか
ALL でなく ref になって他のフィールドも NULL でなければ使われている気がするんですが…

もしかしてこの場合は、B テーブルの検索を行って、id を取得してその id を使用して A テーブルを検索するという SELECT を 2 回使わないといけないのでしょうか
詳しい人よろしくお願いします
185NAME IS NULL:2010/01/09(土) 23:53:53 ID:???
LEFT JOINしておいて右側のテーブルに条件を差し込むのは筋が悪い

じっくり考えたら、B.valueの条件で検索する場合、
LEFT JOINじゃなくてINNER JOINで良かったりしない?
そうすればAの条件がrefになる
186184:2010/01/10(日) 00:44:11 ID:???
>>185
迅速なレスありがとうございます

上では書いてないんですが INNER JOIN でなく LEFT JOIN を使ってるのは
A.b_id に NULL が入っているレコードがあるんですorz
サイトの関係上 NULL を代用する事が不可能なんで LEFT JOIN で結合するしか無理で…

INNER JOIN も無理だとやっぱり SELECT を 2 回やるしかないですかね…
NULL が入っててもレコードを取得出来るなら INNER JOIN を使いたいんですが

もう SELECT 2 回やるしかないですかね…?
187NAME IS NULL:2010/01/10(日) 01:53:18 ID:???
簡単な質問ですいません

create tableは出来て、create databaseはできないユーザーを作りたいんですが
可能ですか?
188NAME IS NULL:2010/01/10(日) 03:59:30 ID:???
テーブルにDateTime型で定義された列が存在している場合に、
2つの特定レコードの登録日を比較し、
経過分数をSQLで算出するにはどうすれば良いでしょうか?
※MySQL5.0

具体的には次の通り時間が@Aとあった場合に、
@からAまでの間の経過時間として 5分 という値が欲しいです。

時間@
 2010-01-10 10:10:00

時間A
 2010-01-10 10:15:00
189NAME IS NULL:2010/01/10(日) 04:43:06 ID:???
188
ですが自己解決しました。
190NAME IS NULL:2010/01/10(日) 07:26:36 ID:???
>>187
特定のデータベースにしかアクセス出来ないようにして、create権限を与えたら良いのでは?
191NAME IS NULL:2010/01/10(日) 12:41:01 ID:???
>>186
うん、A.b_idにnullがあるのは分かるよ。

で、B.valueで検索をかけたときに、
A.b_idがnullであるようなレコードは
決して検索結果として現れないと思うんだけど。

なので、その検索処理に限っては、INNER JOINでいいんじゃないの?
192NAME IS NULL:2010/01/10(日) 22:57:54 ID:???
MySQLのSQLで経過時間をtimediff関数を使用して算出しているのですが、
取得された結果のうち

・時間
・分
・秒

のみを取得するにはどうすれば良いでしょうか?

SELECT
  -- 時間
  -- 分
  -- 秒
  -- 時間:分:秒 の取得
  TIMEDIFF( NOW(), REGIST_DATE_TEST )
FROM
  TEST_TABLE
193NAME IS NULL:2010/01/10(日) 23:51:51 ID:???
mysql> select now(),hour(now()), minute(now()), second(now());
+---------------------+-------------+---------------+---------------+
| now() | hour(now()) | minute(now()) | second(now()) |
+---------------------+-------------+---------------+---------------+
| 2010-01-10 23:51:32 | 23 | 51 | 32 |
+---------------------+-------------+---------------+---------------+
1 row in set (0.00 sec)
194NAME IS NULL:2010/01/11(月) 00:05:08 ID:???
>>193
ありがとうございました。
195NAME IS NULL:2010/01/11(月) 05:07:01 ID:???
delete from Table where min(No)

これだとTableのNoの最小値が削除できません。
ご教授お願いします
196NAME IS NULL:2010/01/11(月) 06:26:56 ID:???
DELETE FROM テーブル WHERE カラム=(SELECT MIN(カラム) FROM テーブル)
じゃ駄目か?
197NAME IS NULL:2010/01/11(月) 10:19:14 ID:???
WinXP MySQL 5.1です。
前スレでinnodb_file_per_tableについて聞いた者ですがまた
一つ教えてください。

dataがAll UsersのApplication Dataに出来ているのですが、これを
例えばd:\data\database\〜に指定することは出来ませんか?

my.iniには
#*** INNODB Specific options ***
innodb_data_home_dir="D:/Data/DataBase/"
という指定はしているのですが。
198NAME IS NULL:2010/01/11(月) 14:33:39 ID:???
datadirも指定したらいいんじゃないの
199NAME IS NULL:2010/01/11(月) 18:39:26 ID:???
>>198
有難うございます

show variables;

で変更後のディレクトリも確認出来ました
200NAME IS NULL:2010/01/12(火) 07:40:55 ID:???
WindowsでUTF-8にしてインスコするとサービス起動の時に1067エラーでて
仕方なく SJISでインスコしちゃったんだけど変えられる?!
201失礼します:2010/01/12(火) 10:35:18 ID:xpDNgIEn
202NAME IS NULL:2010/01/15(金) 17:40:10 ID:h+tgglSf
RHEL5.4
mysql 5.0.77
を稼働させています。
大量のデータ(6000万件以上)&ひっきりなしに更新がかかるテーブルにindexを張りたいんですが、
create index 中はlockがかかってしまうようです。
稼働を止めずにindexを春にはどうしたらいいでしょうか?よろしくお願いします。
203NAME IS NULL:2010/01/15(金) 23:27:09 ID:???
レプリケーションのスレーブで作って
入れ替え、かな

もちろん入れ替え作業時は止まるけど
204NAME IS NULL:2010/01/16(土) 01:53:20 ID:???
質問させてください。

linux + mysqlでシェルスクリプトからSQLを実行し、結果をCSVに保存しようとしています。
CSVファイルの名前をシェルスクリプト実行時に与えるパラメータで決めたいので
>mysql -uuser -p pass db_name <hoge.sql >$1.csv
のように実行しようと考えたのですが、
この時にフィールドディスクリプタをカンマに変更する方法はありますか?
フィールドディスクリプタのデフォルト設定を変更する方法があれば、それでも良いです。
以上、よろしくお願いします。
205NAME IS NULL:2010/01/16(土) 05:59:07 ID:???
select into outfile fieldsでぐぐるんだ
206NAME IS NULL:2010/01/16(土) 14:15:14 ID:8tjiaE5+
>>203
ありがとう。なるほどね。
耐障害性も上がるしレプリ導入するか。。
切り替えずにそのままでレプリカ側で検索などさせればいいんだね!
これなら止まらないね!
207NAME IS NULL:2010/01/16(土) 19:58:55 ID:7PRS7GSZ
>>203

レプリケーションする場合って同じverじゃないと駄目なんでしょうか?
208NAME IS NULL:2010/01/16(土) 22:55:04 ID:???
スレーブのバージョンはマスターと同じかそれ以上だったはず
5.0 → 5.1 はOK
マスタが3.23とか4.0とかは知らない
209204:2010/01/16(土) 23:08:03 ID:???
>>205
ありがとう。
でもそれだとファイル名をSQLに書くことになるから、固定になっちゃうんだよね。
210NAME IS NULL:2010/01/16(土) 23:50:03 ID:???
そんなことないよできるよ

$ OUTFILE='/tmp/test.csv'
$ mysql -u root -p -e "select * into outfile '$OUTFILE' fields terminated by ',' from emp" scott
Enter password:
$ head -3 /tmp/test.csv
7369,smith,clerk,7902,1980-12-17,800.00,\N,20
7499,allen,salesman,7698,1981-02-20,1600.00,300.00,30
7521,ward,salesman,7698,1981-02-22,1250.00,500.00,30
211NAME IS NULL:2010/01/17(日) 02:07:02 ID:???
mysqlが突然起動しなくなった。
何度立ち上げようとしても

terminating worker thread 1とだけ表示される。
ローカルホストのmyadminに行っても例のエラー2003で接続不可。
挙げ句にサービスを調べてもmysqlが存在しなくなっていた。

原因は何なんだorz
212NAME IS NULL:2010/01/17(日) 08:37:43 ID:Gs+xzQqA
OPENPNEをたちあげるため、mysqlにデータベースを作成しようとおもったのですが、
[ CREATE DATABASE openpne3 DEFAULT CHARACTER SET=utf8;]でつくると、
error 1064(42000) となります。 どうにかできませんか?
OSはwindowsXPでMYSQLのバージョンは5.5です
213NAME IS NULL:2010/01/18(月) 17:50:44 ID:???
古いサーバからmysqldumpでダンプしたら
コメントに ----------- ってのがあるんだけど
最近のmysqlサーバだと-- の後ろにスペースが必要だから
コメント扱いされないよね

mysqlコマンドで、-- の後ろにスペースが無くてもコメント扱い
してくれるようなオプションなり設定なりってあったっけ?
214204:2010/01/18(月) 22:18:27 ID:???
>>210
遅くなった。
そうかシェルスクリプトにそのまま書いちゃえば良いのか。
ありがとん。やってみる。
215NAME IS NULL:2010/01/18(月) 23:19:06 ID:mfleopeD
久しぶりに見たら、質問応答スレになっちゃってた。
5.5の評判を聞きたかったんだけど・・・。
だれか使ってる人いる?
216NAME IS NULL:2010/01/18(月) 23:36:16 ID:???
>>215
いれてみた。
5.1とあんま変わらんね。
217NAME IS NULL:2010/01/19(火) 00:19:15 ID:jEOiz32W
下のようなデータ構造のテーブルがあるのですが、欲しい情報を得るSQLが分かりません。
どなたかご教示頂けないでしょうか。宜しくお願いします。

【テーブル】

TABLE_NAME
----------
COLUMN_1 COLUMN_2
aaaaaaaa 11111111
aaaaaaaa 11111111
aaaaaaaa 11111111
bbbbbbbb 22222222
bbbbbbbb 22222222
bbbbbbbb 33333333
bbbbbbbb 33333333
bbbbbbbb 33333333

【欲しい情報のイメージ】

aaaaaaaaのCOLUMN_2は1種類
bbbbbbbbのCOLUMN_2は2種類

【試して駄目だったSQL】
SELECT COLUMN_1, COUNT(COLUMN_2) FROM TABLE_NAME GROUP BY COLUMN_1;

このようにしても、

aaaaaaaaのCOLUMN_2は3個
bbbbbbbbのCOLUMN_2は5個

という情報しか取れません。欲しいのは、あるCOLUMN_1に属するCOLUMN_2の「個数」ではなく「種類」です。

【環境】

MYSQL 5.0 Windows XP SP3
218NAME IS NULL:2010/01/19(火) 00:40:49 ID:???
>>217
SELECT COLUMN_1, COUNT(*) FROM TABLE_NAME GROUP BY COLUMN_1, COLUMN2;
じゃダメだっけ?
219NAME IS NULL:2010/01/19(火) 00:43:31 ID:jEOiz32W
>>218
早速の回答ありがとうございます。

それですと、3件表示されて、その後プログラム上で数える処理を実装しなければいけなく困っています。
できれば、SQLだけで完結したいです。

イメージとしましては、こんなイメージです。

--------+-
aaaaaaaa 1
bbbbbbbb 2
220NAME IS NULL:2010/01/19(火) 00:47:57 ID:???
SELECT
SAB_TABLE1.col1,COUNT(*)
FROM
( SELECT
COLUMN1 AS col1,COLUMN2 AS col2
FROM TABLE_NAME
GROUP BY COLUMN1,COLUMN2
) AS SAB_TABLE1
GROUP BY SAB_TABLE.col1;
じゃ、冗長?
221NAME IS NULL:2010/01/19(火) 00:53:59 ID:???
エイリアス と GROUP BY間違えてた
SELECT
SAB_TABLE1.col1,COUNT(*)
FROM
( SELECT
COLUMN_1 AS col1,COLUMN_2 AS col2
FROM table_name
GROUP BY col1,col2
) AS SAB_TABLE1
GROUP BY SAB_TABLE1.col1;
222NAME IS NULL:2010/01/19(火) 01:00:23 ID:jEOiz32W
>>221
ありがとうございました。
こちらの環境でやったところ、上手くできました。
本当に助かりました。
223NAME IS NULL:2010/01/19(火) 12:14:14 ID:???
>>222
つ COUNT(DISTINCT *)
224NAME IS NULL:2010/01/19(火) 12:19:01 ID:???
MySQLの生みの親、オラクルのサン買収阻止をロシアや中国に嘆願へ--米報道
http://japan.zdnet.com/fyi/story/0,3800100774,20406866,00.htm
225NAME IS NULL:2010/01/19(火) 13:12:00 ID:???
226NAME IS NULL:2010/01/20(水) 15:09:00 ID:???
>>224
粘着やのぉ。
227NAME IS NULL:2010/01/20(水) 23:22:45 ID:???
ロシアと中国とか
頼むにしても相手ってもんがあるだろうよ・・・
228NAME IS NULL:2010/01/21(木) 13:21:28 ID:???
まあしかしオラクルによる買収は迷惑なハナシだ
229NAME IS NULL:2010/01/21(木) 20:42:20 ID:i4vUF73z
プロシージャ内でテーブル名を生成して操作したいんですが、どうすればいいですか?
ttp://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=34266&forum=26&2
上記などを参照してプリペアド文を作ってみて
SQL自体は通るんですが、実際にCALLするとエラーになります。
PROCEDURE dbxxx.spName can't return a result set in the given context

環境はMySQL5.1.37+PHP5.2.11で、プリペアドさえ外してテーブル名を直接指定すれば
他の部分は問題なく、SELECT @〜 で返り値も取得できる状態です。
ちなみに件のテーブル自体も次々に自動生成されるものになっていて、
varNumberはその時の状況で変わります。

CREATE PROCEDURE spName (
中略
BEGIN
DECLARE varNumber MEDIUMINT UNSIGNED DEFAULT 0;
中略
SET @stmt = 'INSERT INTO ? SET
time = varTime,
id = varId,
value = varValue ' ;
PREPARE stmt1 FROM @stmt ;
SET @str = CONCAT( 'TB_log_', varNumber ) ;
EXECUTE stmt1 USING @str;
DEALLOCATE PREPARE stmt1 ;
中略
END
 ↓
CALL spName(@out1,@out2, '$num', '0000000000' , '00' , 'xxxxx' ) ; →この段階でエラー
SELECT @outData1, @outData2 ;

PHPもSQLも経験1ヶ月程度で理解度が中途半端な上に、少し急ぎなので、
できれば具体的にコードを示してもらえると助かります。
よろしくお願いします。
230NAME IS NULL:2010/01/21(木) 21:23:03 ID:i4vUF73z
すみません、補足です。
上の例だとテーブル名生成する意味なさそうに見えちゃいますが
実際にはプロシージャ内で他のテーブル項目を参照したりして
その条件によってvarNumberが変化します。
231NAME IS NULL:2010/01/22(金) 23:50:18 ID:???
欧州委員会、OracleのSun買収を認める - ロシア、中国も追随の見通し
ttp://journal.mycom.co.jp/news/2010/01/22/050/?rt=na

最悪だ
MySQLに未来は無くなった


フォークのRCが出たらしいが、どうもね〜
ず〜とMySQL残ってくれりゃあいいんだがな〜
よりによってオラクルだもんな〜

Save MySQL!
232NAME IS NULL:2010/01/23(土) 04:19:40 ID:???
firebirdが脚光を浴びる日がくるか・・・?
無いか
233NAME IS NULL:2010/01/23(土) 05:23:08 ID:g6vupv1F
234NAME IS NULL:2010/01/23(土) 13:25:58 ID:???
>>232
MySQLがぽしゃっても、MariaDBか、PostgreSQLに行くだろ。
ま、オラクルもMySQL Enterpriseが潰せたら、スモールビジネス向けのMySQLには
頓着しないだろ。
235NAME IS NULL:2010/01/23(土) 23:25:16 ID:zaDBVqlQ
select * from 〜 into outfile''〜文をどのようにJavaに組み込めば実行できるか教えてください
236NAME IS NULL:2010/01/24(日) 00:50:33 ID:???
そのまんまできたよ

Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/scott", "scott", "tiger");
Statement stmt = conn.createStatement();
stmt.executeQuery("SELECT * INTO OUTFILE 'test.txt' FROM emp");
stmt.close();
conn.close();

・あらかじめ grant file on *.* to xxx@yyy; しておく
・ファイルはサーバ側に作成される
237NAME IS NULL:2010/01/24(日) 01:00:54 ID:VdUFimnY
ありがとうございます。助かりました。
238NAME IS NULL:2010/01/24(日) 02:41:54 ID:T0Fkwc0r
Mysql初心者です。

環境はMYSQL5.1.39+Windowsで、
INTO OUTFILEでCSVファイルを出力したのですが、
どうやってもファイルの文字コードがUTF-8で出力されません。

どうか助けてください。(´Д⊂グスン


select * from [テーブル名] into outfile [出力ディレクトリ] fields terminated by ',' optionally enclosed by '"' lines terminated by '\r\n';

mysql> SHOW VARIABLES LIKE 'char%';
+--------------------------+-----------------
| 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
| character_sets_dir | XXXXX
+--------------------------+-----------------
239NAME IS NULL:2010/01/24(日) 02:59:41 ID:???
>>238
イヤです。


・・・せめて、WINDOWSのバージョンぐらい書け。
240NAME IS NULL:2010/01/24(日) 03:09:26 ID:???
>>238
何で出力されるん?
241NAME IS NULL:2010/01/24(日) 03:10:13 ID:???
あと、Windowsのバージョンとかどうでもいいだろ
242NAME IS NULL:2010/01/24(日) 09:50:54 ID:T0Fkwc0r
>>239 XP profです。
>>240 Shift-jisです。
243NAME IS NULL:2010/01/24(日) 10:23:14 ID:???
>>236
scott tigerなんだ
244NAME IS NULL:2010/01/24(日) 17:29:07 ID:ZODmn3QN
http://◎◎◎.com:1111でコンパネログイン画面ににだれでもアクセスできるんですが
.htaccessとかでIPのアクセス制限とかかけなくても平気なんでしょうか?
しかしindex.htmlとplesk-statしかフォルダがないのですが…。
:1111ってなんなんでしょう?

245NAME IS NULL:2010/01/24(日) 17:41:09 ID:???
それってここで聞くことなのかな
246NAME IS NULL:2010/01/24(日) 17:50:40 ID:???
>>243
Oracleの伝統だなw
247NAME IS NULL:2010/01/24(日) 17:56:48 ID:ZODmn3QN
>>245
飛ばしてくれるとありがたいです。
データベース・・・webprogかな?
すみません。
248NAME IS NULL:2010/01/24(日) 18:30:11 ID:???
programじゃないだろ、どっかネット関連だけど。1111はポート番号
249NAME IS NULL:2010/01/24(日) 19:25:47 ID:???
質問から判断するに http://pc11.2ch.net/hosting/ かな
利用しているホスティングサービスのスレもしくは
250NAME IS NULL:2010/01/24(日) 22:16:05 ID:ZODmn3QN
>>248
>>249
ID変わったけど244です。ありがとうございます
251NAME IS NULL:2010/01/26(火) 00:26:33 ID:???
赤帽がMariaDBを選択するだろうか・・・

鳥に入ってないDBは使う気になれんから気になるところだ
252NAME IS NULL:2010/01/26(火) 01:33:18 ID:???
Red HatがいまMariaにする理由はないんじゃないかな
5.1系列の間は何も変わらんと思う
253NAME IS NULL:2010/01/26(火) 23:32:24 ID:bxD2KtiS
| character_set_database | utf8

さくらではujis→utf8変更無理ですか?
254NAME IS NULL:2010/01/27(水) 02:16:40 ID:???
>>252
いまとは言っていない

いずれだ
255NAME IS NULL:2010/01/27(水) 18:27:25 ID:???
>>253
うちもさくらだけど問題なく出来るよ
256NAME IS NULL:2010/01/28(木) 01:04:08 ID:JHyNBd8j
flashでmysqlを使いたいので、livedoorのレンタルサーバーかりてみました。
php等を使うといいということで、本を何冊かphp、mysqlの本を買ってみたのですが、
大まかな流れとしては、flashとphp,mysqlどうやって連携するものでしょうか。
キーワードになるコマンドみたいなのを教えてもらえると
今後のおおまかな方向付けができると思うのですが、
漠然とした質問ですが答えていただける方いたら何かコメントお願いいたします。
257NAME IS NULL:2010/01/28(木) 02:18:30 ID:???
>>256
CGI
258256:2010/01/28(木) 06:29:46 ID:???
>>257さんありがと

「PHPはCommon Gateway Interface (CGI) をサポートしており、CGIをサポートするWebサーバ上でPHPスクリプトを実行することができる。」

phpをwikiで調べてみたところ(上記引用)、CGIはPHPで書くことができると考えていいと思うので、
PHP≒CGIみたいなイメージで考えいます。

259NAME IS NULL:2010/01/28(木) 17:19:06 ID:???
情報系大学いっているんだが全くわから任で質問させていただきたくて惨事奉りました。
MySQLにて3つのテーブルを使っての作業です。

Table : list , user , relation
の三つのテーブルが有ります。

list : list_id , list_name , list_owner
user : user_id , user_name
relation : listed_user_id , list_id , listing_user_id

の項目があります。
relationにある listed_user_id を userのuser_id で結合して user_name を表示して
relationにある listing_user_id を userのuser_id で結合して user_name を表示して
relationにある list_id を listのlist_id で結合して list_name を表示したいんです。

ここで最初の二つのlisted_user_idとlisting_user_idが同じuserからの結合というところでうまく構成できずにいます。
ご助力お願いします。
260NAME IS NULL:2010/01/28(木) 17:19:28 ID:???
MySQLを手に入れたOracle――IBMとMicrosoftに与える影響は?
http://www.itmedia.co.jp/enterprise/articles/1001/28/news064.html
261NAME IS NULL:2010/01/28(木) 20:20:24 ID:???
>>259
FROM句には同じテーブルを複数回書ける

FROM user u1, user u2, ...
WHERE u1.user_id = ...
AND u2.user_id = ...
262NAME IS NULL:2010/01/28(木) 21:00:50 ID:???
データベースtestAをコピーして、testBを同じPCに作りたいのだけど、
Windowsだとmysqlhotcopy が無いみたい。

mysqldumpで試したけど、うまく出来なかった。

どうすればいいの?
263NAME IS NULL:2010/01/28(木) 21:16:41 ID:???
MyISAMだけならhot copyじゃなくてcold copyすればおk
264262:2010/01/28(木) 22:45:02 ID:???
>>263
出来た、さんきゅう
265NAME IS NULL:2010/01/28(木) 23:38:32 ID:???
5GB以上のSQLファイルを一気に登録できる方法ないですかね?
266NAME IS NULL:2010/01/29(金) 00:17:26 ID:???
>>265
複数行にわける
267NAME IS NULL:2010/01/29(金) 00:22:44 ID:???
何かオンライン・マニュアルが読めなくなったんだけど...
ページのフッタにはOracleとか表示されてるし...
268NAME IS NULL:2010/01/29(金) 01:06:05 ID:???
>>266
コマンドとかで1回で出来ないですか??
5Gだと、メモリ消費エラーとかで分けれないんです・・・
269NAME IS NULL:2010/01/29(金) 08:08:52 ID:???
>>268
それならメモリ増やすしかないような気がする。
270NAME IS NULL:2010/01/29(金) 09:02:43 ID:???
>>268
環境が分からん。

ttp://codezine.jp/unixdic/w/split/

これで分けたファイル達を、シェルでバッチ登録すりゃいいんじゃ?
271NAME IS NULL:2010/01/30(土) 00:11:57 ID:???
>>259
SELECT
T1.list_id,
T2.list_nm,
T3.user_name,
T4.user_name
FROM relation T1
LEFT OUTER JOIN list T2 ON T1.list_id = T2.list_id
LEFT OUTER JOIN user T3 ON T1.listed_user_id = T3.user_id
LEFT OUTER JOIN user T4 ON T1.listing_user_id = T4.user_id;

これででないかな?
272NAME IS NULL:2010/01/31(日) 17:30:16 ID:bfO+B9ix
レス遅れてすみません!
>>271
できました!
複数指定しなくちゃいけないということとLeftOuterJoinがLeftJoinのことを知りませんでした。
ありがとうございました。
273NAME IS NULL:2010/01/31(日) 19:21:50 ID:???
MySQLで
1-.まず一度抽出する→A
2-AのA1を持つデータを抽出
3-A1を持つA2が持つA1をすべて書き出して数を数える。
ってことをしたいんだけど複雑でわからない・・・。

例 
くだものテーブルA

果物名A1 持ってる人A2
りんご   山田
りんご   渡辺
りんご   鈴木
バナナ   山田
バナナ   渡辺
バナナ   伊藤
すいか   山田
すいか   鈴木
すいか   佐藤
メロン    清水

出したい結果
りんご りんご3
     バナナ2
     すいか2
バナン りんご2
     バナナ3
     スイカ1
すいか りんご2
     バナナ1
     すいか3
メロン メロン1

274NAME IS NULL:2010/01/31(日) 20:42:28 ID:???
>>273
A1を持つA2が持つA1を・・・の時点で
A1-A2-A1´
 りんご 山田 りんご
 りんご 山田 バナナ
 りんご 山田 すいか
ってテーブルをイメージすると

SELECT
FT1.fruit_nm,
FT2.fruit_nm,
COUNT(FT1.cst_nm)
FROM fruit_table FT1
LEFT OUTER JOIN fruit_table FT2 ON
FT1.cst_nm = FT2.cst_nm
GROUP BY
FT1.fruit_nm,
FT2.fruit_nm;

 ででないかな?
275NAME IS NULL:2010/02/01(月) 01:05:49 ID:MIUeLjfW
INSERT IGNOREを使ってみたいのですが
今一つかいどころがわかりません。
PRIMARY KEYが重複してはいけない時点で
IGNOREを満たしているようなきがするのですが・・
276NAME IS NULL:2010/02/01(月) 02:13:29 ID:???
PRIMARY KEYが重複したときエラーを無視して何もしないのがIGNORE

IGNOREなしだと、SELECTして重複しないことを確認してからINSERTとか
INSERTしてみてエラーが返ってきたらハンドリングして次とかするので
プログラムが長くなる
277phpmyadmin:2010/02/03(水) 23:30:04 ID:dbRFvm9u
phpmyadmin関する質問です。
[インポートするファイルの形式]の一覧にCSV,LOAD DATAするCSVが表示されません。
表示させるにはどうしたらいいのでしょうか。
ご助力いただければ幸いです。

環境
phpMyAdmin - 2.11.10
MySQL 5.0.45
278phpmyadmin:2010/02/03(水) 23:47:25 ID:dbRFvm9u
>>277
失礼しました。自己か解決しました。
279NAME IS NULL:2010/02/04(木) 06:19:11 ID:uuf0Gj4A
よかった
280NAME IS NULL:2010/02/05(金) 01:58:57 ID:???
text型ってindex設定できないですか?
検索のときすごい遅いです。

281NAME IS NULL:2010/02/05(金) 02:19:27 ID:???
FullTextインデックスがあるじゃまいか

日本語では単語のデリミタ区切りの問題で、あまり効かないけどね
282NAME IS NULL:2010/02/05(金) 20:21:28 ID:???
失礼します。質問させてください。
会社でサーバーのCPU使用率などをWindows標準のパフォーマンスカウンタで
SQLに記録していこう、という話になりました。
そこで試しにWindwosXPからログをSQLに書き込もうとしたのですが、必ず失敗してしまいます。
MySQLのデータベースは用意したのですが、原因がサッパリ解りません。

とりあえず手順として、MySQL ODBC コネクター5.15をインストールしてシステムDSNを登録して
そこまではきちんと接続できるのは確認したのですが、いざ記録先に指定して書き込もうとすると必ずエラーになります。

とりあえず方法は置いておくとして、Windows標準のパフォーマンスカウンタでMySQLに記録できるのでしょうか?
よろしくお願いします。
283NAME IS NULL:2010/02/05(金) 21:29:21 ID:???
「SQLに書き込もう」とは?
「必ずエラーになります」ってどんなエラー?

284NAME IS NULL:2010/02/05(金) 22:57:17 ID:???
質問させてください。
↓のクエリでサブクエリの結果のカウントも一緒にセレクトしたいんですが可能でしょうか?
SELECT count(id) FROM test WHERE id NOT IN (SELECT DISTINCT id FROM test WHERE status = 0);
285NAME IS NULL:2010/02/05(金) 23:31:24 ID:???
無理かと思ったけど、結構出来るもんだな
286NAME IS NULL:2010/02/05(金) 23:49:32 ID:???
既出かもしれないが、ライセンスの除外規定がよく分からないので、質問。

PHP5.2で自家製Wikiを作っているんだが、修正BSDライセンスにしておけば、
バックエンドがGPL版MySQLでもソフトウェアの配布ができる?

あとFOSS除外規定って、PHPに限らず、PythonやRubyやJavaでも
ソフトウェアのライセンスがBSDライセンスやMPLならば配布可能ってこと?
287NAME IS NULL:2010/02/05(金) 23:55:34 ID:???
>>286
そうだと思う
たいがいのOSSライセンスのソフトウェアにlibmysql混ぜていいはず
288NAME IS NULL:2010/02/06(土) 08:05:33 ID:???
>>287
thanks!
289NAME IS NULL:2010/02/07(日) 11:25:35 ID:2/A0vCNo
テーブルの特定の行の内容を、別のテーブルにコピーすることはできるんでしょうか?

アンケートというか投票システムを作りたいです。

質問用テーブルt_question(ID、質問タイトル、質問本文 の3つのカラム)があるとして、
これに対して、「Yes」「No」の二択で投票するとします。
普通だったら
投票用テーブルt_answerは(ID、t_question.ID、Yes_No)の形にすればいいかと思うんですが、
事情があって、t_answerを
ID、Yes_No、t_question.ID、t_question.qTitle、t_question.qTextの形にし、元の質問用テーブルの
中身を投票時に投票用テーブルにコピーしたいのです。
どうしたらいいでしょうか?
(質問情報をhiddenで引き回して裏で一緒に登録とかでなく、何かmysql関数?を使ってスマートに
実現する方法を知りたいです)


根本的には、こんなことをする理由は質問用テーブルの情報(行)が
上書き更新されてしまうので、投票時の情報を保存したいというのが理由です。

上のやり方以外にも
質問情報を登録時に同時に保存用テーブルにコピーする(二つのテーブルに同じ質問情報をinsertする)
方法もあると思います。そうすれば、質問情報が上書き更新されても保存用テーブルで元のデータがたどれるので。

きっとほかにもいろんなやり方・考え方があると思いますが、おすすめの手段
自分だったらこうするというものを教えてもらえると助かります。
わかりにくくてすみませんが、よろしくお願いします。
290NAME IS NULL:2010/02/07(日) 11:55:03 ID:???
INSERT … SELECT
ttp://dev.mysql.com/doc/refman/4.1/ja/insert-select.html

これでレコード作ったあとに、yes/no等をUPDATEで書き込み、
だとアクセス二回になっちゃうな。

にしても、t_answerをそんな珍妙なことにすること自体が…
てのは本人も分かってるんだろうけど、やっぱ言っちゃう。
291NAME IS NULL:2010/02/07(日) 12:52:02 ID:???
SELECTの部分は通常のSELECT文と同じだから
UPDATEしなくても好きに加工できるよ。CASE使ってもいいし
292NAME IS NULL:2010/02/07(日) 19:04:14 ID:???
TSVからphpmyadmin経由でインポートする際に、
MySQLで言うところのNULL(\N)ではなく、文字列の"null"としてインポートしたい箇所があるのですが、
not_null制約に引っかかってインポートできません。

大文字の"NULL"や小文字の"null"もそうですが、"Null"なんかもあります。
文字列として取り込むにはどうすればいいでしょうか?
293NAME IS NULL:2010/02/07(日) 19:12:41 ID:???
`null` とする?
294NAME IS NULL:2010/02/07(日) 20:49:20 ID:???
>>293
あざーーーーーーーーーーーーーーーす!!

無事解決しました。
295ぷくぴゅん:2010/02/08(月) 00:58:28 ID:nvhZ9pdY
質問なんですがmysql5.1のwindows番でslow logのテーブル内容を
削除にするにはどうすればいいでしょうか?

普通にdeleteやdropを使おうとするとlockされてますとでてしまいます。
このロックを外すには?
296NAME IS NULL:2010/02/08(月) 07:54:59 ID:???
`null` ぽする?
297NAME IS NULL:2010/02/08(月) 12:51:12 ID:???
アプリケーションサーバーとMySQLを同時に動かしている環境では問題無いのに、
ネットワーク(TCP/IP)経由で分けるとパフォーマンスが悪化する場合どんな所に原因があると思われますか?
298289:2010/02/08(月) 14:00:34 ID:???
回答くれたみなさん、ありがとうございました。
やっぱりテーブルと処理の構造に問題がありますね、、
考え直してみます。ありがとう
299NAME IS NULL:2010/02/08(月) 16:35:10 ID:???
>>297
OSがうんこ
300NAME IS NULL:2010/02/08(月) 18:51:14 ID:???
>>283
>>282です
今日、出社してログをコピーしてきました
少し長くなりますが、以下がそのエラーです
MySQLコネクタ単体でのアクセスが出来るのは確認済みです
パフォーマンス ログ名がCPU_TEST(テストでCPU使用率のログ)で
ServerLogがODBCのシステムDSN名です

【ポップアップエラー】
CPU_TEST ログまたは警告は開始されませんでした。
現在の状態を表示するには、ログまたは警告の一覧を最新の情報に更新してください。
またはアプリケーション イベント ログでエラーを参照してください。
ログと警告によっては、多数のカウンタが含まれる場合など 開始するのにしばらく時間が必要となることがあります。


【アプリケーションログ】
・エラー
イベント ID (3042) (ソース PDH 内) に関する説明が見つかりませんでした。
リモート コンピュータからメッセージを表示するために必要なレジストリ情報または
メッセージ DLL ファイルがローカル コンピュータにない可能性があります。
この説明を取得するために /AUXSOURCE= フラグを使用することができる可能性があります。
詳細については、ヘルプとサポートを参照してください。
次の情報はイベントの一部です:
[MySQL][ODBC 5.1 Driver][mysqld-5.0.77]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 'IDENTITY PRIMARY KEY, MachineName varchar(1024) NOT NULL, ' at line 1.

・エラー
[PDH(ID:3042)]
イベント ID (3042) (ソース PDH 内) に関する説明が見つかりませんでした。
リモート コンピュータからメッセージを表示するために必要なレジストリ情報または
メッセージ DLL ファイルがローカル コンピュータにない可能性があります。
この説明を取得するために /AUXSOURCE= フラグを使用することができる可能性があります。
詳細については、ヘルプとサポートを参照してください。
次の情報はイベントの一部です:
.
・警告
[SysmonLog(ID:2004)]
サービスは、ログ CPU_TEST のログファイル: SQL:ServerLog!CPU_TEST を開けません。サービスを停止します。
ログ フォルダの存在、スペルおよびアクセス許可を確認して、 このログ ファイルに書き込んでいる
ほかのログやアプリケーションがないことを確認してください。
構成プログラムを使ってログ ファイル名を再入力しすることができます。
このログは開始されません。 返されたエラーは、: です。
詳細な情報は、http://go.microsoft.com/fwlink/events.asp の [ヘルプとサポート センター] を参照してください。
301NAME IS NULL:2010/02/09(火) 02:40:54 ID:???
DBのデータ書き込みについて初歩的な質問です。
x,y,suuchiという三つの項目があるとして、
7,8,60という値を一度書き込んだ後、
もう一度
7,8,59という値を上書きしたいのですが、
DB上は
7,8,60
7,8,59
という2つのデータが残ってしまいます。
できれば、
7,8,60というデータは消えて
7,8,59というデータだけ残るようにしたいのですが、
手動で書き込みする際に古いデータを消さなくてはならないのでしょうか?
うまく説明できませんが、答えてくださる人いましたら教えてください。
302NAME IS NULL:2010/02/09(火) 08:07:48 ID:???
update where
303NAME IS NULL:2010/02/09(火) 10:33:21 ID:???
>>300
クエリーが文法間違いって言ってるね
304NAME IS NULL:2010/02/09(火) 10:37:04 ID:???
spiderという面白いストレージエンジンがあるようですが、試した方いらっしゃいませんか?
感想を聞きたいのですが
ttp://labs.unoh.net/2009/07/mysqlspider.html

UPDATEの負荷分散には効果的だとは思うのですが、
SELECTももし1台のspiderサーバーを通してやるとなると、spiederサーバーがボトルネックになると思うんです。
レプリケーションと共存できるのか知りたくて。
305NAME IS NULL:2010/02/09(火) 19:45:39 ID:???
>>303
Syntax Errorでそうかな、とは思ってたんですが、Windows標準のパフォーマンスカウンタには
クエリを書く項目が無くて、設定もできない状態でして……

やりたい事はリモートでサーバーのCPU使用率、メモリ使用率を取得して
それをMySQLに記録していく事なんですが、無理なんでしょうか…
ODBC経由のSQL書き込みの部分で詰まってしまってます
せめて出来るか出来ないか、だけでも解れば凄く助かります
306NAME IS NULL:2010/02/09(火) 20:51:18 ID:???
>>305
なにか、壮大に出だしで間違ってる気がする……。
307301:2010/02/09(火) 21:35:00 ID:???
>>302
ありがと!!
308NAME IS NULL:2010/02/09(火) 22:07:38 ID:???
>>305

出来るか出来ないかで言うと、出来る。

お金をくれたらやってあげる。タダではやらない。

309NAME IS NULL:2010/02/09(火) 23:28:56 ID:???
x, y カラムを指定して、suuchiカラムに値をUPDATEしたいのですが、

通常のデータの追加であれば、

INSERT INTO `sample` ( `x` , `y` , `suuchi` )
VALUES (
'1', '1', '54'
);

になると思いますが

UPDATEとWHEREを使うとどうなるのでしょうか?
310NAME IS NULL:2010/02/09(火) 23:34:15 ID:???
309です。
とりあえずMYSQLの本では
UPDATE テーブル名 SET カラム名=設定値 WHERE 条件;
となっているのですが・・・。
なんかそのままでいいのかな?
311NAME IS NULL:2010/02/09(火) 23:46:57 ID:???
>>310
まずはやってみるが吉
312NAME IS NULL:2010/02/09(火) 23:55:44 ID:???
UPDATE `sample` (
`x` , `y` , `suuchi` )
set `suuchi`= '$strs[2]' WHERE (`x`='$strs[0]'&& `y`='$strs[1]' )

自分でコードを書いてみましたがうまくいかないみたいです・・・
神様助けて・・・
313NAME IS NULL:2010/02/10(水) 00:24:13 ID:???
312です
WHEREの後の条件文の書き方がだめなのかとおもうんですがどうでしょうか?
314NAME IS NULL:2010/02/10(水) 01:06:08 ID:???
UPDATE `sample` (
`x` , `y` , `suuchi` )
SET `suuchi`= '$strs[2]' WHERE `x`='$strs[0]' AND `y`='$strs[1]'

setが小文字だったので大文字にしたのと、()付きの&&じゃなくてANDに書き換えてみましたが、
これでもダメみたいです。
315NAME IS NULL:2010/02/10(水) 04:13:41 ID:???
316NAME IS NULL:2010/02/10(水) 07:59:26 ID:???
UPDATE `sample`
SET `suuchi`= '$strs[2]' WHERE `x`='$strs[0]' AND `y`='$strs[1]'

じゃないの?
317NAME IS NULL:2010/02/10(水) 10:30:55 ID:???
Excel + MySQL 5.1.42

mysql-connector-odbc-5.1.6-win32.msiをインストールしたのですが

-2147467259 [MySQL][ODBC 5.1 Driver]Access denied for user 'ODBC@localhost'
(using password;'YES')

のメッセージが出て接続が出来ません。
3.51だったら正常に接続できるのですが、何か設定とかする必要ありました?

管理ツールのデータソースでユーザーDSN及びシステムDNSNに登録もしてみました
が(そこでの接続テストはOK)。

DB_CnString = "DRIVER={MySQL ODBC 5.1 DRIVER};" _
& " SERVER = localhost;" _
& " DATABASE = *****;" _
& " UID = ******;" _
& " password = ******;" _
& " STMT=SET CHARACTER SET cp932;" _
& " OPTION =3 "

MySQL ODBC 3.51 DRIVER の3.51の部分を5.1に変えただけなんですが。
318NAME IS NULL:2010/02/10(水) 13:23:31 ID:LGfolNfx
質問します。
今、会員制サイト(一般ユーザの見れる情報サイトで、会員がログイン後情報を編集できるみたな)を
作っています。そこで会員管理のテーブルをどうしたら良いのかアドバイスください。
現在のところ、会員のプロフィールテーブルに
id,userName,userType,age,hobby,...,loginPass,loginName,role という感じでプロフィールなどの
公開情報と一緒にログインパスワードやログイン名をまとめています。
これでいいと思って作ってきたんですが、問題発生する可能性あるでしょうか?
プログラムがだめだったらどんな構造でも問題になるでしょうが、テーブル構造の
セオリーとかわからないのでご意見お願いします。
環境はMysql5, php5使ってます。
319NAME IS NULL:2010/02/10(水) 14:06:35 ID:???
セオリーというならリレーションの正規化について勉強なさい
その後で、バッドノウハウとしてパフォーマンスのために非正規化した方がいいところor正規化したままの方がいいところを学ぶ、と

あと老婆心ながら、loginPassは生のまま入れないこと
管理者にすら分からないようにして、ユーザが紛失した場合は再発行させるのがセオリー
320NAME IS NULL:2010/02/10(水) 14:54:33 ID:???
質問させて下さい。

以下のようなテーブルがあります。
[ID] | [Value]
A   あああ
A   いいい
A   ううう
B   ええええ
B   おおおおお

これを、次のような形でSELECTすることは可能でしょうか。
[ID] | [ValueAll]
A   あああ,いいい,ううう
B   ええええ,おおおおお
321NAME IS NULL:2010/02/10(水) 17:02:05 ID:???
315,316ありがと。うまく更新できた!!
322NAME IS NULL:2010/02/10(水) 17:28:36 ID:???
MySQLを勉強しだしたばかりの基本的な質問ですいませんが

日付が入ったDatatime型のカラムから一番古い日付のデータを取り出す場合

SELECT データ FROM テーブル WHERE カラム???

最後の方がわかりません。
たぶん条件式ではなく関数を使う必要があると思うのですが。

ご教授お願いいたします。
323NAME IS NULL:2010/02/10(水) 17:46:22 ID:???

SELECT データ FROM テーブル WHERE min(カラム)
324NAME IS NULL:2010/02/10(水) 18:06:25 ID:???
データベースにデータを追加するときは、1項目筒しかできないのでしょうか?
一気に数十個のデータをテキストファイルなどから読み込んでデータを追加することはできないものでしょうか?
325NAME IS NULL:2010/02/10(水) 18:20:12 ID:???
>>324
SQLで表現できるのは1レコード分のINSERTだけ。

>一気に数十個のデータをテキストファイルなどから読み込んでデータを追加する

それはプログラミング言語側の仕事。
326NAME IS NULL:2010/02/10(水) 18:30:07 ID:???
325ありがと。
プログラミングで1レコードのINSERTを繰り返し実行するほうほうでがんばってみる。
327NAME IS NULL:2010/02/10(水) 18:40:13 ID:???
>>325

BULK INSERT 出来なかったっけ?
328NAME IS NULL:2010/02/10(水) 18:49:54 ID:???
>>325
>SQLで表現できるのは1レコード分のINSERTだけ。

そうでもないよ。
マニュアルのINSERTのとこ、もっぺん読んだ方が良いよ。


>>324
>一気に数十個のデータをテキストファイルなどから読み込んでデータを追加することはできないものでしょうか?

ttp://dev.mysql.com/doc/refman/4.1/ja/load-data.html
329NAME IS NULL:2010/02/11(木) 00:49:46 ID:???
>>327,328ありがと
技術評論社のポケットリファレンスで LOAD DATA INFILEのページp295
を読むとCSV形式のファイルが読み込めるみたい!!。
330329:2010/02/11(木) 03:32:29 ID:???
ポケットリファレンスに紹介されてたODBCをインストールしたらエクセルでデータベースのデータが見れるようになった
のでびっくり。MYSQLってエクセルと相性がいいみたい。
これはMYSQL初心者にとっては奇跡のようにうれしい!!
331NAME IS NULL:2010/02/11(木) 03:45:30 ID:???
ODBC使うとエクセルだけで見れるの?
アクセスいるのかと思ってた。あさって試そう。
332329:2010/02/11(木) 04:21:34 ID:???
次のようなファイルを作ってみたのですがうまくCSV読み込めなかったです。
アドレスの最後に?をつけるとfaultというメッセージが出るのですが、
?をつけなければsuccesともfaultとも表示されません。
これどこが悪いのか分かる人いたらコメントください。

#!/usr/bin/perl

use DBI;

print "Content-type: text/plain; charset=utf-8\n\n";

$dbh = DBI->connect("データベース名", "ユーザ名", "パスワード");
$sth = $dbh->prepare("LOAD DATA INFILE `CSVファイル名.csv` INTO TABLE `shogiban2`
FIELDS TERMINATED BY `,`
");

#SQL実行
$rv = $sth->execute;
$sth->finish;
$dbh->disconnect;

if ($rv)
{
print "success";
} else {
print "fault";
333NAME IS NULL:2010/02/11(木) 05:45:07 ID:???
ODBCなんてメジャーなDBならどれでも対応してるけどな。
334NAME IS NULL:2010/02/11(木) 10:13:20 ID:???
LOAD DATA INFILEは…

まあ俺が勝手に思ってるだけかも知れんけど、あれはDBの引越しとか、何かアクシデントで
バックアップから戻すとかの単発(に近い)作業で、超大量のレコードをインポートしたいとかに
使うもんじゃないかなあ。それこそmysqlコマンドライン上で手打ちで使うような。

数十レコード程度なら、普通にINSERT使っても大して時間食わないでしょ >>332

とりあえず、LOAD DATA LOCAL INFILE〜
とするとどうなる?
335NAME IS NULL:2010/02/11(木) 10:52:41 ID:YFVlJadY
テーブルにデータを10件確実に登録する必要がありループでinsert処理しようとするとき
プリペアドステートメントを使うほうがいいと本に書いてありましたが、
このときトランザクション処理の必要があるんでしょうか?
プリペアドステートメントがループ処理に向いてる方法らしいので、
する必要なかったりするのかな?という疑問です。
336NAME IS NULL:2010/02/11(木) 11:35:44 ID:???
確実に登録するならトランザクション必要
プリペアドステートメントは性能に影響するけど確実性には無関係
337329:2010/02/11(木) 11:47:53 ID:???
>>334
LOAD DATA LOCAL INFILEとするとアドレスに?をつけても付けなくてもfaultとのメッセージが出る。
これはCGIのプログラムは間違ってないけどうまくCSVが読み込めないってことなんだろうか?
338NAME IS NULL:2010/02/11(木) 12:03:02 ID:???
>>320
select id,group_concat(value) from tbl group by (id);
339NAME IS NULL:2010/02/11(木) 12:07:33 ID:???
>>336
ありがとうございました

>>319
お礼遅れました、ありがとうございました
340NAME IS NULL:2010/02/11(木) 12:11:29 ID:???
perlは知らないけど、ざっと見てsuccess/faultが決まるのはMySQLに実行を依頼した結果だよね?
じゃあ、
A.perlでMySQLを使うやり方として間違いは無いか
B.MySQLに渡したSQLにエラーは無いか
を確かめるってことになる。

まずはBに関して、そのLOAD DATA....を手打ち実行させてみては?
341329:2010/02/11(木) 14:24:44 ID:???
>>340
とりあえず文法間違いみたい。
でもどこが間違ってるかわからない・・・。
LOCALをいれても同じメッセージが出る。



エラー
実行した SQL:

LOAD DATA INFILE `shogishokika.csv` INTO TABLE `shogiban2` FIELDS TERMINATED BY `,`

MySQLのメッセージ:

#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 'shogishokika.csv` INTO TABLE `shogiban2` FIELDS TERMINATED BY `,`' at line 1
342NAME IS NULL:2010/02/11(木) 14:30:19 ID:???
ファイル名は文字列リテラルだから、バッククォートじゃなくてシングルクォート
`shogishokika.csv`
'shogishokika.csv'
343329:2010/02/11(木) 14:56:33 ID:???
>342
ありがととりあえず文法間違いは直ったみたいだけど、
まだエラーメッセージが出る。
こんどはアクセス権限の問題みたいなので、レンタルサーバーの会社に聞いてみる

MySQLのメッセージ:

#1045 - Access denied for user●●
344NAME IS NULL:2010/02/11(木) 21:36:14 ID:???
そこで今度はLOCALつけてみようぜ
345329:2010/02/12(金) 03:16:51 ID:???
>>344
LOCALつけると違うメッセージが出るけど、つかってるMYSQLのバージョンでは、
このコマンドは許可されてないということらしい。
自作サーバーじゃなくてレンタルサーバーだからアクセス権限が管理者権限じゃないのが原因かな?
とりあえず、レンタルサーバ会社に質問をメールして返事待ってるとこ。

MYSQLって構造が分かるともっと楽しくなる予感がする。
でもそこまでは僕みたいな素人ではなかなか無理かな・・・。
(できる範囲で頑張る!!)

MySQLのメッセージ:

#1148 - The used command is not allowed with this MySQL version

346NAME IS NULL:2010/02/12(金) 13:37:47 ID:???
win版mysql5.5のバイナリってなくなったの?探しても見つからないんだが
347NAME IS NULL:2010/02/12(金) 15:12:15 ID:???
ありますん。
348NAME IS NULL:2010/02/12(金) 17:25:34 ID:wrXxMc4Q
すいません、質問させてください。
ある条件を入れるとexplainでfilesortが出現するのですが
これを回避するにはどのような方法が考えられますか?
349NAME IS NULL:2010/02/12(金) 23:06:14 ID:a5jSNvr8
unixのmysqlについて。
mysql-5.1.43-solaris10-i386.tar.gzをダウンロードし、解凍したんですが、./configureファイルが見つかりません。
ダウンロードするファイル間違っているでしょうか?
350NAME IS NULL:2010/02/12(金) 23:35:43 ID:a5jSNvr8
349です。
すいません。解決しました。ダウンロードファイル間違えていました
351NAME IS NULL:2010/02/13(土) 09:27:56 ID:???
>>348
その聞き方じゃ「ある条件を外す」としか答えられないでしょう
352346:2010/02/13(土) 14:20:48 ID:???
>>347
ありがとうございます
MySQL6みたいに廃止されたのかと思ってました
探しても見当たらないのですがもしよろしければリンク先を教えていただけませんか?
353NAME IS NULL:2010/02/13(土) 15:49:10 ID:???
jaistあさってみ
354NAME IS NULL:2010/02/13(土) 17:34:26 ID:Oj+bJoB0
2つのキーを同時にLIKE検索したいのですが、どのように記述すればよいでしょうか?

これだとだめでした。
where key1, key2 like '%str%'
355NAME IS NULL:2010/02/13(土) 18:13:09 ID:???
where key1 like '%str%' and key2 like '%str%'
356NAME IS NULL:2010/02/13(土) 18:50:11 ID:Oj+bJoB0
>>355
やっぱりそれしかないですか、、
どちらかに含まれていればよいのでandをorに変えてそれでいきます。
357NAME IS NULL:2010/02/13(土) 18:59:28 ID:???
誰か聞いてくれよ
今開発している案件のDBが、MySQL-inodbからMySQL Cluster-ndbclusterにストレージエンジンが変更になったんだよ。
俺の構想では、MySQL-inodbをレプリケーションしてスレーブ作って、負荷分散させようと考えてたんだよ。

そしたら1次請の会社のSEが、MySQL Clusterを使うって方針に決まったから、MySQL Clusterについて調べろっていうんだよ。
自社でテスト環境作ってたら、データノードのプロセスが突然落ちる>そしてデータノードのプロセスが起動しなくなってDBをcreateしなおして、レストアしないといけないのよ。
後は、configのパラメータの中身が意味不明。開発者向けのスイッチかと思われるほどの無残さ。
joinが遅いとか、configを帰ると3時間ものローリングリスタート。時々落ちるおまけつき。
deleteで消した行の領域は、リスタートしないと開放されないとか…。

俺の感想だと糞DB。バグだらけ
これほんとに運用されているシステムで使われているのか?

誰か使ってるやついたらなんか教えてくれ?
358NAME IS NULL:2010/02/13(土) 19:18:31 ID:???
素直にOracleを使わないからだろう。一次請けになれないことを恨むんだな。
359NAME IS NULL:2010/02/13(土) 20:17:06 ID:???
>>357
勘どころが掴めれば、まあOracle程度には安定するよ。
素のMySQLレベルの安定性は望めないけど、その程度で妥協するしかない。
360354:2010/02/13(土) 21:00:30 ID:???
これでいけました
スペース入れてるのは、誤検索を防ぐためです。

where concat(key1, ' ', key2) like '%str%'
361NAME IS NULL:2010/02/13(土) 21:19:48 ID:sfn0mbmG
すいません、ちょっと疑問に思った事なのですが

mysqlの権限やセキュリティに関する部分で
例えばmysqlっていうユーザーにあらゆる権限を与えていた場合、他のユーザーが
mysqlユーザーに成りすまして

mysql -u mysql -p

で辞書アタックみたいな事をすると、防衛手段としてはパスワードを強固にすると
いう対策だけで万全ではないと感じました。

ですので、例えばwebサーバー(apache)からphpなんかが実行された場合のユーザーは
apacheの実行ユーザーに準ずる訳なので、apacheユーザーがmysqlユーザーになりすま
し出来ないって設定が出来れば、多少強固になると感じたのですが
こういった設定は可能でしょうか
362NAME IS NULL:2010/02/13(土) 21:36:37 ID:???
>>358
やっぱりそうだよね。
最初はOracleだったんだけど、予算的な問題で、MySQLレプリケーション
それで、どこかのコンサルの入れ知恵でMySQLCluster。
これほんとにバグだらけで運用どころか開発もできる気がしないわ。SUNとかにコンサル頼むと、製品版とコンサル料金で2000万ぐらいいくらしい。
素直にOracleの方がやすいんじゃないかと。

>>359
今の所まったく安定しないのよ。ほんとにできるの?
データノード追加する度にDBクラッシュしたり、ディスクテーブルにSELECTすると、めちゃくちゃ遅いし。
ノードが落ちてもトランザクションの保障すると書いてあるのに、接続切れるし。
公式のマニュアルは間違いが多いし、開発者のオナニーにつき合わされている感じがしすぎ。
今のところ、妥協レベルのデータベースであることは間違いなさそうだわ。枯れてきていい感じに使えるにはあと3年ぐらいの予感が。
これを使わされるユーザさん可愛そうだわ。
途中でデータ消えたらユーザ激怒で修羅場が用意に創造できる・・・。
363359:2010/02/13(土) 22:00:24 ID:???
>>362
毎日、毎時、毎分が新発見だけどね。
トラブルが発生しない間はノートラブル ってレベルになら
割と早い段階でたどりつけるよ。
364NAME IS NULL:2010/02/13(土) 22:31:56 ID:???
>>363
確かに、毎日、毎時、毎分が驚愕の事実の新発見なのは間違いないよ。
安定しているとはうらやましい。俺はこれが運用に耐えられないとPMを説得中なんだよ。
スケールアウトしない前提でONメモリデータベースのみ使う場合は安定してる感じなんだけど、スケールアウトのとか障害テストをするとホントだめだめ。

俺が今の理解している範囲では、MySQLCluster強烈なクセがあり、以下のルールを守らないと使い物にならない感じが。

・selectする際は必ず、pkeyを指定すること。しない古代のDB並に遅い。joinはもってのほか
・indexをふってもwhere句の指定がrangeだとまったく効果なしというか遅い。
・メモリテーブルに展開するデータは、基本selectとupdateを繰り返すデータ向き。
 insert/deleteを繰り返す処理には確実に向いていない。
・ディスクテーブルはおまけ程度の機能。普通のinodb以下の性能になる。
・SQLノードを増やせば早くなる。
・データノード数を増やしても遅くなるか、今の処理性能を維持するぐらい。消して早くはならない。
・スケールアウトはできるけど、それによるデータベース破損のリスクがある(バグってる)。
・基本的にコンサルやサポートを受けて成立するものであって、素人がMySQLの延長線上にあるぐらいで使おうとすると火傷し、結局サポートに大金を支払うという事態になる。
365NAME IS NULL:2010/02/14(日) 01:06:14 ID:???
KVSの延長として使うものなんだろうなあ

Oracleに買収されて、TimestenとCoherenceという優秀な製品がある中で
MySQL Clusterの先行きは大変気になるところ
っていう線でPMと話してみたら?
366NAME IS NULL:2010/02/14(日) 08:13:24 ID:???
すいません、教えてください

SELECT id,カナ,名称 FROM tbl WHERE 名称 LIKE あ% ORDER BY カナ
上記のような場合
カナにインデックスを定義するメリットありますか?
(名称にはインデックス無しの前提で)
367NAME IS NULL:2010/02/14(日) 11:16:37 ID:???
BIGINT 型のID という名のカラムがプライマリキーで、オートインクリメントのデータ構造を持つテーブルです、
レコードを削除し、追加した場合、ID は連続しないことは周知の通りなのですが
なんとか、1234・・・ という具合に連続的にID 追加する方法はないのでしょうか?
368NAME IS NULL:2010/02/14(日) 11:43:07 ID:???
削除したらすべての番号ふりなおすの?
毎回何番目か数えたら?
369NAME IS NULL:2010/02/14(日) 11:53:02 ID:???
mysql5.0.77 on centos5.4(ext3)の環境で不思議な現象が起こっています

とあるユーザーに権限を与えましょう、と以下のコマンドを実行しました

mysql> grant select,insert,update,delete,index,alter,create,drop on `testdb`.* to `test\_user`@localhost identified by 'パスワード';

phpmyadminにてtest_userでログインし「新規データベースを作成する」の項目が「特権無し」となって
こちらはOKなのですが、次にtestdbをtest_dbとすると

mysql> grant select,insert,update,delete,index,alter,create,drop on `test\_db`.* to `test\_user`@localhost identified by 'パスワード';

データベース名にアンダーバーが付いたデータベース名でphpmyadminの上述の「新規データベースを作成する」
の項目をみると「特権無し」である筈が「test?db」となっていて作成が受け付けられている状態でした。

ためしに「作成」をクリックすると普通に作成できてしまいました。
ちなみにtest?db2やtest_db2等は作成できず、アンダーバーをクエスチョンマークに置き換えた
データベース名のみ作成可能なようです。

シェルからも同様で「create database test?db」とするとこちらも作成できてしまう状況
なのです。

なぜgrantでtest_dbを操作する権限しか与えていないtest_userがtest?dbというデータベース
を作成できてしまうのでしょうか?

識者の方々のご意見を頂戴できれば幸いです
370NAME IS NULL:2010/02/14(日) 12:30:39 ID:???
%と_ はワイルドカード
371NAME IS NULL:2010/02/14(日) 12:37:05 ID:???
>>370

うっはw

ありがとうございました
372NAME IS NULL:2010/02/14(日) 12:48:43 ID:???
MySQLは||使えないのね、、
373NAME IS NULL:2010/02/14(日) 12:57:40 ID:???
>>372
sql_modeにPIPES_AS_CONCATを設定すれば使える。
http://dev.mysql.com/doc/refman/5.1/ja/server-sql-mode.html
374NAME IS NULL:2010/02/14(日) 13:22:11 ID:???
>>370
そのワイルドカードはlike句でしか解釈されないだろ。
そういう文脈じゃないのにのにわざわざバックスラッシュ付けている
からじゃないのかなぁ?試してないけど。
375NAME IS NULL:2010/02/14(日) 14:43:33 ID:???
ttp://dev.mysql.com/doc/refman/4.1/ja/grant.html
>注意: GRANT コマンドでデータベース名を指定する際、‘_’ および ‘%’ ワイルドカードを使用できます。
>データベース名の一部として、たとえば ‘_’ 文字を使用したい場合、GRANT コマンドでは
>GRANT ... ON `foo\_bar`.* TO ... などのように、'\_' として指定するようしてください。
>そうしないと、ワイルドカードパターンに一致する別のデータベースにもユーザがアクセスできるようになります。

らしいよ。
376NAME IS NULL:2010/02/14(日) 17:10:49 ID:???
369です

>>375

あれ、とすると今回キチンと `foo\_bar` て指定ししたのに結果的にワイルドカードとして処理された
って事になりますよね。

なんでだろ?
どなたか同じ現象になった方いらっしゃいませんか?
377NAME IS NULL:2010/02/14(日) 19:12:56 ID:???
>> 365
さんくす
378NAME IS NULL:2010/02/14(日) 19:14:21 ID:???
今、cakephpを使って開発してるんですけど、DBの負荷が上がってきたら
何らかの対策をしないといけないと思っています。

たとえばカウンターのスクリプトを他のユーザーに貸し出すサービスがあるとします。
その場合は
・ユーザーID 1000 の人は DB 1 を
・ユーザーID 1001 から 2000の人は DB2 を 使う
というように分ける という考え方で良いのでしょうか。

ご指導下さい。先輩方!
379NAME IS NULL:2010/02/14(日) 19:46:06 ID:???
水平分割だっけ。
380NAME IS NULL:2010/02/14(日) 20:02:59 ID:???
質問中の365ですが、スケールアウトの技術について以下のサイトが面白かったです

http://www.shudo.net/article/UNIX-magazine-200904-scaleout/
381NAME IS NULL:2010/02/15(月) 09:19:09 ID:???
>>376
phpmyadmin経由だからかもよ?
\\にしてみたら?
コマンドラインクライアントだったら?
382NAME IS NULL:2010/02/15(月) 10:01:52 ID:???
Cluster云々でふと思い出したんだけど
kumofsってどーなの?
KVSだから通常のRDBとしては使えない?
383NAME IS NULL:2010/02/15(月) 15:07:49 ID:???
MySQLをスケールアウトしようとすると、どういう実装方法があるのかな?
レプリケーションとmysql-proxyを使う方法が一般的?
384NAME IS NULL:2010/02/15(月) 15:33:34 ID:???
>>381

>>369
mysql>
ってプロンプトの様子からして、(以下略
385NAME IS NULL:2010/02/16(火) 10:05:10 ID:+TQoVkUi
MySQL Query Browserでlocalhostを指定すると接続するのですが
IPを指定すると接続ができません。
何が原因なのでしょうか??
386NAME IS NULL:2010/02/16(火) 10:19:25 ID:???
データベース名:mysqlのuserテーブル覗いてみなはれ。
localhostと127.0.0.1は別モノとして扱われてる。
387NAME IS NULL:2010/02/16(火) 11:02:57 ID:???
>>386
ありがとうございます・・・
えと、別PCでは何も触ることなく他のPCからQuery Browser等で覗く事ができたのですが
違うPCにまたMySQLにインスコして、違うPCから接続するとエラーになってしまうのですが・・・
MySQL側で何か設定があるのでしょうか?
388NAME IS NULL:2010/02/16(火) 11:06:44 ID:???
ListenPortの指定は?
389NAME IS NULL:2010/02/16(火) 11:08:40 ID:???
Portじゃねーや、Address
390NAME IS NULL:2010/02/16(火) 11:21:30 ID:???
>>388-389
それはMySQL Administratorで行うのでしょうか?
ちなみに正常に他PCから接続できてる方は一切設定せずに接続できてます
391NAME IS NULL:2010/02/16(火) 11:29:55 ID:???
あ、すみません。大事な事いうのわすれてました。
OSはXP 64のVersionは2003のサービスパック2です。
392NAME IS NULL:2010/02/16(火) 11:59:28 ID:???
Winかい、ファイヤーウォールとかはどうなってるの?
ちなみに、ListenAddressの指定は、iniで[mysqld] bind-address
書いてあったら消す方向で
393NAME IS NULL:2010/02/16(火) 12:03:27 ID:???
394NAME IS NULL:2010/02/16(火) 12:23:48 ID:???
>>392
Winなんですよ><
iniファイルみてみます。ありがとうございます

>>393
ありがとうございます。
さっそく拝見してみます!
395NAME IS NULL:2010/02/16(火) 13:01:59 ID:???
>>392-393
で、できました・・・
iniに bind-addressがなかったので、とりあえずgrantで権限設定をしたらできました。
ちなみに、コマンドもよくわからず、書いてるままにやってみたんですが
ipを1つ登録だとうまくいったのですが、既存のユーザー名でip範囲指定をしたくて
grant all privileges on *.* to root@'192.168.1.1/192.168.1.99' identidied by '1234' with grant option;
とすると、登録はされたのですが、192.168.1.19のPCから接続しようとするとエラーになります。
どこがまずかったのでしょうか?
396NAME IS NULL:2010/02/16(火) 13:18:06 ID:???
ひょっとしてこれでいけるのかなああ?
grant all privileges on *.* to root@'%' identidied by '1234' with grant option;

他のPCの権限のあれみたら%しかかいてないのあったからこれっぽいですね
397NAME IS NULL:2010/02/16(火) 13:40:25 ID:???
結局、>>386でいいんじゃねーか
398NAME IS NULL:2010/02/17(水) 00:06:14 ID:X7/ffKZx
すんません
NULLの場合 0 に置換というのは ifnull(HOGE,'0')でいいようですが、
NULLじゃない場合(値が入っている場合) 1 にしたいという場合どうすればいいですかね?
399NAME IS NULL:2010/02/17(水) 00:56:57 ID:76ohbKc+
すみません、質問をさせてください
phpMyAdminを用いてカンマ区切りのCSVをインポートしようとしています
テーブルにはF1,F2,idの3つのフィールドがあり、idはauto_incrementを設定しています
一方、CSVにはF1とF2に該当するデータしかありません(カンマが1つしかない)
そのため、「CSV 入力のフィールド数が不正です 」というエラーがインポート時に発生してしまいます
CSVは編集せずに、テーブル、フィールドの設定によってインポート(および自動でidに番号を登録)するにはどのようにすればよいのでしょうか
400NAME IS NULL:2010/02/17(水) 07:34:56 ID:???
>>398
case
when column is null then 0
else 1
end as xxxxx

だっけ?(自信はない!
401NAME IS NULL:2010/02/17(水) 11:44:47 ID:YwZz7iYR
AUTO_INCREMENTでない主キーの最大値を取得するのですが、
デフォルトで999という値がある仕様なので
これを除いた最大値を取得するよい方法ありますか?
402NAME IS NULL:2010/02/17(水) 13:05:47 ID:???
>>398
HOGE IS NULL
あるいは、if(HOGE IS NULL,a,b)
403NAME IS NULL:2010/02/17(水) 13:09:03 ID:???
>>401
max(if(n!=999,n,NULL))
404NAME IS NULL:2010/02/17(水) 13:41:08 ID:???
>>403
できました、ありがとうございました。
405NAME IS NULL:2010/02/17(水) 16:09:41 ID:???
CGIとかPHPでMYSQLに接続できるのは分かったのですが、
JAVAってMYSQLに接続するのに向いてますか?
もしJAVAでMYSQLの操作ができるなら、何行ぐらいのソースが必要ですか?
406NAME IS NULL:2010/02/17(水) 16:12:44 ID:???
407NAME IS NULL:2010/02/17(水) 16:23:27 ID:???
>>406
あるがとうJDBCってのがキーワードだね。
408NAME IS NULL:2010/02/17(水) 19:39:34 ID:???
すみません。質問します。

あるプログラムがODBCを通してSQLに書き込む際、クエリがMSSQL用でうまくいかない事が解りました
しかしプログラムは変えられない為、どうにか対処する方法を探してみたのですが全く見つからず…
そこで、MySQLでは実行できないクエリが来たら「変換する」か「無視させる」ような事はできないのでしょうか?
よろしくお願いいたします。
409NAME IS NULL:2010/02/17(水) 21:37:14 ID:???
・どうにかしてプログラムを変える
・MySQL本体を改造する

好きな方を選べばいいよ
410NAME IS NULL:2010/02/18(木) 02:09:49 ID:???
select between '2010-01-05' and '2010-01-10'
みたいな感じで
2010-01-05
2010-01-06
2010-01-07
2010-01-08
2010-01-09
2010-01-10
みたいに取るようなSQLは無理でしょうか?

411NAME IS NULL:2010/02/18(木) 02:53:45 ID:???
>>410
?? それで取れますが・・・。
412NAME IS NULL:2010/02/18(木) 03:42:58 ID:???
>>411
おっと説明不足でした
レコードがない状態で連番で日付とりたいわけです
413NAME IS NULL:2010/02/18(木) 10:08:32 ID:???
>>399
カラム名にカンマ区切りで名前を列挙するんじゃなかったかしら
414NAME IS NULL:2010/02/18(木) 10:45:29 ID:???
ユーザー変数定義してやればいい。1文でやるならUNIONしてしまう
415NAME IS NULL:2010/02/21(日) 03:02:51 ID:???
php + MySQLで作っていたポータルサイトで携帯電話の動画を扱うことになりました。
各動画は携帯の動画なのでサイズ的には小さいです。
MySQLに動画を突っ込むことは可能ですか?
あるいはDB以外の場所に保存しておくべきなのでしょうか?
動画を扱うサイトを構築した経験のある方がいましたらアドバイスを頂けないでしょうか。
416NAME IS NULL:2010/02/21(日) 03:51:23 ID:???
>>415
つ blob
417NAME IS NULL:2010/02/21(日) 13:40:09 ID:???
文字列の後ろから文字検索する方法は
ないのかな?

今は、LOCATE(ch,REVERSE(str))とか
してるんだけど、なんか残念。
418NAME IS NULL:2010/02/23(火) 19:08:48 ID:???
データ型で tinyintやintを指定できますが、tinyintとintで同じ1から100までの数字を大量に入れたとき、処理速度はtinyintの方が速くなるのですか?
419NAME IS NULL:2010/02/24(水) 01:28:52 ID:Efiuo6Iv
質問なんですが、1回のSql文で2つのテーブルへInsertする事は可能なんでしょうか?

1つ目のInsert文のauto_incrementの主キーのデータを2つ目のテーブルへInsertしたいんですが。
420NAME IS NULL:2010/02/24(水) 01:30:12 ID:???
微妙にすれ違いでした。
質問スレへ行って来ます。
421NAME IS NULL:2010/02/24(水) 19:24:32 ID:rlfwmQ2Y
サポート欲しい
422NAME IS NULL:2010/02/25(木) 16:29:03 ID:???
mysql 5.1.42 WinXP

テーブルを出力しようと思い、

select *
into outfile
'c:\testdata.csv'
fields terminated by ','
lines terminated by '\r\n'
from ****;

と入力すると

1 - Can't create/write to file 'c: estdata.csv' (Errcode: 22)
とエラーになります。

多分 c:\tの \t をタブコードとかなんかと勘違いしているんじゃないかと思うのですけど、
ファイル名を変える以外の解決策ってありますか?

(ファイル名を変えると出力はされるんですが)
423NAME IS NULL:2010/02/25(木) 16:45:30 ID:???
'c:\\testdata.csv'
じゃだめか
424NAME IS NULL:2010/02/25(木) 17:03:16 ID:???
>>423
出来ました!感謝!です
425NAME IS NULL:2010/02/25(木) 18:33:45 ID:6g+MBBTt
id , namae , birthday という同じカラム構造を持つテーブルAとテーブルBがあるとします。
それで、テーブルAと同じデータをテーブルBにも持たせたいのですが、どうしたらいいでしょうか?
自分の考えではselect * from tAして、結果をテーブルBにinsertかなと思ったのですが、
いかにも原始的というか、もっと良い方法ないのかなと悩んでいます。
よかったら教えてください。
PHP5で実行できるやり方でお願いします。

また、上とは別ですが
オートインクリメントのidを通常1,2,3…と増えていくところを
1001からスタートさせるにはどうしたらいいですか?
1001, 1002, 1003という形にしたいのですが。。
すみませんがアドバイスお願いします。

mysql5を使っています
426NAME IS NULL:2010/02/25(木) 19:22:00 ID:???
auto_incrementのカラムに入る最初の値をテーブル作成時に指定できるけど、それはMyISAMのみ

engine=MiISAM,auto_increment=100; みたいな形で
427NAME IS NULL:2010/02/26(金) 12:06:19 ID:???
>>425
>1001からスタートさせるにはどうしたらいいですか?
1000までつくってから全部けしたら。
428NAME IS NULL:2010/02/26(金) 12:53:25 ID:???
>>425
トリガ使ってみたかったのでちょっと試してみた。
mysql は 5.1.42
root[2ch]> create table `tA` (
-> `id` int(11) not null auto_increment,
-> `name` varchar(32) not null default 'nanashi',
-> `birthday` datetime not null,
-> primary key (`id`)
-> ) engine=InnoDB default charset=utf8;
root[2ch]> create table `tB` like `tA`;
root[2ch]> alter table tB auto_increment=1001;
root[2ch]> create trigger ins_tB1 after insert on tA
-> for each row
-> insert into tB (`name`, `birthday`) values (new.name, new.birthday)

これで、tA にinsert したら idが+1000されて tB にも入った。

>>426
v4.1系 innodb 利用時の auto_increment の制限事項(create tables時)に関して記述有り
http://dev.mysql.com/doc/refman/4.1/ja/innodb-restrictions.html
v5.1系 innodb 利用時の auto_increment の制限事項(create tables時)に関して記述無し
http://dev.mysql.com/doc/refman/5.1/ja/innodb-restrictions.html
だったので、試したら普通に使えた。
429NAME IS NULL:2010/02/26(金) 16:18:32 ID:8QtDem/g
mysql5で変なエラー?が起きているんですが原因がわかりません。
相談させてください。
phpで
$stt= $this->_dbConn->query("INSERT INTO `{$tableCopy}`(uId,loginId,name1)
    VALUES('20000','{$chkRs['loginId']}','{$chkRs['name1']}')");
としてuIdを指定して実行したところ、エラーの出力はされないものの
select * from $tableの出力結果に該当データがみつかりません。

が、ターミナルから直接
insert into $table (uId,loginId,name1) values(0,'aaa','bbb') を実行したらそのデータは登録成功して、
しかも select * from $table で
20001, aaa, bbb という行が出てきました。(uIdはオートインクリメントの主キーです)
どういうことでしょうか?さっきの登録されなかった20000が影響してるんでしょうか?
20000のデータ登録の直前のデータは15000だったので、本来なら(20000が登録失敗してるなら)
15001が出力されるはずだと思うんですが…

なぜ20000のデータはselect * で出力されないんでしょうか?
where uId = 20000つきのselectにも反応ありません。。
どうしてこんなことになるのか、、すみません、ご意見ください
430429:2010/02/26(金) 16:41:04 ID:8QtDem/g
自分なりの検証作業として
$stt= $this->_dbConn->query("INSERT INTO `{$tableCopy}`(uId,loginId,name1)
    VALUES('20000','{$chkRs['loginId']}','{$chkRs['name1']}')");
の、INSERT先テーブルを別のテーブル(既存データなし、カラムはuId, loginId, name1のみ)に変更すると、
普通に登録できます(uId=20000として)

一方で、変更前のテーブルは上記の3カラム以外にもたくさんカラムはあるんですが、NULLでもOKのものばかりだし
何よりターミナルからの同じクエリ文がinsert成功してるんでカラム数の問題はないように思います。
(カラムのデータ型はどちらも同じです)


…と、見ていて気が付いたんですが、成功したほうのテーブルはMyIsam型で、失敗したほうはInnoDBです
上記の処理はトランザクションの一部として動かしてるんですが、それが関係あるんでしょうか?
431NAME IS NULL:2010/02/26(金) 16:57:10 ID:???
commitしてないってこと?
432429:2010/02/26(金) 17:17:41 ID:8QtDem/g
>>431
レスありがとうございます、全体の流れはこんな感じです
try{
 //トランザクション開始
 $this->_dbConn->beginTransaction();
 $chkRs= $this->_dbConn->query("SELECT * `{$table}` WHERE --");//where以下省略

 if(!$chkRs){
  return "false_nodata";
 }else{
  //↓ここが今回の処理
  $stt= $this->_dbConn->query("INSERT INTO `{$tableCopy}`(uId,loginId,name1)
      VALUE('{$chkRs['uId']}','{$chkRs['loginId']}','{$chkRs['name1']}')");
  //処理2 
  $this->_dbConn->query("UPDATE {$table} SET `role` = ? WHERE `preLoginPass`=? LIMIT 1", array($member,$tmpPass));
  return "success";
 }
}catch (Zend_Db_Statement_Exception $e){
 $this->_dbConn->rollBack();
 print($e->getMessage());
}catch (Exception $e){
 print($e->getMessage());
}

これで、「今回の処理」部分のinsert登録ができていなくて(データに残ってない)
でも、その後にある「処理2」の部分はUPDATEできてる状況です。
(今回の処理のテーブルはInnoDB、処理2のテーブルはMyISAMです)
トランザクションに不慣れでいまいちよくわからないんですが、commitしてないってことでしょうか?
なんでデータ登録できてないテーブルへのターミナルからの別インサートが、無視されてる行の次の値から始まってるのかわかりません。
あと、念のため正直に言いますが、元はzendFWスレで聞いて解決しなかったのでこちらで質問させてもらってます。
あちらだとスレ違いになってきたので…。 よろしくです
433429:2010/02/26(金) 17:32:34 ID:8QtDem/g
あー、解決しました
>>431さんのアドバイスどんぴしゃでした。
処理2の直後に$this->_db->commit();しなきゃいけなかったんですね。
トランザクションの知識不足で、処理2の実行がされてるのでトランザクション成功してるのかと思ってた
成功してたんじゃなくて、2用のテーブルがトランザクション非対応で不具合で実行されちゃってたんですね。。

ほんと助かりました。感謝します。ありがとうございます。
434426:2010/02/26(金) 20:35:05 ID:???
>>428
5.1でそういう事が出来るようになっていたのは知らんかった。 thx
制限事項に記述なし何て言わずに出来るようになったって書いて欲しいところだけど w
435NAME IS NULL:2010/02/27(土) 01:49:19 ID:Gez8MG5C
MySQLへの画像保存について教えてください。
今、MySQLのBLOBに画像を入れ、それをphpで表示させようと考えてます。

HTMLフォームからphpでMysqlに入れているサンプルはよく見かけるのですが、
直接、SQL文のみでローカルに置かれている画像(jpgファイル)を入れる方法ってないのでしょうか?

insert into table_name (img_data) values('ファイルのパス');

みたいな感じで入れられないのかな?とか思いましたが、これだとダメですよね。
436NAME IS NULL:2010/02/27(土) 09:49:42 ID:???
values(load_file('c:\uporg349217.jpg'));
437435:2010/02/27(土) 14:41:02 ID:Gez8MG5C
>>436

なるほど!ありがとうございました!
m(_ _)m
438NAME IS NULL:2010/02/28(日) 22:28:49 ID:???
インデックスについて質問です。

テーブルの特定のカラム上にない値をWHEREで指定してSELECTする場合なのですが、
EXPLAIN文を見ると、キーを使わずに検索しています。

例えば

SELECT hash FROM users WHERE hash = '39fdb309ffb5e207'

というSELECT文で、この値がテーブルのカラム上に存在する時は、
EXPLAINのpossible_keys、key ともに、hashカラムのインデックスの名前が出ます。

ところが、実際は存在しない適当な値(例えば'hoge')を検索しても、possible_keys、key は NULL でした。

存在する値で無い限り、インデックスは使用されないのでしょうか?
また、テーブルの規模が巨大化した場合、これは重い処理となってしまうのでしょうか。

どなたかよろしくお願いします。
439NAME IS NULL:2010/03/03(水) 03:37:13 ID:???
my.cnfについて質問なのですが
データベースの文字コードがおかしい(utf8にしたいけどlatin1)うえ、
my.cnfが見当たらなかった(短縮コードなども考慮して探したけどなかった)
ので自分でテキストエディタを使ってあたらしく作ったのですが、

内容を
[mysqld]
default-character-set=utf8
skip-character-set-client-handshake
(my.cnfの場所はxampp/mysql/bin の中)
にしてmysqlを再起動、新しいテーブルを作ってみても
使用している文字コードがutf8に統一されません。

たぶんmy.cnfの設定が間違っていると思うのですが、
どのように修正したらいでしょうか。
もしご存じでしたら教えてください。お願いします。
440NAME IS NULL:2010/03/03(水) 09:10:49 ID:???
OS等の環境も書かねばバージョンも書かぬとな?
441NAME IS NULL:2010/03/03(水) 12:35:16 ID:???
>>439
設定変えたら
drop database xxx;
create database xxx;
create table yyy;
をやり直す。
442NAME IS NULL:2010/03/03(水) 21:23:19 ID:???
2つのテーブルがあります。
双方のテーブルのname, creator, sizeに同時にLIKEしたいのですがどうすればよいのでしょうか?
双方のテーブルに同一のデータは入っていないため、join on conditionできません。
主キーのhashとpathに関連性はありません。

old
hash | name | creator | size

new
path | name | creator | size
443NAME IS NULL:2010/03/03(水) 21:52:35 ID:PLsr1NeP
テーブルの特定のカラムを、そのテーブルがUPDATEされる度に
アップデート時の日時が記入されるようにしたいです。

ALTER TABLE `spot_kihon` CHANGE `day_shusei` `day_shusei` DATETIME NOT NULL DEFAULT 'CURRENT_TIMESTAMP'

上記のようなクエリを書いてみたんですがエラーになります。どこがおかしいのでしょうか?
MYsql5を使っています。
あと、ワガママですみませんがphpのupdate文だとどうなるのかな。教えてください。
444NAME IS NULL:2010/03/03(水) 22:10:43 ID:???
>>442
MARGEすればよくね?
445NAME IS NULL:2010/03/03(水) 22:10:47 ID:???
>>443

datetimeじゃなく、timestampにすりゃいいじゃん。

俺なんか、あれに現在日時が書き込まれるのはINSERT時だけと思い込んでて、
UPDATEの日時に書き換わっちゃって泣いた経験があるんだぞ。

ああどうせ、マニュアルもロクに読まなかったアホだよ。
446NAME IS NULL:2010/03/03(水) 22:27:50 ID:???
>>445
おおー、あっさり解決した。
ありがとうございます。助かりました。

後一つだけ聞きたいんですが、updateの時にlimitをかけるのっておかしいことなんでしょうか?
update 略 where hoge=1 limit 1 みたいな。
今まで意識せずにそうして来たんですが、意味ないような、でもしないとパフォーマンス悪くなりそうな。。
どうも気になっています。
447NAME IS NULL:2010/03/03(水) 22:35:53 ID:???
>>443

update tablehogehoge
set 〜 = 〜,
〜 = sysdate() ←アップデート時の日時;

とかは?
448NAME IS NULL:2010/03/03(水) 22:46:01 ID:???
>>444
MERGE使わない方向でお願いします。。
テーブルを新規に増やすことができないです。
449NAME IS NULL:2010/03/04(木) 04:19:25 ID:???
>>448
UNION ALLでいいんじゃないの
450NAME IS NULL:2010/03/04(木) 09:11:47 ID:???
>>446
WHEREにマッチしたレコード全部を更新したいなら、LIMIT付けるのは無意味だと思うよ。
マッチしたレコードのうち一部を更新したいなら、LIMITを付けることもあるだろうけど、
その場合ORDER BYも併せて使わないと、どのレコードが実際に更新されるか分からない
んじゃないかな。

まあ、WHEREだけできっちり限定できるようにする/出来る場合ばかりだったけど、俺の場合。
451NAME IS NULL:2010/03/04(木) 12:40:54 ID:???
>>446
>>450にある通り、処理結果が不定になるので
レプリケーションのマスタでそんなSQL流したら俺がグーで殴りに行くけどな
452NAME IS NULL:2010/03/04(木) 15:23:08 ID:???
じゃあ、俺はチョキで目潰しを。
453NAME IS NULL:2010/03/04(木) 18:44:48 ID:???
おいどんはパーで張り手でごわす。

>処理結果が不定になるので
え、update結果がバイナリログで
伝わるんじゃないの?
クエリだけが伝わって、実行内容は
不定なの?
454NAME IS NULL:2010/03/04(木) 21:06:13 ID:ZrhgRcIJ
すみません、ド素人質問許してください
phpMyAdminつかってて、カラムの設定を defaultでNULLに設定してると
1)レコード一覧で空きカラムにはNULLって表示がされます。
この状態と、
2)$param = ""; をinsertやupdate処理した状態(phpMyAdminではカラムが空欄になってる)
また、
3)$param = NULL; を送信した状態(phpMyAdminではカラムがNULLと表示されてる)
この3つはどう違うんですか?

というのは、送信するパラメータがカラの時はNULLって言葉に置き換えてinsertなりupdateなり
しなきゃいけないと思って今まで
if($_POST['param'] != ''){
 $param = $_POST['param'];
}else{
 $param = NULL;
}
とかやって来たんですが、意味あるのかな?と疑問に思えて来ました
(送るパラメータが50個とかになると行数凄いことになるんだもん)
mysqlは5です
455NAME IS NULL:2010/03/04(木) 21:07:23 ID:???
>>453
5.1以降に実装された行ベースbinlogを使っていない限りは
マスタで実行したSQLが記録されている

スレーブはそれを再実行している

http://dev.mysql.com/doc/refman/5.1/ja/replication-formats.html
456NAME IS NULL:2010/03/04(木) 21:10:10 ID:???
>>453
binlog-format が statment(ステートメントベース)なら query が、
row(レコードベース)なら結果が入ると思う。
mixed の場合どのように判断されるかは試していない。

ステートメントベースの場合は error_log に次のような warningが出る。
Statement may not be safe to log in statement format. Statement: query...

ちなみに、
* ver 5.1.12〜5.1.28 までは default mixed
* それ以外は、default statement
5.1.29 で 5.0系との互換性のために戻されてます。
row(レコードベース)は 5.1.5以降で実装。

row は安全だが、binlog にすべて書かれるのでレプリケーションの遅れや
マスター側の書き込み量の増大などが考えられるのでオススメしない。
457NAME IS NULL:2010/03/05(金) 05:46:51 ID:???
binary型がいまいちよくわかりません
binaryというだけあって画像なんかのデータを入れるのに使うのかなとは思ったのですが
こちらはblobを使うようなので
char型のを全てbinary型にしても問題はないですよね?
両者にどんなメリットデメリットがあるのでしょうか?
458NAME IS NULL:2010/03/05(金) 06:21:23 ID:???
>>457
ちょっと違うかもしれないけど、自分はperlのutf8フラグ あり/なし
みたいなものと捉えてる。

例えばchar(10)としたカラムがあった場合、
UTF8では30バイト、binaryでは10バイトの領域を占有する。
で、UTF8の場合はUTF8文字で10文字分格納出来るわけだけど、
binaryの場合は10バイト(UTF8文字で3文字)までしか格納できない、
とかの違いがある。あと、照合順予やエスケープ、ソートの結果とかが異なる。

メリットとは言えないかもだけど、ウチの場合、かつて4.0系から5.0系にupした時に、
一時的に文字コード絡みの各種不具合(ってか仕様)を回避するために使ったことはある。
charset=binaryにしておけば、server/clientの文字セット指定に関らず無変換なので・・。

あと、あんまり用途はなさそうだけど、同じテーブルの同じカラムに異なる文字コードの
テキストを入れたい時になんかにも利用できる。
459NAME IS NULL:2010/03/05(金) 06:46:26 ID:???
>>458
詳しい解説ありがとうございます
utfの例はわかりやすかったです
その例だとcharのほうが文字コード考えないでプログラムできるのでよさそうですね
照合順序、エスケープ、ソートこちらもこれから調べてみます。

基本的にあまり多用するようなものではないんですかね?
webプログラムなんかのコードを見るとあまり使ってる例はみないので
1度だけbinaryとvarbinaryを多用してるテーブル定義を見たことがありましたが
結局は設計者次第なんですかね
460NAME IS NULL:2010/03/07(日) 01:55:59 ID:dMuzjhdD
テーブルhogeTable(カラムは id, txt, photoName)があります。
これで、
id はオートインクリメント
txt は文章(text型)
photoName はpic1(pic+hogeTable.id)って形にしたいです。

説明しづらいんですけど、 データのinsert時にセットされるidの値を
文字列「pic」のあとにくっつけて、自動的にphotoNameカラムに入れていきたいんです。
どうしたら良いんでしょうか?
今のところ、いったんphotoName以外をinsertして、
last_insert_id()でid値を取得してそれを元にpicNを作って再度insertしてます。
自動化することはできないですか?
461NAME IS NULL:2010/03/07(日) 02:07:28 ID:???
導出によって求められる項目を弾くのは第一正規化の基本
462NAME IS NULL:2010/03/07(日) 15:40:59 ID:???
>>460
photoNameにIDつける必要あるんでしょうか?

データー取得時にIDをくっつけたらいいのでは?
463NAME IS NULL:2010/03/07(日) 19:13:39 ID:???
レンタルサーバー(Xrea)がMySQLをサポートしています。

このデータベースに

#ファイル名, 説明文
001.jpg, お花の写真
002.jpg, 車の写真
003.jpg, 電車の写真




といったリストを一度に渡したいと思っています。
レンタルサーバーなのでMySQLの設定を変更したり自由に扱うことはできません。
こういった環境下でリスト一式をMySQLにアップロードするにはどうしたらいいでしょうか?
464NAME IS NULL:2010/03/07(日) 20:09:51 ID:???
>>463
インサート文を書いて、mysqlに送信するといいよ。
465NAME IS NULL:2010/03/07(日) 20:10:55 ID:???
>>463
ファイルをわたすという話ではないのであれば、
普通にExcelとかでINSERT文を作るのが一番早いかと。
466NAME IS NULL:2010/03/07(日) 20:46:47 ID:???
>>464
>>465
> INSERT文

ありがとうございます。
ところでinsterしてアップロードした後に

001.jpg, お花の写真
002.jpg, 自動車の写真 ←
003.jpg, 電車の写真

途中の項目を変更した場合はどうしたら変更した分だけを更新することができますか?

同じinsert文つかって丸ごとアップすれば変更した箇所も含めて更新されますか?
467NAME IS NULL:2010/03/07(日) 21:10:01 ID:???
>>466
更新したけりゃ Update


Insert でやるなら
on duplicate key update オプションつけて
468NAME IS NULL:2010/03/07(日) 21:21:09 ID:???
>>467
今ふと疑問に思いました・・・
レンタルサーバーでinsertコマンドやupdateコマンドはどう打ち込んだらいいんでしょうか・・・
469NAME IS NULL:2010/03/07(日) 21:25:17 ID:???
今こそ優しさが試されるとき。
470NAME IS NULL:2010/03/07(日) 21:53:28 ID:???
>>468
Xreaならphpmyadminが使えるからそれで。

・・・というか、その知識と検索能力のなさで、MySQLで何をするつもりなのかが気になる。
471NAME IS NULL:2010/03/07(日) 22:33:58 ID:???
>>470
写真を掲載するサイトを作ろうと思いまして・・・

写真とその写真に関する説明文をセットでデータベースに登録しようと思っています。
472NAME IS NULL:2010/03/07(日) 22:35:10 ID:???
でもデータベース難しそうですね('A`;)・・・
私のやろうとしてること程度でしたらデータベースなんて使わずに
ローカルにファイル名と説明文をセットにしたテキストファイルを
用意してそれをPHPとかから読むようにしたほうがいいかもしれませんね・・・
473NAME IS NULL:2010/03/07(日) 23:39:26 ID:???
PHPでMySQLからデータを読み込むアプリを作れるのであれば、
先にファイル名と説明文を登録・更新するアプリを作ってから、
表示用のアプリを作る方が、イメージをつかみやすいと思う
474NAME IS NULL:2010/03/07(日) 23:50:17 ID:???
>>473
・アップロード
・更新
・表示

この3つを全てPHPで作ると言うことですね。
475NAME IS NULL:2010/03/07(日) 23:54:26 ID:???
そゆうこと。
アップロードとかサンプル見ながらやれば割と簡単にできる。
少なくとも、直接SQLを発行して管理をするくらいなら、
自分で言っていたようにDBよりテキストファイルを使う方が賢い
476NAME IS NULL:2010/03/08(月) 00:34:18 ID:???
>>475
了解しました(・∀・)

> 自分で言っていたようにDBよりテキストファイルを使う方が賢い

やっぱりそうですよね('A` )・・・
更新したときもデータベースに修正しなおす必要もありませんし・・・
477NAME IS NULL:2010/03/08(月) 00:40:23 ID:???
>>461-462
ありがとうございました。アドバイスのやり方に変更します。
478NAME IS NULL:2010/03/08(月) 18:16:16 ID:???
indexについて質問なんですけど、
insertやdeleteをするとindexの再構成が発生するのは当たり前として、
indexに絡まないカラムのupdateをした場合には
indexの再構成は発生しないで済みますか?
479NAME IS NULL:2010/03/09(火) 02:04:45 ID:???
>>478
はい。
480NAME IS NULL:2010/03/09(火) 02:14:37 ID:???
>>479
ですよね、ありがとうございます。
481NAME IS NULL:2010/03/09(火) 02:28:51 ID:???
一度作った行って削除しないのが普通ですか?
AUTO_INCREMENTでIDを挿入している場合
削除したらそこの部分だけポッカリ空いてしまいますよね?
現在の最終IDが100だとしてID2の行を消した後に
次に作成される行のIDが2になれば埋まりますが101になるので
IDを表示した場合歯抜けみたいでマヌケになってしまいます
削除フラグなんかをつけて表面上は削除したように見せかけてデータだけ残すなんて手もありますが
不必要な情報や個人情報なんかをユーザーが削除後も残しておくのはどうかと思うのですが
皆さんはAUTO_INCREMENTでID振ってる場合どうしますか?
削除してIDが抜けても気になりませんか?
482NAME IS NULL:2010/03/09(火) 02:42:39 ID:???
>>481
IDが抜けてなにを気にすることがあるの?
別に1ずつ増加じゃなくて、重複しないようにランダムで振られたっていいというのに。

IDというのは単に「その行を識別するための何か」であって
必ずしも数値である必要は本来無いもの。
ただ単に、扱いやすいから数値を使っていて、
ただ単に、扱いやすいから1ずつ増加にしているだけだよ。

もし「登録順にソートしたい」なんてシステム用件があるのなら
それはそれで「登録日」とか「登録順」といった別カラムを用意すべきだし。
483481:2010/03/09(火) 02:58:43 ID:???
>>482
わかってはいるんですけど何か気になるんですよね
私みたいに気にする人はいないってことなんですかね
気にしないようにしたいと思います
484NAME IS NULL:2010/03/09(火) 09:09:26 ID:???
>>483
>>482の言う通り、ユニークとするものだから、
必ず連番にしたいのなら、自分で空き番取る処理を入れればいいだけだよ。
気にする、しないじゃなくて、必要があればするだけ。
485NAME IS NULL:2010/03/09(火) 09:28:33 ID:???
IDの使い回しなんかすると、いらんバグを作り込むだけだから
やめていおいた方が良いよ。
他人のデータが表示されたりとか。
486NAME IS NULL:2010/03/09(火) 10:14:55 ID:???
それにしても auto_incrementに関して、抜けがどうのこうのという質問は多いな
(という俺も以前質問したことがあったけど w
487NAME IS NULL:2010/03/09(火) 10:20:37 ID:???
>>481
>一度作った行って削除しないのが普通ですか?

ふつ〜かどうかは知らんが、まあDELETEはインデックスの再編成を伴うから
比較的重い処理ではある。

ポスグレやInterbaseならDELETEでもUPDATEでも、この点同じだから気にしてもしょうがないけど。
488NAME IS NULL:2010/03/09(火) 10:32:30 ID:???
並んだ数字に抜けがあると気持ち悪いのは良く判る
んが、残すかどうかとは関係無いのう
489NAME IS NULL:2010/03/09(火) 14:25:13 ID:???
初心者が大抵通る道だなw
後で考えるとなんてバカなことを気にしてたんだろうと思うけど
490NAME IS NULL:2010/03/11(木) 00:56:24 ID:???
LIKEの範囲をid(主キー)が1,5,7の場合という風に限定したいのですが、
どのように書けばいいでしょうか?

select * from db where foo LIKE'%test%' ... id =????
491NAME IS NULL:2010/03/11(木) 01:13:16 ID:???
普通にAND条件ではいけないの?
492NAME IS NULL:2010/03/11(木) 01:27:01 ID:???
質問がわからんけど

select * from db where foo LIKE '%test%' and id in (1,3,5)

とか、そいうことをやりたいんだろうか?
まさかそんなことを聞いてるわけじゃないか。
493NAME IS NULL:2010/03/11(木) 14:19:28 ID:???
正規表現で

互換性とかで使いたくなければ、文字列処理関数の組み合わせかなあ
494NAME IS NULL:2010/03/12(金) 23:51:59 ID:???
さくらインターネットを使っているのですが、

↓たまにこんなエラーが出て、一度出ると1時間以上なにも出来なくなります。
何か解決方法とかはありますか?

I cannot connect to the database because: User ********* already has more than 'max_user_connections' active connections
495NAME IS NULL:2010/03/13(土) 00:46:53 ID:???
>>494
コネクションが生きっぱなしなんだろ。
時間がかかる処理をたくさん並列動作させてしまってないか?
496NAME IS NULL:2010/03/13(土) 09:12:25 ID:???
>>495
全てしっかり MySQL Closeしてます。

さくらの共有鯖って本当に終わってます。
497NAME IS NULL:2010/03/13(土) 09:46:32 ID:???
>>494

接続が persistent になってんじゃないの?
498NAME IS NULL:2010/03/13(土) 09:51:36 ID:???
>>497
mysql_connect を使用しているので persistent では無いはずです。
499NAME IS NULL:2010/03/13(土) 13:43:26 ID:???
他の人のプロセスが食っちゃってるんじゃね?
500NAME IS NULL:2010/03/13(土) 17:59:28 ID:???
>>499
やっぱそうでよね。今つかってるプレミアで他のユーザ数を調べたらそれでも60とかいましたし。
501NAME IS NULL:2010/03/15(月) 14:38:34 ID:4OtXUcU9
ちょっと勉強中の質問というか疑問なんですが、MySQLとかの中で
データベースを複数に分ける意味や効果って何かあるんですか?
単に何かの分類するときに都合がいいだけ?

データベースの切り替えや指定が面倒なんで、つい
関連性の低いテーブルでも一つのデータベースの中で収めてしまいます。
502NAME IS NULL:2010/03/15(月) 15:00:23 ID:eRqJqjFb
すんません教えて下さい。
MySQLが入ってるPCはXPで
他のPC(XP)からDBにアクセスする分には問題ないのですが
他のPCでWindows7からだと読み書きがアホほど遅くなってしまうのですが
これの対処法を教えてください。。
503NAME IS NULL:2010/03/15(月) 16:13:35 ID:???
共有フォルダとかは遅くないの?
名前解決あたりはどうやってる?
504NAME IS NULL:2010/03/15(月) 16:24:39 ID:eRqJqjFb
エクスプローラとかで共有フォルダを見ても特に遅い事はないですが・・・
すんません、名前解決とかはどういうことですか?
どこかで設定するアレですか?
505NAME IS NULL:2010/03/15(月) 16:50:49 ID:???
>>504
hostsに書いとけばおk
506NAME IS NULL:2010/03/15(月) 17:04:22 ID:eRqJqjFb
>>505
ごめんなさいすんません。
hostsとはどこにありますか。。。
507NAME IS NULL:2010/03/15(月) 17:07:32 ID:???
ぬおおおお、hostsの場所はOSに寄るし、さすがにスレ違いだぜ。
UNIXなら/ets/hosts
508NAME IS NULL:2010/03/15(月) 17:10:56 ID:???
winなら

%systemroot%\system32\drivers\etc


このレベルでサーバーの管理してんの?
509NAME IS NULL:2010/03/15(月) 17:11:47 ID:???
あ、タイプミス。
/etc/hosts
510NAME IS NULL:2010/03/15(月) 17:13:57 ID:eRqJqjFb
>>507
すんませんすんません僕は死んだ方がいいのはわかっていますが
無知なこのブタに教えてください。
OSはWinXPなのですが、MySQLをインスコしたフォルダの何処かを辿れば
hostsフォルダ?ファイル?があるのでしょうか?
ちなみにこれってhostsって拡張子無しのファイル名なんですかね?
511NAME IS NULL:2010/03/15(月) 17:16:26 ID:eRqJqjFb
とりあえずsystem32\drivers\etcにあるのを確認しまくりました。
んで、この中をチラ見してみると、
127.0.0.1 localhost
とかいていましたが、これにIPだけ追加すればいいのでしょうか?
512NAME IS NULL:2010/03/15(月) 17:25:30 ID:???
いやまあ共有フォルダで問題ないならそれじゃない気がするけど、
ちゃんとそれが原因じゃないことを確かめるためにも入れてみたほうがいいね
1行に
IPアドレス サーバ名
で入れればいいよ。
拡張子無しだから気をつけて
513NAME IS NULL:2010/03/15(月) 17:31:08 ID:eRqJqjFb
>>512
ありがとうございます。
このブタにここまで優しくお答えして頂いて感謝です。
IPとサーバ名を入れてやってみます。

ちなみに、アクセスはできてます。
QueryBrowserとかからもDBを見ると1〜2秒かかってしまいます。
さらにちなみに言うと、正常なXPと異常な7は同じPC(デュアルブート)です。
故にIPも同じです。
ちょっとうんこしたくなりました。
514NAME IS NULL:2010/03/15(月) 17:35:27 ID:???
>故にIPも同じです。
意味不明
サーバのIPアドレスだぞ
515NAME IS NULL:2010/03/15(月) 17:36:58 ID:???
あと、アホほど遅くなると書いてたから名前解決を疑ったが
1〜2秒なのかよ。それだと名前じゃないと思う、状況は正確に書いてくれ
516NAME IS NULL:2010/03/15(月) 17:48:21 ID:eRqJqjFb
>>514
ああ、サーバですか。
MySQLが入ってるPCってことですね?
すんませんでした。

>>515
いやReadで2秒とかアホすぎます。
XPから読むだけなら数百msでぼっとん便所の如くお釣がきますので・・・
ちなみに書き込みは10秒くらいはかかってました。

再度状況を説明しますと、
517NAME IS NULL:2010/03/15(月) 17:49:14 ID:???
サーバ:XP
クライアント:XP/7のデュアルブート

ってことかな? ここで仮に

サーバ(server1):192.168.1.1
クライアント(client1):192.168.1.2

だとすると、クライアントのhostsファイルに

192.168.1.1 server1

って書け、ってことだよ。

ま、どのみち遅いのはこれに関係ないと思うけど。
518NAME IS NULL:2010/03/15(月) 17:51:34 ID:eRqJqjFb
MySQLがインスコされているPCはXPで
他のPC(XP)からだと普通の速度で読み書きができます。
他のPC(Win7)からだとアクセスが極端に遅くなります。
この他のPCは、XPと7は同じPCでデュアルブート
あと好きなお菓子はえべせんです。
519NAME IS NULL:2010/03/15(月) 17:54:06 ID:eRqJqjFb
>>517
あ、レス遅れて代弁ありがとうございます。
実にその通りで、hostsに書き方も把握しました。

ちなみに皆さんWin7からでもアクセス速度は特に問題ないみたいですが
これはMySQLではなくて別のOS絡みのアレなのでしょうか?
520NAME IS NULL:2010/03/15(月) 18:03:14 ID:???
7で使ってないからわからんけど、Windowsファイアウォール切ってみるとか
QueryBrowserを互換モードで動作させてみるとかそういうのからやってみたら?
521NAME IS NULL:2010/03/15(月) 18:05:48 ID:???
SELECT CURRENT_DATE とかやって時刻は発行時と返事が帰ってきたときと
どっちに近い?あとアクセスログ出すといいかも
522NAME IS NULL:2010/03/15(月) 18:06:22 ID:???
CURRENT_TIMESTAMPか、まあその辺は調べて
523NAME IS NULL:2010/03/15(月) 18:17:35 ID:eRqJqjFb
>>520
とりあえずFWは全て無効にしております。
それと自ソフト(MySQLにアクセスしてる)は互換モードで行っております。


>>521-522
纏めて失礼します。
SQLを発行する前後で時間を計測した結果が
XPでは100msくらいで、7だと10秒くらいでした。
ちなみにXPでコンパイルしてXPと7で同じソフトを使って計測しましたが。
すんませんログとかアレしてみます。

なんかこれ7固有の問題っぽい気がするのですが、
ちなみに、これとは全く関係がないのですが、
僕(ブタ)が作ったソフトでXPでは普通に動作してても7だと正常に動作してくれません。
Win7ってほんとうんこですね。
524NAME IS NULL:2010/03/15(月) 18:20:29 ID:???
クライアントのOSのせいにするんならここはスレ違い
まあ自分のプログラムが悪くてもスレ違いか
プログラマのクセにVista飛ばすからこういうとこでひっかかるw
525NAME IS NULL:2010/03/15(月) 18:24:40 ID:???
確認するけど、君の作ったソフトじゃなくても、例えばQueryBrowserから
でも7からだと遅いんだよね? で、サーバへのpingの応答速度は普通なんだよね?
526NAME IS NULL:2010/03/15(月) 18:44:31 ID:eRqJqjFb
>>524
いや最初はMySQL側で何か設定というか対応策があるのかとおもったんですよ。
ちなみにソフト的な7での不具合は多数ありますので(だから7対応どーたらとかある)
ちなみにビスタは世間的に糞認識されてたからそんな出回ってないですよ。
今思えばスレチだったかもしれませんが、Win7でそういう報告があったらアレかとおもいまして

>>525
鬼のようにはいです。
QueryBrowserからでもアホほど遅くなっています。
はいそして、ping応答速度は至って普通です。
これって僕が死ぬべきなんですかね?
好きなアイスはMoです。
527NAME IS NULL:2010/03/15(月) 18:47:54 ID:???
>>526
そんなに簡単に死んだら親が悲しむんじゃない?
俺はどうでもいいけどさ。
528NAME IS NULL:2010/03/16(火) 06:38:35 ID:???
掲示板の投稿時間を管理したいときって
UNIX値で入れる以外にオススメってあります?
529NAME IS NULL:2010/03/16(火) 10:30:23 ID:k595kZow
MySQL(Tritonn)からSenna+MeCabをWindows環境で使いたいのですが、
Tritonnの公式サイトには

>2008/12/29 Tritonn 1.0.12リリース
>Tritonn 1.0.12をリリースしましたのでお知らせさせていただきます。
>※Windows版ではmecab未対応のためN-Gramのみとなります。

と記載されており、それ以降のバージョンに関しては特に記載がありません。
最新バージョンのTritonnではWindows版はMeCabに対応していますか?
530NAME IS NULL:2010/03/16(火) 10:32:34 ID:???
管理をもっと具体的に
日付型だと年や月でフィルターするのがちょっと楽
531NAME IS NULL:2010/03/16(火) 11:44:18 ID:UU7cr7Yr
mysql.com繋がらないのだが。
532NAME IS NULL:2010/03/16(火) 12:38:07 ID:???
mysql.oracle.comとかじゃね?
533NAME IS NULL:2010/03/16(火) 12:39:18 ID:???
つながるけどちと重いな
534NAME IS NULL:2010/03/16(火) 15:46:42 ID:JBH677pX
正規化について教えてください

よく、賃貸物件サイト見てると検索のこだわり条件を指定するときに
「2階以上」「エアコンつき」「バストイレ別」とかをチェックボックスで選ぶのありますよね?
ああいうのは物件データ側からすると物件名や管理会社名や所在地を入れた基本情報テーブルと
上記のようなこだわり条件を入れた「こだわり条件テーブル」に分けて登録してるんでしょうか?
たぶんそうかな、と思ってるんですが、、

ここで質問です
基本情報テーブルに「こだわり条件カラム」を作って「1,3,7,12」みたいにチェックボックス値を
CSV形式で入れていってはいけないんですか?
正規化っていうルールをあえて破ることになると思いますが、それで受けるデメリットや
逆にそうしたほうが得(もしくは大してデメリットにならない)になる場合ってどんなときでしょうか?
535NAME IS NULL:2010/03/16(火) 15:53:14 ID:???
やってみたら?
検索とかどうするつもりよ
536NAME IS NULL:2010/03/16(火) 15:57:39 ID:???
>>534
実装上はどっちでもいいし、正規化なんて教科書上のルールなんで
わかってやるならやぶっても問題ない。わからないんなら教科書
通りにやった方があとで困らない。

ちなみに
その例を正規化すると最低3テーブル必要なのはわかってるよね?

フィールドにCSVで入れるのはいいけど、それをあとでWHEREで条件
絞って取り出す時はどうするの? とかそういう問題を簡単にクリア
できるかどうか。まあSQL一発でできなけりゃプログラム側でいくら
でもできる話なんで好きにしたらいいんだけどね。
537534:2010/03/16(火) 16:15:48 ID:???
>>535,536

回答ありがとうございます
そうですね、csvだと抽出が面倒ですね
というか、すみません、恥ずかしいのですがどうして3テーブル必要なのかわからないです
良かったら教えてもらえませんか?

基本テーブルと、こだわり条件テーブルと、、?

SELECT * FROM t_kihon LEFT JOIN t_kodawari ON t_kihon.id = t_kodawari.kId
WHERE t_kodawari.val = {$val1} OR t_kodawari.val={$val2}
(t_kodawariにはkIdとして基本テーブルのIDを入れて、チェックボックスの要素分だけループでINSERTする構成)

こんな感じでどうにかなると思ってましたがぜんぜん駄目でしょうか…
独学で複雑なDBの設計とかしたことないのでわからないです。よろしくお願いします。
538NAME IS NULL:2010/03/16(火) 16:48:06 ID:???
>>537
t_kodawariにはどういうデータが入っているの?

[t_kihon]
1,物件1
2,物件2

[t_kodawari]
1,1,2階以上
2,1,エアコンつき
3,1,バストイレ別
4,2,2階以上
5,2,エアコンつき
6,2,バストイレ別

こんな感じ? これだと正規化が完了していないんだよ。
まあ若干スレ違いだけど。
539NAME IS NULL:2010/03/16(火) 16:54:08 ID:???
まあ基本は1個所に複数のデータを入れない、
同じデータを複数個所に置かない、からかな
540534:2010/03/16(火) 19:10:28 ID:???
>>538
どうもありがとうございます
説明不足ですみません、書いてもらったとおりのテーブル構成です。
それで正規化が終わってないとは思いませんでした
あとどうしたらいいんでしょうか? 今まで読んだPHPやMysqlの本では
それで十分になってたと思うんですが
541NAME IS NULL:2010/03/16(火) 19:51:25 ID:???
「エアコンつき」を「エアコン付き」に変更したいとき、かなりの数のupdateが発生するな

542534:2010/03/16(火) 20:11:58 ID:???
>>541
なるほど、そういうことですか
じゃあ、実際は数値で入れることにして値の表示は別テーブルに持たせるか
.txtなりのファイルで管理します
ありがとうございました、ほんと助かりました
543NAME IS NULL:2010/03/16(火) 20:35:52 ID:???
>>542
つか、SET型を使えよ。
表示なんかアプリケーション側で
好きなようにしたらいい。
544534:2010/03/16(火) 20:54:22 ID:???
>>543
どうもありがとうございます。SET型、今はじめて知りました
これはすごいですね、SET型を指定したカラムには、あらかじめ64個まで入る値を予約できて、
その値に限りCSV的にINSERTできて、しかもFIELD_IN_SET()でサクサク一発検索できるんですよね?
こういうの知ってるのと知らないのじゃ大違いというか、あーあ、なんで知らなかったんだろう
やり終わったあとにこういう形で知るしかないから大変だなー
545NAME IS NULL:2010/03/16(火) 21:23:05 ID:???
SET型とENUM型の違いについて教えてください。まだ使ったことがないのですけど、参考書をチラ見した限りでは
なんか似たよ〜な感じですけど、ちがうって事はなんか使い方に差があるんですよね?

546NAME IS NULL:2010/03/16(火) 23:02:38 ID:???
リレーショナルにする理由ってないよな。
547NAME IS NULL:2010/03/16(火) 23:40:50 ID:???
正規化すれば、それぞれはシーケンシャルにアクセスできるから実装的に有利ってのはあるよ
理論とかは知らないけど
548NAME IS NULL:2010/03/17(水) 00:41:01 ID:???
>>544
なんにせよきちんと正規化できるようになってからだよ、そういう応用編は。
549NAME IS NULL:2010/03/17(水) 08:30:27 ID:???
>>545
SETは複数。内部はビット演算。
ENUMは単数。内部は整数。

参考書はもっとちゃんと読め。
もし書いてなければ捨てろ。
公式リファレンスをオススメ。
550NAME IS NULL:2010/03/17(水) 17:34:03 ID:3sVku1gK
PerlでDBIを使用しMySQLに接続しているのですが、
select結果の行数を得る方法はないものでしょうか。

delete等の結果行数はrowsでとれるのですが、Pg
モジュールのntuplesと同義のものがあればどうか
ご教示ください。
551NAME IS NULL:2010/03/17(水) 18:06:02 ID:???
DBIならCOUNT(*)使うのが正道なんじゃないのかなぁ
552NAME IS NULL:2010/03/17(水) 18:34:33 ID:???
>>551
countのために2回SQLを発行することにより、コストがかかると
判断したため質問させていただいたのですが、やはりcountしか
ないですかね。。

ご返答有難うございました。
553NAME IS NULL:2010/03/17(水) 18:40:44 ID:???
countのために別SQL発行することででコストがかかると思う人は多いけど
件数によってはselectで最終行までフェッチする方がよほど負荷がかかるので
結果的にはcountの方が軽いことが多い。
554NAME IS NULL:2010/03/17(水) 18:49:35 ID:???
>>553
なるほど。そうなんですね。
一つ勉強になりました。

固定概念は怖いですね。
有難うございました。
555NAME IS NULL:2010/03/17(水) 18:50:07 ID:???
>>550
何を見て、ないと言っているのか。
$sth->rows

>>553
いみふめ。
SELECT結果が不要だったらそうだけど、
そういう話ではないような。
556NAME IS NULL:2010/03/17(水) 18:59:53 ID:???
>>555
$sth->rowsはupdateやdelete等を行って処理した数を
返すものです。
ようは、一度selectして結果を取得するついでに件
数も取得できないものかと質問させていただいた
次第です。
557NAME IS NULL:2010/03/17(水) 22:16:28 ID:???
ID | DATA
-----------
1  aaaa
2  aaaa
3  bbbb
4  aaaa

とあったときに
DATAカラムで一番多いデータから取るにはどうすればいいでしょうか?
多い順にランキングにしたいのです
558NAME IS NULL:2010/03/17(水) 22:35:47 ID:???
>>555

A)
SELECT * FROM TABLE1をやって全件フェッチして件数を知る。

B)
SELECT COUNT(*) FROM TABLE1
SELECT * FROM TABLE1
の2回のSQLを発行する

ではB)の方がいいよ、という話をしているのです。

>>554
ついでに言うとCOUNT(*)よりもCOUNT(主キー)の方がいいかも。
559NAME IS NULL:2010/03/17(水) 22:44:04 ID:???
>>558

B)の2回目の結果は取得しないのかい?だったら何のために発行するの?
560NAME IS NULL:2010/03/17(水) 22:52:48 ID:t4oaZidF
複数のサイト(DB)のデータを効率的に一気に操作する方法が知りたいです。

たとえば、美容院をまとめたサイトAと床屋をまとめたサイトBがあって
サイトBでサイトAのデータベースAの中のデータを利用したいと思います。
(例:東京都内の美容院と床屋をまとめて検索かけるなど)
どうしたら良いんでしょうか?

1)データベースは別々にせず、一つにまとめる
 →1-a)サイトAのデータベースにサイトB用のデータもまとめて入れる
 →1-b)A,Bとは別にデータベース用のサイト(サーバ)を作る
2)サイトAのデータ、サイトBのデータを別々にSELECTしてくっつける
3)サイトAのデータをサイトBのデータベースに定期的にコピーする
4)その他

どれがいいでしょうか?
1)なら、1-a, 1-bのどちらでも、SSLのコストが半分ですむのかなと思います
デメリットはわかりません
2)クエリか二倍かかってしまう、SELECTの結果をくっつける方法自分にはわかりません
3)一番現実的? 定期的にコピーする方法がわかりません

※二つのサイトは一つのサイトでバーチャルドメインで運用予定です

すごい素人考えですが、どんなやり方がいいでしょうか?
それぞれの駄目な点など指摘もらえたり、
その他(4)として、別な案をいただけるとすごく助かります。よろしくお願いします。

(Mysqlに限った問題の質問じゃないかもしれないですが、Mysqlの利用を考えてるので
こちらで質問しました)
561NAME IS NULL:2010/03/17(水) 22:58:49 ID:???
>>559
えーと、実装というかアプリの仕様によるけどさ

たとえばGoogleの検索結果みたいなことをやりたいとして
トータル1万件中先頭の10件を表示してますと。
そこで、検索時点で何件かわからないので全件フェッチ
しましたなんてアフォな実装しないでしょ?

トータル件数を知りたいのは大抵フェッチ前で
最終行に行った後にはむしろどうでもいい情報じゃん?

そういうことをやりたいって話じゃないの?
562NAME IS NULL:2010/03/17(水) 23:35:47 ID:???
┐(´ー`)┌
563NAME IS NULL:2010/03/17(水) 23:39:45 ID:???
勉強用に掲示板を作っているのですが、NGワードを格納しているテーブルがあったとします。
 TB_NG_WORD
 _____________________
 NUM WORD
 1     A
 2     B
 3     C

そして、本文に
        私の名前は「B」と申します。
という書き込みがされた場合に、テーブル内に含まれるNGワードが本文に含まれているかどうかの判定を
出来るだけスマート(速く)に行うにはどうすれば良いでしょうか?

現在は、 SELECT WORD FROM TB_NG_WORD を実行した結果をPHP側で配列に格納し
その配列の中の要素でループしながら 本文にNGワードが含まれているかを判定
しているのですが、NGワードが増えると時間が掛かりそうです。

スマートな判定方法をお教え下さい。
564NAME IS NULL:2010/03/18(木) 00:08:42 ID:???
>>557
COUNT(*),DATA FROM なんたらGROUP BY DATA
565NAME IS NULL:2010/03/18(木) 00:15:04 ID:???
>>563
NGワードをテーブルじゃなくて|区切りのファイルにしてマッチングとか。
566557:2010/03/18(木) 00:19:57 ID:???
>>564
ありがとうこざいます!
567NAME IS NULL:2010/03/18(木) 00:30:57 ID:???
>>563
データベースあんまり関係ないな。
本文に対する判定は登録された1回だけでいいんだろ?
#あるいはNGワードが更新された場合も必要か

NGワード群を(A|B|C)という正規表現とみなしてあらかじめ
DFAを用意しておき、本文が登録されるごとにマッチングを
行うというのが一般的な方法を用いる中では最速に近いはず。
568NAME IS NULL:2010/03/18(木) 01:03:28 ID:???
>>550-558あたり
ちゃんと公式(MySQL)のdocument読んでる?
っつても質問でサーバのバージョン書いてないから100%使えるとは言えないけど、例えば、

SELECT * SQL_CALC_FOUND_ROWS FROM `table` limit 10;

ってクエリを投げて、検索にマッチするのが10件以上の場合、続けて、

SELECT FOUND_ROWS();

をかければ、一回目のクエリでの合計ヒット件数が取得できる。

確かに、これも厳密に言えば二回DBにクエリを投げてることにはなるんだけど、
一回目の結果を内部的(クライアントスレッドのメモリ上?)に保存しているので、
実質二回目はDBやテーブルを触らない。

Table_TypeがMyISAMで、SELECT * FROM `table`; (whereなし)の場合は、
テーブルが格納件数をテーブルデータとは別に持っているので十分に早いが、
whereやgroup by、order by なんかを多用した時は、件数を数えるだけでも
それ相応のコスト(時間)がかかる時もよくある。

ちなみに自分の確認しているのでは、4,1系でもこのOptionは利用可能。
それより古いバージョンは知らない・・。
569NAME IS NULL:2010/03/18(木) 01:13:43 ID:???
>>560
特にデータを分離しなければならないわけでなければ、
1-a)一択だと思う。
テーブル構成の同期を保つのに気を使う必要もないし、
全く同一のアプリが全く同一の設定で使えるし。
570555:2010/03/18(木) 01:34:05 ID:???
>>556
>$sth->rowsはupdateやdelete等を行って処理した数を
>返すものです。
へえ、うちのPerl+DBIとは違うようだ。

>>568
>ちゃんと公式(MySQL)のdocument読んでる?
全読はしてないが、それなりには。

オレとしてはそんなことより、>>550
どこを読んだら、limit節の話が出て
くるのかを聞きたい。
571568:2010/03/18(木) 01:46:59 ID:???
>>570
selectクエリで、$sth->rows で件数を取得できない、
ってなったら、あと考えられるのは limit 条項しかないと思うが・・。
自分的には>>561的なことがしたいじゃないかと思った。

> >$sth->rowsはupdateやdelete等を行って処理した数を 
> >返すものです。 
> へえ、うちのPerl+DBIとは違うようだ。
ココの部分についは、全く同意。
572NAME IS NULL:2010/03/18(木) 03:16:13 ID:???
556は多分ここを見たんだと思うなぁ
http://homepage3.nifty.com/hippo2000/perltips/dbimemo.htm#item_rows
>通常、rowsはdo またはSELECT以外(UPDATEやDELETEのようなある種の操作)のexecute または、SELECTステートメントのすべての行を取り出した後にしか、信用できません。
573NAME IS NULL:2010/03/18(木) 04:12:58 ID:???
>>572
10年前のドキュメントか。w
574NAME IS NULL:2010/03/18(木) 04:16:00 ID:???
うん? ひょっとして>>550の知りたいのは、
 $sth = $dbh->prepare('select うんたら〜〜');
 $rows = $sth->execute();
これのことか??
575NAME IS NULL:2010/03/18(木) 08:18:04 ID:???
>>574
それは$sth->rowsと同じだろ。

576NAME IS NULL:2010/03/18(木) 12:24:03 ID:???
主キー(auto_incrementではない)をランダムに抽出する方法はありますか?
主キーは英数字です。
577NAME IS NULL:2010/03/18(木) 14:08:54 ID:???
>>572-573
問題ないなら構わんが、現在のCPAN本家もそう書いてるよ。
DBI-1.19 → 1.609
http://search.cpan.org/~timb/DBI/DBI.pm#rows
578NAME IS NULL:2010/03/18(木) 14:29:01 ID:???
>>576
order by rand() してlimitで1件目取りだすとか
579NAME IS NULL:2010/03/18(木) 14:37:56 ID:??? BE:988605195-2BP(0)
>>578
それでいけましたーどうもです。
580NAME IS NULL:2010/03/18(木) 18:41:09 ID:???
>>577
結局はドライバ次第ということか。
DBI自体はただのインターフェイスだし。

このスレ的には、DBD::mysqlが対応
してるんだったら、それでいいよな。w
581NAME IS NULL:2010/03/19(金) 02:02:32 ID:???
でもまぁDB差し替えを検討することは十分あり得るとも思うけどね。
582NAME IS NULL:2010/03/19(金) 08:11:52 ID:???
>>581
スレ違い
583NAME IS NULL:2010/03/20(土) 07:43:41 ID:???
>>550
あるよ。PDOには用意されてるからPerlのライブらりんにもあるだろたぶん。
584NAME IS NULL:2010/03/20(土) 23:11:35 ID:???
皆様色々と有難うございました。

私もマニュアルを鵜呑みしていたこともあるのですが、
countで対応しました。

今回のSQLがlimitなしのものであったため、同時に
件数も取れないかと思った形だったのですが、色々
とご意見いただきとても勉強になりました。

この場をお借りし御礼申し上げます。
585NAME IS NULL:2010/03/21(日) 00:28:20 ID:???
>>584
SELECT SQL_CALC_FOUND_ROWS * FROM unko LIMIT 1;
SELECT FOUND_ROWS();
これやってみ。
586NAME IS NULL:2010/03/21(日) 02:23:40 ID:???
カウンタ貸出サイト的な物を作ってるんですが
一人事に別々のテーブル作るってのはナンセンスですかね?
1アカウントで、複数のページのカウントをするので

user_takasi
-------------
url, カウント回数
url, カウント回数
url, カウント回数
url, カウント回数

こんな感じに使用と思ってるんですが
それともみんなまとめて
takasi, url, カウント回数
yosida, url, カウント回数

こうしたほうがよろしい?
587NAME IS NULL:2010/03/21(日) 02:25:44 ID:???
当然後者
588NAME IS NULL:2010/03/21(日) 02:29:20 ID:???
>>587
即レスありがとうございます
後者のほうで作ってみます
589NAME IS NULL:2010/03/21(日) 14:46:45 ID:kqP9QkWY
利用規模にもよるけど前者では100ユーザいたら100テーブル
不特定の貸し出しサービスなら、下手したら千人単位になるでしょ
初歩的な仕様バグってやつ
590NAME IS NULL:2010/03/21(日) 15:01:45 ID:???
MySQLの限界に挑戦!っす w
591NAME IS NULL:2010/03/21(日) 15:39:21 ID:???
初心者がよくやる間抜け仕様ですね。
1年後くらいにこんな仕様を考えた自分を振り返ってみるといい
592NAME IS NULL:2010/03/21(日) 19:07:53 ID:??? BE:363186926-2BP(2)
MySQLのユーザの皆様、突然MySQL+PHPで業務に耐えうるものをつくれといわれた、ただのWIN使いです
両方を学ぶのに良いサイト・本など教えていただけますでしょうか?
Linux機もないし、レン鯖に直接乗せて勉強していくしかないので効率的にやらないと恐い気がしています。
とりあえず借りたところでテープルはつくっておきました。そんな程度の知識です。
テキストなんだかデータなんだかキャラクターなんだか、なにがなんだかさっぱりわかってません。
よろしくお願いします
593NAME IS NULL:2010/03/21(日) 19:13:50 ID:???
>>592
http://moyashi.jp/cake/
とりあえず、WindowsPCに開発環境を作ってやった方が効率的ではあるまいか。
MySQLもPHPもどちらも知らないというなら、
CakePHPのようなフレームワークを学習した方が得な気がする。
594NAME IS NULL:2010/03/21(日) 19:45:08 ID:MG9Sa6dU
ただでさえMySQL,PHP,JavaScript,HTMLを一気に学習させられるのに
そのうえフレームワーク追加したらパンクしちゃわないか?
595NAME IS NULL:2010/03/21(日) 20:37:34 ID:???
むしろ、素人に期間なく対応させるなら、
10分でできる〜で紹介されているCRUDだけのWebアプリができれば御の字でしょ。
596NAME IS NULL:2010/03/21(日) 22:16:41 ID:???
>>592
手元のWin機に、Eclipse + PDT(もちろん、ApacheとPHPも)の環境を構築した方が
学習・開発・試験には便利だよ。
それで出来上がったらLinux環境に持っていくのも良し。
597NAME IS NULL:2010/03/21(日) 22:47:31 ID:???
それをやるなら、XAMPPが入ってるPleades All in Oneで決まりでしょう。
598NAME IS NULL:2010/03/22(月) 18:09:46 ID:???
んー、超初心者だけど、入り口でつっかかってまふ。

1.xamppは動いてる。
2.create databaseでデータベース作る。
3.create tabaleでテーブル作る。

ここまではおけ。

4.レコードを追加する。(insert into)
5.names set sjis;をやる
6.select *で中味を見る

もじばけー。
「1」なんて「『」になっちゃってるし。
日本語入力したところは「??」がいっぱい。

同じ環境で、本の付録のサンプルDBはちゃんと日本語も見えるんだよなあ。
どこが悪い?
どなたか教えてくだされ。
599NAME IS NULL:2010/03/22(月) 18:22:53 ID:???
>5.names set sjis;をやる

をコネクト直後に行う。

コネクト直後に行って、3からやり直してみよう。
600NAME IS NULL:2010/03/22(月) 19:40:06 ID:???
>>599

ありがとー、ってやり直したけど同じだった。
phpmyadminで見たら照合順序が latin1_swedish_ci になってたけど、
これが原因?

どうやったら治せるんだろふ。(泣)
601NAME IS NULL:2010/03/22(月) 19:47:57 ID:???
データベース作り直し
602NAME IS NULL:2010/03/22(月) 22:47:02 ID:???
>>600
作り直した方が早い

いや、まあ、それなりの手順で作り直さなくても修正効くんだけど
説明するの面倒くさいし、タダじゃやってられないし、ね。
603NAME IS NULL:2010/03/23(火) 00:32:43 ID:???
バージョン5.0で、クライアントとサーバーの
それぞれの文字コードが何かを確認するには、
どうしたらよいのでしょうか?
604NAME IS NULL:2010/03/23(火) 00:41:07 ID:???
show variables;
605NAME IS NULL:2010/03/23(火) 09:48:46 ID:xo47nm8h
テーブルの種別で悩んでいます。 お助けくださいませ。

usersテーブル
・ID
・address
・hash

と作りたいのですが、 hashの種別は varchar(255) でよいでしょうか?
606NAME IS NULL:2010/03/23(火) 11:02:47 ID:???
使うHash関数が、何バイトの文字列を出力するのかを調べて、
その固定長でいいのでは。
607NAME IS NULL:2010/03/23(火) 12:50:48 ID:???
経過書き込み。

phpmyadminでごちゃごちゃいじったら、なんかマシになってきた。
それにしても、なぜこんなつまづきやすいことを本に書かない。

技術評論社の、ばか。
608NAME IS NULL:2010/03/23(火) 12:54:10 ID:???
>>605
固定長だろうからCHARで。
609NAME IS NULL:2010/03/23(火) 22:23:27 ID:???
DB構成表をプロデューサーの人に渡したところ、その人から、
「設計が完全に完了してからパフォーマンスを考慮して非正規化
をする事を考えるように」と構成表も見ずに言われたのですが、
ここで指す「非正規化」とは、何を指すのでしょうか?

会社に入ったばかりのものであるため、すみません、ここで質問
させてください。
お願いします。
610NAME IS NULL:2010/03/23(火) 22:27:02 ID:???
それはMySQLじゃなくてSQLの一般常識だよ。
普通にググッた方がいい
611NAME IS NULL:2010/03/23(火) 22:28:54 ID:???
いやすぐに本を買って読め。
それじゃあクビ切られるぞ。
612NAME IS NULL:2010/03/23(火) 22:32:16 ID:???
ここは、なんて親切なインターネッツなんだろう。
ちょっと感動。
613NAME IS NULL:2010/03/24(水) 00:14:28 ID:???
そのプロデューサーに聞けばいいんじゃねの?
中途採用?じゃぁ、がんばれw
614NAME IS NULL:2010/03/24(水) 00:42:54 ID:???
>>610-613
まったくもっておっしゃるとおりですね。
返す言葉が見つかりません。

しっかりと勉強し、それでもわからないようであれば
頑張って聞いてみます。

ありがとうございました。
615605:2010/03/24(水) 07:28:56 ID:???
>>606
>>608

返事が遅くなり申し訳ありません。
どうもありがとうございます!
616NAME IS NULL:2010/03/24(水) 11:47:40 ID:???
私書箱システムを考えているのですが、どういう風にテーブルを組めばいいかアドバイス頂けませんでしょうか。
今考えているのが
id from_id to_id message created

って形で
送信元を from_id
送信先を to_id
として message にメッセージを入れます。

ただ、これだとどのメッセージにどのメッセージからの返信なのかというのが
わからなくなってしまいますよね。
教えて下さい。よろしくお願いします。
617NAME IS NULL:2010/03/24(水) 11:59:48 ID:???
要件が良くわからないけど、
先頭のidが、メッセージのidを示しているのであれば、
もう一項目追加して、返信先IDを保持するようにすればいいのでは。

id from_id to_id reply_to message created
618NAME IS NULL:2010/03/24(水) 12:29:40 ID:???
メッセージとidと作成者、作成日時だけのテーブル作って
どこへ送信したのかとかどのidのりプライなのかとかは
別テーブルにした方がいいんじゃ?
同報の仕組みとかはいらないのかな
619NAME IS NULL:2010/03/24(水) 12:42:34 ID:???
>>617
>>618

ありがとうございます。

送信情報テーブル
id from_id to_id created

メッセージテーブル
id send_id message created

こんな感じで行ってみようと思います。
ありがとうございました!
620NAME IS NULL:2010/03/24(水) 15:12:55 ID:???
slow.logに記録されているQuery_timeが5のSQL文を実際にmysqlに接続して投げると0.2くらい実行されます。
これはネットワークやプログラムとの接続部分がボトルネックになっているということでしょうか?

long-query-time=4で設定しています。
ご教示お願いいたしますm(_ _)m
621NAME IS NULL:2010/03/24(水) 15:45:17 ID:???
>>620
クエリの実行時間であって、結果をお渡しする時間ではないので
通信部分がボトルネックだった可能性はない。
622NAME IS NULL:2010/03/24(水) 15:48:10 ID:???
AテーブルとBテーブルがあって、BはAに紐付いているとき
Aのレコードを削除したら紐ついてたBのレコードも
いっしょに削除されてほしいんだけど
こういうのってなんとかナージャでやるんだっけ?
623620:2010/03/24(水) 16:14:06 ID:???
>>621
ありがとうございます。
つまり単純にクエリを実行した時間が遅かったってことでしょうか?
接続してまったく同じクエリを投げてもとても早いのですが、、

insert文なのでキャッシュされているということはないですし、slow.logがおかしいなんてことがあるのかわからないけどそれしか考え付かないです;;
624620:2010/03/24(水) 16:15:56 ID:???
>>622
InnoDBならFOREIGN KEYでできます。
説明下手なのでこちらを見てください
http://dev.mysql.com/doc/refman/4.1/ja/innodb-foreign-key-constraints.html
625NAME IS NULL:2010/03/24(水) 19:02:51 ID:???
ナージャとは、なんじゃ?
626621:2010/03/25(木) 17:03:24 ID:???
>>624
ありがとうございます。MyISAMなのであきらめます。
627NAME IS NULL:2010/03/25(木) 19:06:42 ID:???
>>626
エンジンを替えたら?
628NAME IS NULL:2010/03/26(金) 18:18:25 ID:???
SHA1関数も、2010年問題によりあまり使いたくなくなってしまいました。
ハッシュを作る何かいい関数はありますでしょうか。
SHA2はまだ実装されていないみたいですので。。
629NAME IS NULL:2010/03/26(金) 19:31:12 ID:???
アプリケーション側で実装するのが普通なんだが
630NAME IS NULL:2010/03/26(金) 20:15:02 ID:???
>>628
MD5でいんじゃね?

>>629
えっ。
631NAME IS NULL:2010/03/27(土) 14:16:07 ID:???
すいません、教えて下さい。

accessとmysqlをmyodbcを利用して接続していますが、myodbcのバージョンが
3.5.1.05以外問題が発生するので、未だに変更できません。
しかし3.5.1.05は4.1以降のmysqlに接続出来ません。

そこで以下の方策のいずれかはとれるのでしょうか。
・myodbc3.5.1.05で4.1以降のmysqlに接続する
・複数のmyodbcをインストールする

ちなみに今までの経験上、3.5.1.05以外では一部文字化けがあったり、
date_format関数の結果がおかしくなったりします。3.5.1.27では、adoの
レコードセットを開いて更新するとaccessが異常終了します。

よろしくお願いします。


632NAME IS NULL:2010/03/27(土) 16:39:43 ID:???
>>631
ODBCを5.1にVerUpして使ってるけど、問題でてないなぁ。俺の環境では。
まぁ文字化けやdate_formatでちと難があったけれども、なんとかできた。
少なくとも異常終了みたいなことは発生していないよ
633NAME IS NULL:2010/03/27(土) 20:50:25 ID:???
テーブルのうち空き番号があれば、その番号を取得し存在しない場合には、
テーブル内の最大番号+1を返すクエリはどうすれば良いでしょうか?


例)

TEST_TABLE

ID




この場合 → 4 を取得


ID



この場合 → 2 を取得


634NAME IS NULL:2010/03/27(土) 21:19:06 ID:???
抜く時にAUTOINCREMENT値を変更しとけば?
635NAME IS NULL:2010/03/27(土) 21:52:28 ID:???
>>634
???
よくわからないのでSQLで一発で抽出する方法をお教え下さい。
636NAME IS NULL:2010/03/27(土) 22:38:10 ID:???
>>633
SELECT
IF (MAX(SAB1.id) = hantei,MAX(SAB1.id)+1 ,MAX(hantei))
FROM
(SELECT
A.id,
MAX((SELECT COUNT(B.id) FROM test_1 B WHERE A.id >= B.id)) AS hantei
FROM test A
GROUP BY A.id ) AS SAB1
二個以上抜けがあったら、抜けの最小しかとれないけど
一応、例題には対応できるが・・・ひどいSQLだな・・・
637NAME IS NULL:2010/03/27(土) 22:52:52 ID:???
間違えた
SELECT
IF (MAX(SAB1.id) = hantei,MAX(SAB1.id)+1 ,MAX(hantei))
FROM
(SELECT
A.id,
MAX((SELECT COUNT(B.id) FROM test B WHERE A.id >= B.id)) AS hantei
FROM test A
GROUP BY A.id ) AS SAB1
638NAME IS NULL:2010/03/27(土) 23:38:43 ID:???
>>637
ありがとうございました。
639NAME IS NULL:2010/03/28(日) 06:19:22 ID:???
MySQLは5.1xを使っているのですがトランザクション処理がうまくいきません。

SET AUTOCOMMIT = 0;
BEGIN;
DROP TABLE TEST;
ROLLBACK;
SET AUTOCOMMIT = 1;

というSQLなのですが、DROPされてしまいます。

SET AUTOCOMMIT = 0;
SHOW VARIABLES LIKE 'AUTOCOMMIT%';
としたところAUTOCOMMITはONのままです。

開始の手順がおかしいのかと思い、
PHPのPDOから専用のbeginTransaction() rollBack() 関数を使って実行しましたが結果は同じです。
借りているレンタルサーバでも同じ状況になることを確認したのですが、
SQLがおかしいのでしょうか?
それとも何か設定が悪いのでしょうか?
どなたかお助けお願いします。
640NAME IS NULL:2010/03/28(日) 07:05:47 ID:???
DROPって暗黙のコミットではなかったっけ?
641NAME IS NULL:2010/03/28(日) 09:03:02 ID:???
TRUNCATEもROLLBACKできないから、
DROPもROLLBACKできなくて不思議はないと思う。

他のクエリはちゃんとROLLBACK出来ているという前提であれば、
DROPはROLLBACKできないということであっていると思う。
642NAME IS NULL:2010/03/28(日) 11:07:53 ID:???
そんなん当たり前やろ・・・。
643NAME IS NULL:2010/03/28(日) 11:52:43 ID:???
DDLがROLLBACKできない … Oracle、MySQL
DDLもROLLBACKできる … DB2、SQL Server、PostgreSQL

当たり前ではないのじゃよ
644639:2010/03/28(日) 15:15:48 ID:???
レス遅くなってすみません。
調べたところINSERT文でロールバックの説明をしているサイトがあったので、
おそらくINSERT文なら正常ならロールバックできると思い(あまりDB詳しくないので断定ですみません)、
DROPの代わりにINSERT文でやってみましたが結果は同じになりました。

PHPの話題はスレ違いになりますが一応コード出しときます。(エラー処理・例外処理などは省いてます)

PHPのmysql関数を使ってやる場合
$m = mysql_connect("localhost", "username", "password");
mysql_select_db("TEST_TABLE");
mysql_query("SET AUTOCOMMIT = 0");
mysql_query("BEGIN");
mysql_query("INSERT INTO TEST (NAME) VALUES ('HOGE')");
mysql_query("ROLLBACK");
mysql_query("SET AUTOCOMMIT = 1");
mysql_close($m);

PHPのPDOクラスを使った場合は、
$pdo = new PDO("mysql:dbname=TEST_TABLE;host=localhost;", "username", "password");
$pdo->beginTransaction();
$pdo->query("INSERT INTO TEST (NAME) VALUES ('HOGE')");
$pdo->rollBack();
$pdo = null;

どちらともコミットされてHOGEが登録されてしまいます。
PHP側に問題があるのかDB側に問題があるのかわからないのですがPHPスレで聞いたほうがいいでしょうか?
645NAME IS NULL:2010/03/28(日) 15:33:32 ID:???
コマンドラインかadminツールでやってみては
646NAME IS NULL:2010/03/28(日) 15:36:26 ID:???
つーかMyIsamとか?
647NAME IS NULL:2010/03/28(日) 15:54:45 ID:???
TESTテーブルをMyISAMで作ってるんだろうね
InnoDBで作り直そう
648639:2010/03/28(日) 16:14:07 ID:???
>>645
phpMyAdminでは一向にOFFにならなかったのですが、
コマンドラインからだとSET AUTOCOMMIT = 0;のあとにちゃんとOFFになりました。
しかしその後立て続けにクエリを実行していったところ、
mysql> BEGIN;
Query OK, 0 rows affected (0.00 sec)

mysql> INSERT INTO EXAMPLE (NAME) VALUES ('HOGE');
Query OK, 1 row affected (0.00 sec)

mysql> ROLLBACK;
Query OK, 0 rows affected, 1 warning (0.02 sec)

と、ロールバックのところでwarningが出てしまいました。
恥ずかしながらwarningの内容はどうやって出すのかわからないため出せません。
SELECTしてみたところやはりHOGEが反映されているようでした。

>>646
変数を確認したところstorage_engineはMyISAMとなってます。
649639:2010/03/28(日) 16:15:25 ID:???
>>647
どうもありがとうございます。
ストレージエンジンで色々変わるのですね。
早速作り方を調べて試してみたいと思います。
650NAME IS NULL:2010/03/28(日) 16:17:12 ID:???
MySQLはトランザクションがない
そんな風に考えていた時期が俺にもありました(AA略
651NAME IS NULL:2010/03/28(日) 16:30:38 ID:???
show warnings;

それから確認するのはサーバ変数ではなくて
show create table EXAMPLE;
の結果
652639:2010/03/28(日) 16:41:25 ID:???
ALTER TABLE EXAMPLE ENGINE=InnoDB
としたところうまくいきました!

>>651
EXAMPLEに対してはInnoDB、サーバ変数はMyISAMのままなのを確認しました。
show warningsも見ることができました。
大変勉強になります。どうもありがとうございます。

本当どうもありがとうございました。
653NAME IS NULL:2010/03/28(日) 18:51:10 ID:???
jikoku は TIME型、
今日の日付とデータベースの時刻から日時を作り出したいんだけど

SELECT ADDTIME( CURDATE(), jikoku ) FROM unko;
ってやったら 0000-00-00 00:00:00 になっちゃう。なんでだ?
654NAME IS NULL:2010/03/28(日) 20:04:39 ID:???
>>653
第1引数は、時刻型か日付時刻型だど。
655NAME IS NULL:2010/03/28(日) 20:43:55 ID:???
データを保持してるテーブルに対して、カラム名を変更したり型を変えると中身のデータはどうなるのでしょうか?
カラムを削除したらそのカラムに関するデータが失われるだけですか?
656NAME IS NULL:2010/03/28(日) 20:47:57 ID:???
>>655
ALTERでMODIFYしてる分には失われないよ
サイズとか種類とか変えるとそれにあわせて
欠損したりするけど大体はまあいける。
657655:2010/03/28(日) 21:02:27 ID:???
>>656
ありがとうございます。
データの型を変えてもデータが失われないというのは意外でした。
実は会社のデータベースをいじる業務を任されましてテーブルの型を変えるのが怖かったのです。
動作中のWebサービスのテーブル構造を変えるのはよく行われることなのでしょうか?
658NAME IS NULL:2010/03/28(日) 21:47:48 ID:???
型変更中はテーブルロックがかかりシステムが停止しますので、
行われません。

別のところできちんとテスト、リハーサルをして
データのバックアップを取って何が起こってもいいようにしてから
取り組みましょう。
659655:2010/03/28(日) 21:52:20 ID:???
おおなるほど…アドバイスありがとうございました。
カラムを変える時はバックアップ取って慎重に行うようにします。
660NAME IS NULL:2010/03/29(月) 04:19:42 ID:QIgYQPPM
mysqlのデータファイル(/var/mysql/*)のパーミッションを700にしています。
sudoでmyisamchkコマンドを実行すると、
File '/var/mysql/*/*.MYI' doesn't exist
と言われます。
sudoでなく、rootになって実行すると、このエラーは出ません。
挙動から考えるに、
sudoなのに、ファイルの検索が一般ユーザで行なわれているようです。
何故、こんなことになるのでしょうか?
661NAME IS NULL:2010/03/29(月) 05:06:35 ID:???
Bash等で、ディレクトリやファイルの引数リストを */*とかにした場合は、
コマンドに渡る前にbashが各ディレクトリ/ファイルに展開してからコマンドに渡す。
662NAME IS NULL:2010/03/29(月) 05:23:06 ID:???
質問させてください。
3つのフィールドfieldA,fieldB,fieldCがあるとします。
fieldAとfieldBはINT型です。
fieldC = fieldA +fieldB
としたい場合、fieldCはどのようにCREATEしたら良いでしょうか?
663NAME IS NULL:2010/03/29(月) 05:45:27 ID:???
>>661
そういうことだったのですか
ありがとうございました
664NAME IS NULL:2010/03/29(月) 07:16:26 ID:???
>>662
普通にint型としてCREATE。
デフォルト値として指定できるのは定数だけのはず。

計算はプログラム側でやるか、もしくはトリガ使いなはれ。
665NAME IS NULL:2010/03/29(月) 14:23:33 ID:???
テーブル考えるのも難しいね。
できるだけ幅広く対応できるようにリレーショナル組むと
ばっらばらで、どこに何のデータがあるのかわからなくなるし、一気に複数のテーブルを
読み込んで最終的にデータが重くなる。

かといってシンプルに組もうと思うとあとで拡張するのがしんどくなる。
テーブルの組み方もやっぱりセンスなのかな?

みんなはどう?
一度組んであーしとけばよかったー・・・って思うときある?
666631:2010/03/29(月) 14:41:24 ID:???
>>632
遅くなりましたが、ありがとうございました。
myodbc3.5.1とmyodbc5.1は別個にインストール出来たんですね。
667NAME IS NULL:2010/03/30(火) 08:49:39 ID:???
5.1.42 WinXP
my.iniで

[mysqld]
transaction-isolation = SERIALIZABLE

にしたんだけど、それが指定されたことってコマンドではどうやって確認出来ます?

show variables;

だと件数が多すぎて判らんっすw
668667:2010/03/30(火) 11:40:58 ID:???
自己解決


SELECT @@global.tx_isolation;
SELECT @@tx_isolation;

でできました
669NAME IS NULL:2010/03/30(火) 18:19:01 ID:???
会社のシステムのMySQLのパフォーマンス調査をしています。
ログを調べてみると大量のデータが入ったテーブルから
SELECT * FROM 〜〜〜 LIMIT 1
というSQLでデータを取得しているクエリがたくさんあったのが気になりました。
LIMIT 1という指定は対象テーブルに含まれるデータ量に関係なく
1件のデータを読むだけの処理になるのでしょうか?
あるいは重い処理になりますか?
670NAME IS NULL:2010/03/30(火) 18:41:12 ID:???
クエリーの重さはWhere次第、データ通信量は1件のみだから減る、でいいんじゃね?
671NAME IS NULL:2010/03/30(火) 19:02:27 ID:???
>1件のデータを読むだけの処理になるのでしょうか?

そうですよ。

ORDER BY併用のときはかなり軽くなる可能性。
最小値、もしくは最大値だけ算出されれば、後は何億件該当があっても関係無いはずだもんね。
672669:2010/03/30(火) 19:42:57 ID:???
回答ありがとうございました。すっきりしました。
違う箇所を調査してみることにします。
673NAME IS NULL:2010/03/30(火) 22:14:40 ID:???
>>669
slow ログと profile を有効活用すべし

version や環境によるけど一定時間 slowlog を 0秒にして、
全クエリを取得し、それを myslowdump で解析したら
改善すべきクエリが見えてきやすくなる。
# -s オプションの 「t: query time」 などを利用

0.1 秒程度だから大丈夫とか思ってるようなクエリでも、
それが全処理時間の 50% をしめるならば、そいつを半分の
時間で処理できるようにするだけで全体としては 25%稼げる。

クエリによっては半分にするのもそれほど大変じゃないしね。
674NAME IS NULL:2010/03/31(水) 07:13:38 ID:???
MySQLサーバに接続回数が何回あったとか確認する方法はありますでしょうか?
今アプリケーションを作っていて、
オーバヘッドを少なくするために、できるだけ接続回数を少なくして処理するよう組もうと思ってるのですが、
アプリケーション側の挙動(関数などの)がイマイチ理解できていないもので、
実際にどのくらい接続してるのか目で確かめることができれば、試行錯誤できるのですが、
FTPサーバのようにリアルタイムでユーザの接続状況がわかるような機能や、
外部アプリケーションがあったら教えてください。
675NAME IS NULL:2010/03/31(水) 12:38:46 ID:???
>>674
show global status;
を数秒おきに取得して差分を見る
676NAME IS NULL:2010/03/31(水) 15:15:03 ID:???
>>674

675 でも書いてあるけど
「show global status like 'Connections';」
でmysqld起動後の接続合計が出るのでそれの差分をとる。
うちでは、1分毎に cron で取得して秒で割ってグラフ化してる。
専用のAPIがあれば負荷やMax_Connectionなどを気にしなくていいので
もっとうまい方法考えるんだけど、恐らくない。

あとは、「show processlist;」をみれば現在の接続数がわかる。
677NAME IS NULL:2010/04/01(木) 01:31:57 ID:???
>>674
DTrace が使える環境なら connection-start プローブを拾えば
リアルタイムで観測出来るよ。

http://dev.mysql.com/doc/refman/5.4/en/dba-dtrace-ref-connection.html

DTrace は Solaris, Mac OS X, FreeBSD なんかで使えるので、
解析用に一台用意しておくと重宝します。
678674:2010/04/01(木) 02:25:00 ID:???
レス遅くなってすみません。

>>675-676
どうもありがとうございます。
早速その方法でテストしてみたいと思います。

>>677
どうもありがとうございます。
開発環境はWindows、本番環境もLinuxなのでちょっと無理ですが、
こういうのもあるんだということを今後のために頭に入れておきたいと思います。

レスくださったお三方ありがとうございました。
679NAME IS NULL:2010/04/01(木) 10:01:36 ID:???
>>677
あ、日本男児がいるぞ。
680NAME IS NULL:2010/04/01(木) 10:55:13 ID:???
違うってw
この間マニュアルを眺めてて発見しただけ。使ってみると便利だよ。
681NAME IS NULL:2010/04/01(木) 18:58:46 ID:???
root権のない共用レンタルサーバにおいてエンジンがイノデービーのテーブルのバックアップをとりたいのですが、
調べても停止させることが前提の記事が多く、
公式で停止させないで取れるツールみたいなのが紹介されてましたが、
有料な上リンクぎれだったりと、なかなか有用な情報にたどり着けませんでした。
そこで、
show tablesでテーブル一覧を取得後に、
show create table テーブル名で返ってきた値からSQLの部分を取り出したのをバックアップし、
select * from テーブル名(たくさんデータが入ってるテーブルはlimitをつけて分割して)で返ってきた値を、
insert文に加工したものをバックアップっていうように考えているのですが、おかしいですか?
もっと適切な方法がありますでしょうか?
682NAME IS NULL:2010/04/01(木) 20:31:30 ID:???
>>681
mysqldump で調べてみなはれ。
683NAME IS NULL:2010/04/02(金) 02:13:07 ID:fk2DP0Cs
DBのカラム名について聞きたいのですが、
cakephpに習って管理用カラムをidのauto_incrementとし、
英字のカテゴリ名と日本語のカテゴリ名を設定したいです。
以下のような感じにしようと思いましたが、keyが予約語なので、嫌な感じがします。
一般的に英字と日本語をひとつのテーブルに設定する場合、このようなカラム名にするといいよ
というのが、ありましたら教えて欲しいです。

create table category(
id int not null auto_increment primary key,
key varchar(10),
name varchar(20)
)
684NAME IS NULL:2010/04/02(金) 13:11:24 ID:???
データベースに追加するだけの関数をマルチスレッドにしても問題ない?
685NAME IS NULL:2010/04/02(金) 16:32:09 ID:???
>>683
keywordにでもしてしまえば?

この辺で聞くのもアリか
http://pc12.2ch.net/test/read.cgi/tech/1268053104/
686NAME IS NULL:2010/04/04(日) 11:28:12 ID:???
select flag, count(*) as ct from table group by flag;
でflagでグループ分けした件数をctで取得できるんですが、このctが3以上の結果のみを出そうと、where句にctを使うとエラーになります。
どうすればやりたいことができるでしょうか?
687NAME IS NULL:2010/04/04(日) 13:31:08 ID:???
>>686
having
688NAME IS NULL:2010/04/04(日) 18:34:15 ID:EfdzWcJ/
blob型に整数を入れるにはどうしたらいい?
バイナリーだからそのままでいいと思ったけど1を入れてhexで16進表示させたら31になったから文字列扱いされてるっぽい
689NAME IS NULL:2010/04/05(月) 12:13:06 ID:???
>>688
どうやって入れたの?
690NAME IS NULL:2010/04/06(火) 01:42:07 ID:xi7G4+Bq
会社のシステムのMySQLを運用して3ヶ月になります。
一つのDBサーバで4つのサービスを動かしているため、かなり負担がかかっています。
状況改善を指示されたため自分なりにネットで調べたところ、レプリケーションを行うのが良さそうだという結論になりました。

しかし、サーバをいじる経験が乏しい上、データベース自体の経験も3ヶ月です。
レプリケーションを行うことで既存のデータが壊れてしまうのがとても怖いです。

サーバを追加してレプリケーションを行うのは、素人に毛が生えたような技術者でも行える作業でしょうか?
あるいはリスクがあるのであれば他の対処法を教えていただけないでしょうか。

宜しくお願いします。
691NAME IS NULL:2010/04/06(火) 03:30:31 ID:???
クエリーやサーバーのチューニングは十分行っているのかな
重い原因は判ってる?
レプリケーションしても参照系しか分離出来ないよ
5、6台並べてClusterとかもあるけど、ベンダー呼んだ方が良い
単純にサーバーのメモリ増やすだけでも良いかもしれないし
マスターを複数にすると同期処理が面倒だし
そもそも、業務アプリ自体の改修が可能なのかな
692NAME IS NULL:2010/04/06(火) 03:39:47 ID:???
ストレージ負荷とかメモリ負荷とかCPU負荷とかまず調べないとわからんちん

下手にレプリするより、より強力なサーバーに適切なチューニングして動かしたほうがいいんでねーの?
693NAME IS NULL:2010/04/06(火) 08:57:13 ID:???
1つのサーバで4つのサービス動かすのやめて
2つないし4つのサーバで動かせばいいじゃん
レプリケーションいらないじゃん
694690:2010/04/07(水) 01:24:40 ID:???
アドバイスありがとうございます。

>>691
>>692
重い原因は分かっておりません。
1日のページビューが4つ合わせて20万ぐらいなのですが、
マシンの性能はかなりハイスペックなのでどうして重くなってしまうのかが分かりません。
4つのサービスのうち2つが重くて残りの2つは快適に動くのが不思議なんです。
とりあえずレプリケーションは大変そうですね。
頂いたアドバイスを考慮すると時期早々な気がするので違う方法を考えてみることにします。

>>693
ごもっともなのですが、サービスは絶対に止めるなと言われてるのでデータ移行するのは少し怖いですね
695NAME IS NULL:2010/04/07(水) 02:06:29 ID:???
どういった対策をするにしても、まず重い原因を調べるのが先だろう
696NAME IS NULL:2010/04/07(水) 04:46:19 ID:???
・・・負荷が何にかかってるか調べるのが先でねーのw
697NAME IS NULL:2010/04/07(水) 04:50:21 ID:???
>>694
mrtgなり何なりでサーバーのハードウエア負荷状態を調べる。
slowqueryを調べる

あとサーバーの構成も晒してみたら?
698NAME IS NULL:2010/04/07(水) 09:40:27 ID:???
MySQLにinsertしたはずのレコードが入っていないという現象が
時々起こります。

具体的には、ブラウザからFORMで10個ほどの自然数のデータを送り、
PHPで、データ処理をして正誤を表示します。
送った10個のデータは、ひとつのレコードとしてMySQLに格納します。

通常は正常に動作しますが、一見正常に動作しているように見えて、
データベースに、この10個のデータのレコードが残っていないことがあります。
60〜70回やって3回起こりました。

特にエラー表示などはなく、ブラウザには結果が正常に表示されます。
また、同時にデータベースとは他のやり取りもしており、これらも正常に動作し、
そのレコードも残っているので、データベースとの接続には問題ないようです。

このようなことはよく起こるのでしょうか?
対策としてinsertしたデータを、MySQLから再度呼び出して確認するなどの
機能を加えた方が良いのでしょうか?
699NAME IS NULL:2010/04/07(水) 09:58:56 ID:???
トランザクションにしててコミットしてないんじゃ?
700698:2010/04/07(水) 12:34:25 ID:???
いえ、トランザクションにはしていません。
ごくごく単純なシステムです。

大抵は順調に動作しています。
たまにレコードの挿入だけがされていないという現象です。
701NAME IS NULL:2010/04/07(水) 15:19:09 ID:???
sqlが発行されてないだけとかじゃない?
sql自体をログに取ってちゃんとinsert分が発行されてるかとか
702NAME IS NULL:2010/04/07(水) 23:00:57 ID:???
「ひとつのレコードとして」
「一見正常に動作しているように見えて」
「結果が正常に表示されます」
説明が具体的でないから、何をどうして何が起きたのかさっぱりわからん。
703NAME IS NULL:2010/04/08(木) 02:23:29 ID:???
698は包茎なんだよ。許してやれよ。
704NAME IS NULL:2010/04/08(木) 23:02:25 ID:???
>>698の作り込んだバグだよ。
一見うまくいっているように見えるのは
INSERTしたときの情報を表示しているからだ。
705NAME IS NULL:2010/04/10(土) 11:46:19 ID:???
アホな質問ですみません

windows版のmmeasureみたいな監視ツールってあるでしょうか。

centosにでもすりゃいいんですがパソコンが一台しかなく、既にブログなどを実運用してるので…
706NAME IS NULL:2010/04/10(土) 16:42:30 ID:???
VMwareを入れてCentOSを入れて
その中にmMeasureを入れて、
WindowsのMySQLを監視するというのができそう
707NAME IS NULL:2010/04/10(土) 20:53:48 ID:???
>>706
そう来たか…

っていうかムリだと思います。
出来てもやりたくありません。
708NAME IS NULL:2010/04/11(日) 19:23:10 ID:???
中学生の君か
子犬を飼うのがいいと思うんだけどな
結果的にvmware入れるのと変わらないが
709NAME IS NULL:2010/04/12(月) 16:51:22 ID:???
cygwinならきっとやってくれる
710NAME IS NULL:2010/04/12(月) 23:17:50 ID:???
MySQLがオラクル社のものに・・・
ってところは意外と話題にならないんだな
日本人は寛容だねえ
711NAME IS NULL:2010/04/12(月) 23:33:45 ID:???
何を今更・・・
712NAME IS NULL:2010/04/13(火) 01:49:43 ID:???
近年稀にみる情弱
713NAME IS NULL:2010/04/13(火) 02:51:41 ID:???
まだまだこれから!の話題だけどね
ttp://www.itmedia.co.jp/enterprise/articles/1004/12/news047.html
714698:2010/04/13(火) 11:03:22 ID:???
色々アドバイスを頂きまして有難うございます。

対策としてinsertしたデータを、MySQLから再度呼び出して確認する機能を
加えて運用していたのですが、同じ問題が出ました。
そして、ある特殊なケースにこの問題が発生することがわかり、>>704さんの
仰るようにバグでした。
MySQLのカラムでINT型を指定しているカラムに文字列をインサートしようと
した時に、レコード全体がインサートされていませんでした。

直接SQL文で、MySQLのINT型を指定してあるカラムに文字列を
インサートした場合には自動的に0が入力されるのですが、
WEB上のPHPからMySQLにインサートした場合にはレコード自体が
インサートされないようです。このことで解明に時間が掛かりました。

このあたりのMySQLの挙動の違いについて調べていますが、あまり出てきません。
参考になるものがありましたらアドバイスをお願い致します。
715NAME IS NULL:2010/04/13(火) 12:19:22 ID:???
>>714
データの保証やサニタイズは、
アプリケーションでしっかり実装するべき。
716698:2010/04/13(火) 12:29:16 ID:???
>>715
そうですね。
MySQL mode について調べているのですが、なかなか出てこないのは、
アプリケーションでしっかりやっていれば、モードの違いは
関係ないからなのかも知れませんね。
717NAME IS NULL:2010/04/13(火) 23:18:27 ID:L+sC4y4n
varchar(255)のカラム2つ+varchar(10)のカラムに複合インデックスを張ろうとしたのですが、エラーでmax key lengthは1000byte以下でないとダメと言われてしまいました。
255x2+10でもだめなんでしょうか?
718NAME IS NULL:2010/04/13(火) 23:41:56 ID:???
すみません、超初心者なんですが、質問させてください。

デッドロックが発生した場合って
1.サーバーを再起動する
2.MySQLのkillコマンドでスレッドを潰していく

以外に、復旧する方法ってあるんでしょうか?
719NAME IS NULL:2010/04/13(火) 23:53:36 ID:???
MySQLだってデッドロック検出くらいあるだろう。
デッドロックを起こしたトランザクションの一方(あるいは両方)が一定時間後に
ロールバックされる。
720NAME IS NULL:2010/04/14(水) 00:43:14 ID:???
>>717
charset utf8 とか sjis にしてないか?
binary か ascii で試してみ。
721NAME IS NULL:2010/04/14(水) 03:29:52 ID:???
INT型のカラムに文字列をつっこんでおいてバグ呼ばわりか・・・

雑なPGとは付き合いたくないな
722NAME IS NULL:2010/04/14(水) 09:37:07 ID:???
SQLiteならきっとなんとかしてくれる
723NAME IS NULL:2010/04/14(水) 10:16:12 ID:???
SQLiteは実質型ないだろ
724718:2010/04/14(水) 23:43:48 ID:???
テーブルの使い方が悪いのか
デッドロックが発生するとずっとロックがかかったままになって
ロールバックしてる気配がない orz
725NAME IS NULL:2010/04/14(水) 23:47:37 ID:???
>>721
バグ以外になんと呼べばいいんだ
726NAME IS NULL:2010/04/14(水) 23:55:07 ID:???
>>725
はぁ?
頭大丈夫か、お前?
727NAME IS NULL:2010/04/15(木) 01:36:33 ID:???
>>725
更にこ〜ゆ〜のが存在するとはね
レベル低いのぉ
728NAME IS NULL:2010/04/15(木) 05:01:48 ID:???
>>724
MySQLはデッドロック発生時に自動でロールバックする。
(ちなみにOracleはロールバックしない)

なので、何か勘違いしていると思われます。
729NAME IS NULL:2010/04/15(木) 18:36:34 ID:???
>>725
ここはMySQLスレ
intに文字列を突っ込もうと言うバグがあるのは>>698のプログラム
判る?
730NAME IS NULL:2010/04/15(木) 20:07:34 ID:???
>>725
DB関連扱うなら、サニタイズとかXSSやSQLインジェクションとかプレースフォルダとかプリペアドステートメントとか
ちゃんと覚えてからやらないと、バグ作り込むことになるよ。
731NAME IS NULL:2010/04/15(木) 21:31:31 ID:???
誰も「MySQLのバグ」なんて言ってないのに。
そんな勘違いする奴が一気に大量発生するのは不自然すぎるよ>>721
732NAME IS NULL:2010/04/15(木) 21:33:34 ID:???
今のところ「>>704さんの仰るように」が分からん
日本語会話の駄目なのが三匹くらい?
733NAME IS NULL:2010/04/15(木) 21:44:49 ID:???
全部同じ人じゃないの
俺にはそう見える
734718:2010/04/15(木) 21:56:27 ID:???
>>728

デッドロックじゃないかもしれないんですが
私が現在調査しているのが

ロックをかけていたセッションがロックを解除しないまま死んで
ロールバックせずにロックが掛かったままになっている・・・・・・
んじゃないかみたいな現象が起きていまして

何かコマンド叩いて、ロックの原因が分からないかだとか
何かコマンド叩いて、簡単に復旧しないかだとかです。

ネットの検索も色々とやっていますが、いまいち今回の内容に合致する
ものがHITしないです。
735NAME IS NULL:2010/04/15(木) 22:58:59 ID:???
そりゃ解決しないわ。「デッドロックの質問」に答えた人もずっこけてるんじゃないの?
で、そのロックは本当にかかっているの?どうやって現象を確認したのか具体的に
書いた方がいいよ。
736NAME IS NULL:2010/04/16(金) 00:04:51 ID:drrcR7JB
MySQLでデータを汎用的な形に持つことって可能でしょうか?

自端末のMySQLで作った数百メガバイトのDBデータを
レンタルサーバーのMySQLでも使用したいんですが、初回コピー時は大量のInsertをしないと
いけないためあまりやりたくない(無理)です。


ですので汎用的な形にしてレンタルサーバーにコピーしたいのですが
方法ってありますか?
737NAME IS NULL:2010/04/16(金) 00:11:08 ID:???
>>736
すべてのデータを文字列とみなす。
738718:2010/04/16(金) 01:09:21 ID:???
>>735

説明が下手で申し訳ないのですが・・・
Aの画面を操作する時はCのテーブルを使用します
Bの画面を操作する時もCのテーブルを使用します

別々の所からのアクセスでAとB画面から同時にCのテーブルを扱っているようなのですが
(どちらかは待ち状態になってたと思います。)
見た目上は両方操作が正常に終了している感じなのですが
トランザクションの開始はログに出ているのですが終了は出ておらず
ロックがかかりっぱなしの状態になり、以後Cのテーブルを使う操作をすると
タイムアウトになっている感じです。

739NAME IS NULL:2010/04/16(金) 01:15:35 ID:???
>>738
永続的な接続をしてんのにロックしてるんじゃね?
740NAME IS NULL:2010/04/16(金) 01:42:17 ID:???
>>731
INTに文字列つっこんでる時点で十分マスケだろうが
741NAME IS NULL:2010/04/16(金) 04:58:39 ID:???
>>736
mysqldumpでぐぐるんだ
742NAME IS NULL:2010/04/16(金) 06:39:43 ID:???
>>736
汎用的な形ってどういうのよ?

SELECT〜INTO OUTFILE でCSVにでもして、
そのCSVをレンサバにFTPででも上げて、
CSVエンジンで使うとか?

レンサバでCSVエンジンが使えるかどうかは知らないけど。
743NAME IS NULL:2010/04/17(土) 10:29:32 ID:???
フルテキストインデックスについて質問です。

例えば (id, text) といったカラムを持つテーブルで
id >= 100 AND id < 200
の行において text に含まれる単語の出現頻度を得ることは可能でしょうか。

text は適宜分かち書きされた文書でフルテキストインデックスが貼ってる
仮定で
2ch 128
もなー 256

みたいな結果を得る方法があれば教えてください。
744NAME IS NULL:2010/04/17(土) 12:01:12 ID:???
出現頻度を得たい語を指定したSQLでいいの、全域スキャンしてとにかく全部の語についての
頻度一覧を得たいのか。
745NAME IS NULL:2010/04/17(土) 13:40:54 ID:???
>>744
頻度ランキングなどに利用したいので単語は指定しない SQL です。
なので、どちらかというと後者。
746NAME IS NULL:2010/04/17(土) 23:29:49 ID:zyaLhyEY
初歩的な質問ですみません
バックアップからリストアしようとしている途中で
「ERROR 2013 (HY000) at line 353: Lost connection to MySQL server during query」のメッセージが出て中断されます。

何かいい方法はないでしょうか?
/etc/my.cf では
[mysqld]
max_allowed_packet = 16M に設定しています。
747NAME IS NULL:2010/04/18(日) 00:17:57 ID:???
>>746
そのデータベースって超でっかい?
748NAME IS NULL:2010/04/18(日) 18:36:01 ID:???
すごく…大きいです…
749NAME IS NULL:2010/04/18(日) 23:20:42 ID:???
じゃあ腹ん中がパンパンになったか、タイムアウトしたかのどっちかだな
750NAME IS NULL:2010/04/19(月) 11:42:32 ID:???
おなかの中でパンパンに大きくなっちゃうと、大変ですよね・・・
少しずつ抜くしかないかも
751NAME IS NULL:2010/04/19(月) 23:36:06 ID:???
ローカルのphpMyAdminでテーブルを作成する時にテーブル名を
大文字で入力し作成しているのですが、
テーブルを作成し終わるとなぜか小文字になってしまってます。
何が原因でしょうか?

※Windows Vista
752NAME IS NULL:2010/04/20(火) 00:43:31 ID:???
質問させてください

SQL文の文末についてですが  〜';で終わらなければいけないところを
                     〜':"; こんな感じで書いていたところがありエラーログが出ていました


・・・・が、正常にSQL文が実行されているようなのですが、これはMySQLの親切機能みたいなものなのでしょうか?


適当なSelect文の文末を↑みたいにわざと間違えて実行したところエラーのウィンドウは表示されますが
その後正常にSqL文が実行されるのを確認しました。
753NAME IS NULL:2010/04/20(火) 05:54:59 ID:???
>>751

ttp://dev.mysql.com/doc/refman/4.1/ja/name-case-sensitivity.html
>データベースとテーブルは、ディレクトリとそれらのディレクトリ内のファイルに対応しています。
>そのため、ベースとなっているオペレーティングシステムで大文字と小文字が区別される場合
>(ケース依存)、データベース名とテーブル名でも大文字と小文字が区別されます。
>つまり、Windows ではデータベース名とテーブル名で大文字と小文字は区別されず
 :
> この問題に対処する 1 つの方法は、mysqld の先頭に -O lower_case_table_names=1
>を付けることです。このオプションのデフォルトは Windows では 1 で、Unix では 0 です。
>lower_case_table_names が 1 の場合、MySQL では、保管およびルックアップ時にすべての
>テーブル名が小文字に変換されます
754NAME IS NULL:2010/04/20(火) 19:07:20 ID:???
phpMyAdminの話で申し訳ないがちょと質問

フィールドの順番を変えたいのですが
どうやるんでしょうか?
フィールドを追加していったらよく見る必要なフィールドが画面外に orz

フィールドの後に追加というのはわかりましたが
「構造」やら「操作」を見てもそれらしいものが見あたらず…
755NAME IS NULL:2010/04/20(火) 19:15:04 ID:???
順番入れ替えるのは無かったはず。テーブル作り直しするしかないんじゃない?
756NAME IS NULL:2010/04/20(火) 19:53:56 ID:???
>>754
SQLを直接書いたら何とか。
ALTERしてUPDATEしてALTERしたら。
757754:2010/04/20(火) 20:18:38 ID:???
レスサンクス。

phpMyAdmin上で一発では無理なのね。
756さんのようにコマンドで変えるか
755さんのように作り替えするか。
758NAME IS NULL:2010/04/20(火) 20:45:20 ID:???
小手先でやるなら、新しいフィールドを作ってから、

update table set newfield=oldfield
してから、古いフィールド削除して、フィールドのリネームなのかな?

※バックアップは忘れずに。
759754:2010/04/20(火) 21:19:26 ID:???
ああ、そっか、そういう手があるか、頭良いな〜。

エクスポートしてコピペしようかと思ってたw
760NAME IS NULL:2010/04/20(火) 21:37:56 ID:???
http://dev.mysql.com/doc/refman/4.1/ja/insert-select.html
INSERT INTO SELECT でもいけるんでね?
761NAME IS NULL:2010/04/20(火) 21:39:07 ID:???
ビュー作ればよくね?
762NAME IS NULL:2010/04/20(火) 21:44:58 ID:???
Accessでリンク貼って好きに並び替えればよくね?
763NAME IS NULL:2010/04/22(木) 13:25:49 ID:qCWVP7Km
SQL文のUPDATEで「飲食店 あいうえお」となっているレコードを
「あいうえお」だけに更新したいのですが、SQL文だけで出来ますでしょうか?
出来る場合は、SQL文のアドバイスをお願いします。
764NAME IS NULL:2010/04/22(木) 14:54:01 ID:???
UPDATE テーブル SET カラム = RIGHT(カラム, CHAR_LENGTH(カラム) - LOCATE(' ',カラム));
ただの思いつき、検証なし、ダメモトで。
765NAME IS NULL:2010/04/22(木) 16:02:00 ID:Jt63om4K
質問ですみません。

PerlでDBIを使用しMySQLを使用しているのですが、Perlから
何かしらのコマンドを送り、そのプロセス(プログラム内)で
のみ指定の日時でどうさせるようなことは不可能でしょうか。

たとえば「set names ujis;」とプログラムから送信すると、
そのプロセス内でのみEUC文字列の扱いが優先される形と
なりますが、これと同じように時刻情報も操作できない
ものかと思っております。

よろしくお願いいたします。
766NAME IS NULL:2010/04/22(木) 16:07:56 ID:???
forkするとか
767NAME IS NULL:2010/04/22(木) 16:21:18 ID:???
具体的に何がしたいのか書いた方が解決策出やすい気がする
768NAME IS NULL:2010/04/22(木) 17:03:21 ID:???
ご返答有難うございます。

20個くらいnow()で指定されているプログラムがあり、日付を
好きなように遡って検証したいといわれたのですが、
これらを変更しないでどうにかできないかと思い質問させて
いただいた次第です。

よろしくお願いいたします。
769NAME IS NULL:2010/04/22(木) 17:58:02 ID:???
変更しない、というのはプログラムに埋め込んだSQLのこと?
データ変更していいなら直接SQL叩くとか

時刻はOSで1つのグローバルな場所から都度持ってくるから
プロセス内だけというのは難しいかも、OS次第かもしれないけど。
770NAME IS NULL:2010/04/22(木) 19:41:00 ID:???
スクリプトコピって、now()の代わりに適当な値渡すように書き換えれば?
771NAME IS NULL:2010/04/22(木) 20:31:21 ID:???
それはperlの範疇だなぁ

sub now {return time; }
*main::now = sub( reutrn 1; );

もしくは
*CORE::GLOBAL::time = sub { return 1; };

もしくは
use subs qw( time );
sub time { return 1; };

で関数を上書きすれ
テストの基本だべ
772NAME IS NULL:2010/04/23(金) 15:51:17 ID:SnyNKn8S
商品(shouhin_id)ごとに情報が入っているテーブルから
各商品ごとの最新情報10件以降を消したいのですがどうすればいいでしょうか?

残したいデータ
select * from data where shouhin_id=1 order by update desc limit 10;

shouhin_id=1の部分はたくさんあります。(shouhin_id=2,3,4,5,6...)
これはループでまわします。

それ以外を消すにはどうしたらいいでしょうか?
773NAME IS NULL:2010/04/23(金) 16:12:07 ID:???
最新情報10件のテーブルを作ってください
774NAME IS NULL:2010/04/23(金) 16:59:34 ID:???
ほんとだ難しい
思いつかんかった
775NAME IS NULL:2010/04/23(金) 18:31:03 ID:???
delete from data id NOT IN (select id from data where shouhin_id=1 order by update desc limit 10);

これは動かないでしょうか、検証してないけど。
776NAME IS NULL:2010/04/23(金) 18:32:31 ID:???
delete from data where id NOT IN (select id from data where shouhin_id=1 order by update desc limit 10);

whereが抜けてた。
777NAME IS NULL:2010/04/24(土) 01:51:50 ID:+dWDx83M
バイナリログって全部保存しておくものですか?
尋常じゃない量になりそうなんですが
778NAME IS NULL:2010/04/24(土) 02:05:55 ID:???
バイナリログなんて取ったこと無いわ
779NAME IS NULL:2010/04/24(土) 02:17:48 ID:???
バイナリログの定番の運用法ってよく分からないよね。
バックアップ取ったら定期的に purge するもんだと思ってるけど。
780NAME IS NULL:2010/04/24(土) 03:59:35 ID:???
my.cnfで設定すれば勝手に消してくれるよ
781NAME IS NULL:2010/04/24(土) 08:45:29 ID:???
レプリケーションのために取ってる。だから、すぐ捨ててる。
782NAME IS NULL:2010/04/24(土) 10:18:50 ID:???
my.cnfで寿命を1日くらいに設定しているということでしょうか
レプリケーションに失敗した時の巻き戻しに
バイナリログはなくてもOKですか?
783NAME IS NULL:2010/04/24(土) 10:27:31 ID:???
レプリケーションなしの場合は、バイナリログというのは
フルバックアップを取った時点から現在までロールフォワードするためのもの。

フルバックアップを3世代取るとして
4/04 フルバックアップA取得
4/11 フルバックアップB取得
4/18 フルバックアップC取得、4/03までのバイナリログを削除
4/25 フルバックアップA取得、4/11までのバイナリログを削除
...

って運用する。
Oracleなら普通だけど、まあMySQLでここまでやってるのは見たことないな。
784NAME IS NULL:2010/04/24(土) 12:29:56 ID:???
フォームからチェックボックスで趣味を複数選択した時の事で質問なんですが
ID 名前 性別 趣味
001 aさん 男 音楽、ドライブ、映画
005 bさん 女 料理、読書、音楽
こういった場合下のように趣味のテーブルを分けて
foreachでデータを入れるのが一般的なんでしょうか?
ID 名前 性別
001 aさん 男
005 bさん 女

ID 趣味
001 音楽
001 ドライブ
001 映画
005 料理
005 読書
005 音楽

なんだか冗長に見えるけどあってます?
785NAME IS NULL:2010/04/24(土) 13:19:29 ID:???
大体あってる。
が、一時的に最初の形のテーブルに入れといて、
後でバッチ処理で正規化する場合もある。
786NAME IS NULL:2010/04/24(土) 14:57:43 ID:???
>>785
レスどうもです。
DBほとんど弄ったことがなかったので助かります。
ありがとうございました。
787NAME IS NULL:2010/04/24(土) 15:51:41 ID:???
foreachするならデリミタが指定できるんで最初の形のテーブルでもいいんじゃないのかな。
趣味マスタとか作らないんなら、使うときにexplodeするとかのがコードが簡単かもしれんね。
ただ、ボリュームや優先順位、用途を知らんから何とも言えんけど
788NAME IS NULL:2010/04/25(日) 15:39:27 ID:???
mysql+php(Vertrigo)で蔵書のデータベース作ろうと思ってるんだけど
小説とか雑誌とか単行本とか参考書とかで必要な列が違うんだけどこういう場合それぞれテーブル分けるべき?
それとも被ってるところもあるしnull値OKにしてひとまとめにした方がいいですかね?
後者の場合は必要なデータだけPHP側で表示させる感じで
データは多分1万レコードくらいで検索とかも出来るようにしたいんだけど
789NAME IS NULL:2010/04/25(日) 17:29:15 ID:???
その前に、検索出来ないRDBがあるのかどうか聞きたいね
790NAME IS NULL:2010/04/25(日) 17:36:56 ID:???
プライベート用と考えて、俺なら分けないけど人それぞれだからなぁ。
分けない場合も後で本の種類が増えて行く時が不便だから、極力被らない列を減らす努力がいるな。
何入れてもいい列をつくって共通化を図るとか。
テーブルを分けると後で本の種類が増える度にテーブルの追加+PHPのコードまで書き換えになるからなぁ。
どっちでもいいっちゃどっちでもよさそうだけどね。
791NAME IS NULL:2010/04/25(日) 18:13:28 ID:???
>>790
なるほどdクス
これぐらいのレコード数ならクエリ複数発行しても大して速度変わらないかな
管理しやすそうですしテーブル分けて作ってみようと思います
792NAME IS NULL:2010/04/25(日) 18:33:50 ID:???
すべての共通項目を持ったテーブルをまず一つ作ってだな
793NAME IS NULL:2010/04/25(日) 20:00:30 ID:???
書籍 (書籍ID, 書籍名, ISBN)
属性 (属性ID, 属性名)
書籍属性 (書籍ID, 属性ID, 属性値)

属性テーブルには著者名、出版社名、値段、備考、などを入れる
794NAME IS NULL:2010/04/25(日) 22:17:49 ID:???
AUTO_INCREMENTなカラムを主キーにせずに作る方法って無いかな。

REPLACE INTO 〜 を使うときに、別のユニークキーを使ってるんだけど
念のため飾りで通し番号もほしいときにどうしたらいいかわからんです。
795NAME IS NULL:2010/04/26(月) 04:51:37 ID:???
すみません、質問です。

order by type asc, rand()

このような並び替えルールを設定した場合、
typeの照準でまず並び替え、そのあとランダム
にしているのでしょうか。
796NAME IS NULL:2010/04/26(月) 08:15:48 ID:???
はい、そうです
797NAME IS NULL:2010/04/26(月) 09:59:52 ID:???
そのあとっつーか、同じ順位の物同士がランダム
798NAME IS NULL:2010/04/27(火) 17:55:00 ID:???
>>797
そんなことできるんだ! ありがとう
799NAME IS NULL:2010/04/27(火) 19:56:37 ID:???
おかしな質問かもしれませんが、
テーブルAを参照している他のテーブルを知ることはできますか?

次のような状態に陥っています。
1.テーブルAを作成
2.外部キー制約によりAを参照するテーブルBを作成
3.テーブルBを削除(DROP TABLE)
4.テーブルAを削除しようとするとエラー
ERROR 1217 (23000): Cannot delete or update a parent row: a foreign key constraint fails

説明のためAとBを連続して作成していますが、実際には別々に作成しており、
どこか別のテーブルから参照されているのではないかと考えてるのですが・・・
よろしくお願いします。
800NAME IS NULL:2010/04/27(火) 21:13:35 ID:???
>>794

もしかして、レコードがあったらアップデート、無ければインサートをやりたいのかな?

直接的な回答じゃないが、自分はカラムにUnique制約付けて、

insert〜
on DUPLICATE KEY UPDATE〜

ってやってる。パフォーマンスはこの方が良さそうなもので。

期待値が違ってたらごめん、無視してくだされ。
801NAME IS NULL:2010/04/27(火) 22:10:34 ID:???
>>799
人間が目で見て確認というので良いなら、
全テーブルに、「show create table テーブル名」で
テーブルAへ外部キー参照してる奴が見つかるでしょう。
802NAME IS NULL:2010/04/28(水) 00:36:59 ID:???
>>800
いや、あろうがなかろうがUPDATEする って感じのイメージなんだけど
そのときに、触ってないカラムはそのままにしたいんだよね
803NAME IS NULL:2010/04/28(水) 00:38:11 ID:???
いや、違う!勘違いしてた!
>>800の方法で解決だ!うっかりしてた!この手があったか!
804NAME IS NULL:2010/04/28(水) 00:38:54 ID:???
あ、ダメかも。ちょっと実験してみる。
805800:2010/04/28(水) 01:36:41 ID:???
>>804

試してみてくらはい。
ちなみに自分のコードは↓こんな感じ。

INSERT INTO テーブル (`user_id`, `col1`, `col2`)
VALUES ("user001","$val1","$val2")
ON DUPLICATE KEY UPDATE `col1` = "$val1", `col2` = "$val1"

テーブルは
CREATE TABLE `テーブル` (
`id` int(11) NOT NULL auto_increment,
`user_id` varchar(32) NOT NULL,
`col1` varchar(64) NOT NULL,
`col2` varchar(64) NOT NULL,
UNIQUE KEY `unique_key` (`user_id`,`col1`)
) ENGINE=InnoDB DEFAULT CHARSET=sjis;

これだと、`user_id`,`col1`のユニーク制約に引っかからない場合はINSERT、制約に引っかかる場合はUPDATEが走ります。

http://dev.mysql.com/doc/refman/5.1/ja/insert-on-duplicate.html
806NAME IS NULL:2010/04/28(水) 01:38:55 ID:???
select * from information_schema.referential_constraints;
でおk
807NAME IS NULL:2010/04/28(水) 04:17:54 ID:???
DBサーバを冗長化する方法を調べています。
・トランザクションの開始と終了を同期させる。
・1つのDBに対して複数のトランザクションを同時に
実行しない (そもそもできるのかよく分かってないのですが…)
これで2つのDBの内容を同期できると考えているのですが
そういうわけでもないのでしょうか?
よろしくお願いします。
808NAME IS NULL:2010/04/28(水) 08:00:04 ID:???
SELECT * FROM `information_schema`.`TABLE_CONSTRAINTS` WHERE `CONSTRAINT_SCHEMA` = 'DB名';
809NAME IS NULL:2010/04/28(水) 13:31:19 ID:???
質問よろしいでしょうか。
MySQLのバージョンは5.1系を想定しています。

「複数のテーブル全てにおいてユニークなID」を発行したいのですが、良い方法をアドバイスお願いします。
現在は
「ユニークIDカウントテーブル」を作り、
UPDATE tbl_id_counter SET id = id + 1;
SELECT id FROM tbl_id_counter WHERE 1;

こんな感じでIDを発行しようとしています。
tbl_id_counterテーブルにはレコードは1つしかありません。

この方法ですと、UPDATEとSELECTの間に他のユーザーのUPDATEが入ると、取得するIDが重なってしまう危険性があります。
LOCKすれば良さそうなのですが、他に何かより良い方法はありますでしょうか?

「UPDATEするとともに結果を取得する方法は無いものだろうか?」
というのが、現在自分が思いつくアイデアです。
810NAME IS NULL:2010/04/28(水) 15:07:20 ID:???
811NAME IS NULL:2010/04/28(水) 17:02:17 ID:???
サーバのメモリ周りに関する質問です。
メモリの確保が思った以上におおくて、スワップアウトが発生してしまいます。
メモリの計算を何か間違えているでしょうか?
実メモリは8GB、mysql単で動いているサーバです。
下記はmymemcheckの結果を抜粋したものです。
OSはFreeBSD7.2-R amd64、mysqlは5.1.45を使用しています。
--- topの結果の一部 --- (mysqldの再起動直後で、時間がたつとswap使用率が98%とかになります)
Mem: 5856M Active, 863M Inact, 629M Wired, 406M Cache, 399M Buf, 40M Free
Swap: 2048M Total, 61M Used, 1987M Free, 2% Inuse

PID USERNAME THR PRI NICE SIZE RES STATE C TIME WCPU COMMAND
83172 mysql 2713 44 0 16302M 5902M ucond 1 0:04 4.05% mysqld

--- mymemcheckの結果の一部 ---
min_memory_needed = global_buffers + (thread_buffers * max_connections)
= 7240417280 + 65536 * 3000
= 7437025280 (6.926 [G])

[ 32bit Linux x86 limitation ]
ref
* http://dev.mysql.com/doc/mysql/en/innodb-configuration.html

* need to include read_rnd_buffer.
* no need myisam_sort_buffer because allocate when repair, check alter.

2G > process heap
process heap = innodb_buffer_pool + key_buffer
+ max_connections * (sort_buffer + read_buffer + read_rnd_buffer)
+ max_connections * stack_size
= 6291456000 + 402653184
+ 3000 * (8192 + 8192 + 8192)
+ 3000 * 262144
= 7554269184 (7.035 [G])

2G > 7.035 [G] ... LIMIT OVER!!
812NAME IS NULL:2010/04/28(水) 17:45:42 ID:???
>>810
ありがとうございます。
LAST_INSERT_IDに引数が渡せるとは知りませんでした。
こちらを利用させていただきます。
813NAME IS NULL:2010/04/28(水) 19:17:50 ID:???
質問させて下さい。

テーブルAは連番IDでログのように記録しています。
重複するデータがたくさんあります。

テーブルBは、テーブルAの要素の補完のようなもので、タグ付けを行っています。

テーブルBから、指定したタグ「small」と一致するレコードを検索するSQL文を作りました。
(重複する animal は省きたいので DISTINCT を入れました)

SELECT DISTINCT animal FROM table_B WHERE tag = 'small'

以上で希望する結果になったのですが、
この結果を、table_A で、最も新しく出現する順番に(id降順)ソートさせたい場合 SQL文はどのように書けばよいのでしょうか?
サブクエリ等調べてはいるのですが、手持ちの資料が少なく困っています。
MySQL 5.1です。
814813:2010/04/28(水) 19:18:32 ID:???
table_A
-----------
id animal
-----------
1010 cat
1009 dog
1008 dog
1007 cat
1006 bird

table_B
-----------
animal tag
-----------
cat small
cat big
dog small
dog big
815NAME IS NULL:2010/04/28(水) 20:17:13 ID:???
SELECT DISTINCT tb.animal
FROM
 table_A ta,
 table_B tb
WHERE
    tb.tag = 'small'
 AND tb.animal = ta.animal
ORDER BY ta.id
816NAME IS NULL:2010/04/30(金) 00:27:52 ID:???
pdo を使用してデータを登録すると
どうしても文字化けが発生してしまいます。

テーブルはsjisなのですがPDOではsjisは使えないのでしょうか?
817NAME IS NULL:2010/04/30(金) 08:09:16 ID:KOHIXyIB
分からないんで質問します。

例えば、地元近辺の駐車場の空き状況をデータベースにして
駐車場管理者/利用者からお金を取るシステムを作ったとします。
MySQL自体は自分のサーバーに入れて誰にもいじらすことがない場合、
商用ライセンスが適用されますか?

この場合だとソフト自体は売ってないですよね?
金が発生するなら即商用ライセンスですか?
何度読んでも商用ライセンスの意味が把握できません・・・
818NAME IS NULL:2010/04/30(金) 10:21:17 ID:???
システムが自分の資産で
地主さんにサービスを提供する形態なら商用ライセンスは不要。

それでお金とられたら
mixiとかGREEとかモバゲーがえらいことになる。

システム自体を1セット20万円とかで地主さんに売る場合は別。
商用ライセンス買わない場合はシステム全体がGPLになる。
819817:2010/04/30(金) 13:17:04 ID:???
>>818
システム自体は自分の資産ですから、
自分の場合、商用ライセンスは不要っぽいですね\(^o^)/
ありがとうございました!
820NAME IS NULL:2010/04/30(金) 16:23:01 ID:???
無くてもいいけど別に買ってもいいんだよ
MySQLの商用サポートはかなり優秀
821NAME IS NULL:2010/04/30(金) 18:00:09 ID:LdmOaMfU
無理やりMySQLに関連付けて質問させてください。
レプリケーションで、DB2台構成(マスター、スレーブ)で運用を考えています。

参照の場合、はマスター、スレーブ2台に分散して見に行かせたいです。
この場合、プログラム(PHP)からはどのように読みに行かせればいいのでしょう?

マスター:100.100.100.1
スレーブ:100.100.100.2

1:PHPのランダム関数で、1か2か適当に決める
2:mysql.example.comのようなアドレスを発行し、ラウンドロビンさせる
3:2の発展系、ロードバランサーで実装する

2の場合、DNSキャッシュが効いてしまい、ほとんど意味が無いような気がしてきました。
ご助言をいただけたらと思います。
822NAME IS NULL:2010/04/30(金) 18:34:42 ID:???
じゃー1でいいんでないかい。
聞きに行くサーバが複数台あれば2でもいいんじゃないかいー。
823817:2010/04/30(金) 19:30:26 ID:???
>>820
では商用サポートって具体的に何をやってくれるんですか、と検索したところ:

http://openstandia.jp/services/mysql/mysql_license_support.html

…バグFixとか生涯調査とか別に要らないですわ。
ただ、将来的には個人情報を扱うことになって情報漏洩とかあったら困るんで
採算取れるなら考えますけどね。
824NAME IS NULL:2010/05/01(土) 01:20:59 ID:???
>>818
逆に、GPLのまま売ってもいいなら商用ライセンスも要らないな。
売価の20万円で元がとれて、他に明かしたくない独自コードが含まれて
いるわけでもない場合はそれもありだろう。
825NAME IS NULL:2010/05/01(土) 09:18:56 ID:???
バグFixってもサポートがパッチを当ててくれるわけでもない。バグ情報送ってくるだけ。
バグが原因で情報漏れおきてもMySQLが損害賠償してくれるわけでもない。自己責任。
障害調査は自前で運用できないとこなら必要だろうが、DBAいるなら不要。
サポートいるようなところがオープンソース使うはずないじゃんって話。
オープンソースで喰えると思ってMySQLに入社した人は頭おかしい。
世の中わかってないにも程がある。
826817:2010/05/01(土) 09:29:42 ID:???
>>825
情報、どうもサンクスコです
それなら尚更サポートなんて要らないですね
DBA居なくて運用しているところなんてあるんですかねw
因みにSQL自体はMySQLで勉強して、安定したらそのうちPostgreSQLに移ることにします
827813:2010/05/01(土) 10:41:19 ID:???
>>815
遅くなったけど有難う。動いたけれど凄く重かった。
試行錯誤して単一テーブルで済ますようにしたら改善しました。
828NAME IS NULL:2010/05/01(土) 14:18:29 ID:Urgsz0Ia
駆け出しものです。
MySQL Migration Toolkitを使って会社で使っているmssql serverをマイグレーションしようと考えています。
ネットや書籍,セミナーなどあっちこっち出向くんですがあまり情報がありません。
一読しておけばよいような書籍・サイトさらにはセミナーなどご指南いただければ幸いです。
829NAME IS NULL:2010/05/01(土) 15:03:29 ID:nm2RYB54
質問させてください。

回線断時にEndTransactionしようとするとアプリごと終了するのですが
これはどうにもならない問題なのでしょうか?
830NAME IS NULL:2010/05/02(日) 15:17:45 ID:ADUZBcvp
すみません、何も特別なことをしていないのに
突然MySQLとの接続が切れるんですが
考えられる原因は何ですか?
どう対処すればいいんでしょうか?
↓こんな感じです

mysql> ALTER TABLE tb1C MODIFY nama VARCHAR(100);
Query OK, 5 rows affected (0.07 sec)
Records: 5 Duplicates: 0 Warnings: 0

mysql> desc tb1C;
ERROR 2006 (HY000): MySQL server has gone away
No connection. Trying to reconnect...
ERROR 2003 (HY000): Can't connect to MySQL server on 'localhost' (10061)
ERROR:
Can't connect to the server

Windows VISTA 64-bit
mysql> status
--------------
mysql Ver 14.14 Distrib 5.1.37, for Win64 (unknown)

Connection id: 1
SSL: Not in use
Using delimiter: ;
Server version: 5.1.37-community MySQL Community Server (GPL)
Protocol version: 10
Connection: localhost via TCP/IP
Client characterset: sjis
Server characterset: sjis
TCP port: 3306
Uptime: 4 min 47 sec

Threads: 1 Questions: 4 Slow queries: 0 Opens: 16 Flush tables: 1 Open tabl
es: 9 Queries per second avg: 0.13
--------------
831NAME IS NULL:2010/05/02(日) 19:00:03 ID:uTWZyACn
MySQLConnecter/netの質問もここでいいのかな?
832NAME IS NULL:2010/05/02(日) 19:32:44 ID:???
>>830
最初のalter tableを実行した後、次にdescを実行するまでの間、結構時間が経ってたんじゃないの?

833830:2010/05/02(日) 23:16:15 ID:ADUZBcvp
>>832
いえいえ、それがページをめくるのにかかる時間だけ、
つまり、30秒も経ってないです

ちょっとググッたんですけど、wait_timeoutが原因ですかね?
と思って今、SHOW VARIABLES;やったんですけど
| wait_timeout | 28800
です
(秒から時間に治すと…8時間って…自分で設定した記憶はまったくありません)
これは原因ではないですよね?

今日はこれがもう二回も起きてます
こんなのじゃネットで公開したときに落ちるんじゃないかと心配です…
834830:2010/05/02(日) 23:40:59 ID:ADUZBcvp
たった今も

mysql> ALTER TABLE tb1C ADD umare DATETIME;
Query OK, 5 rows affected (0.01 sec)
Records: 5 Duplicates: 0 Warnings: 0

mysql> DESC tb1;
ERROR 2013 (HY000): Lost connection to MySQL server during query
mysql>

になりました
どうもデータベースに変更を加える(ALTER)と起こるようです

http://mysql.javarou.com/dat/000578.htmlでは
再度問い合わせをすれば自動的に接続されると書いてありますが
自分の場合は完全に接続が断たれていて駄目です

http://www.spencernetwork.com/Forums/bin/YaBB.cgi?board=mysql;action=display;num=1159797352には
ルート権限なら起こらないと書かれていて、これは信用できようです
今、自分は全権限を持たないユーザーでアクセスしていますので…

経験者の方々、どうにかなりませんか?
835NAME IS NULL:2010/05/03(月) 00:52:18 ID:???
このへんかなあ?

Bug #31145 ALTER TABLE DROP COLUMN, ADD COLUMN crashes (linux) or freezes (win) the server
http://bugs.mysql.com/bug.php?id=31145
836830:2010/05/03(月) 01:12:11 ID:???
>>835
それですね!
バグが報告されているヴァージョンが5.1.43以前で
自分のヴァージョンが5.1.37ですから間違いなさそうです
症状もまったくもって同じです

最新ヴァージョンにはもうパッチが当ててあるようですね
治っているならいいです、次回、折を見て最新ヴァージョンに切り替えます

それにしても2007年9月に報告されたバグが
去年の暮れまで放置されてたなんて
MySQLの開発って意外と杜撰なんですね…

ありがとうございました!
837NAME IS NULL:2010/05/03(月) 12:38:02 ID:???
普通そういう使い方しないからなw
838NAME IS NULL:2010/05/03(月) 13:10:53 ID:???
ここまでバージョンあがってるのにいまだにこんなバグ出るほうがおかしくね?
開発管理は最初から今まで進歩しないてアマチュアレベルだとおもうけどな
839NAME IS NULL:2010/05/03(月) 13:53:19 ID:???
不具合修正にも優先順位がある。
メリットが少ない変更は後回しなだけ。

といいつつ正直、将来は心配。
840NAME IS NULL:2010/05/03(月) 23:31:20 ID:???
動かないならまだしも、クラッシュするってサービス止まっちゃうじゃないか。
最優先で修正されるべきなんじゃないの?
841NAME IS NULL:2010/05/03(月) 23:41:07 ID:???
今回の問題は
あろうことか、「開発者側の当事者」が
「いや、俺も5.0.52で試したけど再現性なかったよ」
って書いたもんで、約二年間も放置されていた、ってことでしょう

実際には、バグ報告者は5.1.20でバグを発見しているんで
5.0.52で再現性を試みる自体が開発者としておかしいんですが

ALTER TABLE程度でいちいちフリーズされるのはどうかと思います
(「さいさい変更を加えるのは最初の設計が悪い」とかは言いっこなしですよ)
まぁ、優先順位が高かったからこそ、二度目のバグ報告で
一ヶ月も経たないうちに対策されたんだと思います

とにかく、自分は今回の件でMySQLに対する信用は落ちました
842NAME IS NULL:2010/05/04(火) 00:14:28 ID:???
MySQLを擁護するつもりはまったくないけど
バグの10個や20個で騒いでたらシステム開発はできんよ

MySQL 5.1でこれまでに修正されたバグは3,500個以上
Oracleだって9.2.0.1〜9.2.0.8で修正されたバグは6,000個以上
Windows2000には出荷当時63,000個のバグがあると言われていた

ちょっとスパゲッティな気はするけどね>MySQL
843NAME IS NULL:2010/05/04(火) 00:38:13 ID:???
>>842
>MySQL 5.1でこれまでに修正されたバグは3,500個以上

あらららら、MySQL 5.1ってもう十分に枯れたシステムだと思ってたんですけど違ったんですね…
こうなるとPostgreSQLの修正されたバグの数が知りたくなりますね…

でも、今回の件は許せない
トヨタのリコール隠しくらい許せない
844NAME IS NULL:2010/05/04(火) 00:48:18 ID:???
思う存分数えてください
http://www.postgresql.org/docs/8.4/interactive/release.html

MySQL 5.1が確か2008年11月リリースだと思ったから
PostgreSQL 8.3.5あたりから数えるといいよ
845NAME IS NULL:2010/05/04(火) 13:43:06 ID:???
MySQLとポスグレはリリースタイミングが違うから期間ごとのバグ数比較してもしかたがないような気もする。
ポスグレは毎年新バージョンリリースしてるんで比較するなら8.4.1、8.4.2、8.4.3、8.4.4のバグ数と5.1.27以降のバグ数じゃね?
ちなみにポスグレの8.4.0はリリースバージョンだから基本バグなしってスタンス。

今ざっくり数えてみたらポスグレの8.4は841から844で修正170くらいだな。
846NAME IS NULL:2010/05/04(火) 14:33:31 ID:???
>>844
そんな殺生な…

と思ったら

>>845
誠に乙です

このスレでこう呟くのもアレですが
やっぱりPostgreSQL、いいなぁ…
847NAME IS NULL:2010/05/04(火) 15:11:01 ID:???
>>846
だったらPostgreにすりゃあいいでしょーが w

客先とかの都合で変えられないんだったら諦めなしゃーないし w
848NAME IS NULL:2010/05/04(火) 15:56:30 ID:???
>>847
元々最初に触ったデータベースはPostgreSQLでしたし、そのうち移ります…
世間様はまだMySQLを崇拝していらっしゃるんで、MySQLは完全に捨て切れないですが…
849NAME IS NULL:2010/05/04(火) 16:51:33 ID:???
>>816
どなたかヒントをお願いします。
850NAME IS NULL:2010/05/04(火) 18:33:17 ID:???
>>848
> 世間様はまだMySQLを
日本はPostgreが先行だったと思ったが。
851NAME IS NULL:2010/05/04(火) 19:12:59 ID:???
>>850
なので、日本は例外的にPostgreSQLが大きなシェアを持っている。
けど、やっぱりLAMPってことでMySQLがかな〜りもてはやされたからねい。
日経うんちゃら読んでわかったつもりになった担当者がMySQLを強制
というのは普通にあった。
852NAME IS NULL:2010/05/04(火) 20:36:34 ID:???
L inux
A pache
M isa
P ostgre

これで行くんだ。
853NAME IS NULL:2010/05/05(水) 00:32:35 ID:???
PostgreSQLは品質が良いからバグが少ないのか
ユーザが少ないからバグが抽出しきれていないのかが
ちょっと分からない
854NAME IS NULL:2010/05/05(水) 01:07:46 ID:???
ソース読み比べてみPostgresとMySQL
なんでMySQLが低品質か分かるよ
855NAME IS NULL:2010/05/05(水) 23:26:46 ID:???
正規化するための主キーの設定と検索速度?、今後のメンテナンス?で
悩んでいるため質問させて下さい。

重複しないカラムとして「ショップ名」があります。
(東京店、大阪店、....)

ショップ名を中心に各店舗の人数とか売上とか細かい詳細があるため
複数のテーブルに分けて正規化します。

自分ではショップ名が重複しないから主キーにすれば良いかと考えますが
こういう場合でもあえてIDみたいな数値型(INT型?)のカラムを作って
それを主キーにした方が良いのでしょうか?
(auto_incrementにすればさらに楽だから?)
856NAME IS NULL:2010/05/05(水) 23:47:40 ID:???
>>854
目糞鼻糞w
857855:2010/05/05(水) 23:55:32 ID:???
追記

MySQLで各テーブルを見る時に
ショップ名が入っていた方が分かり易いというのもあります。

ただ将来絶対にショップ名が変わらないという保証はないので
そういう意味でメンテナンス的に?数値にした方がいい??
858NAME IS NULL:2010/05/06(木) 00:17:03 ID:???
どれもやめたほうがいいと思うけどな。
859NAME IS NULL:2010/05/06(木) 00:54:45 ID:???
主キー列を更新するっていうのが筋悪なので
名前が変わることのある店名のようなものは主キーにしないのが定石。

名前を主キーにすると外部キーをつけたときにメンテナンスしづらくなるし、
RDBMSによってはそもそも主キー列が更新できないものもある(TimesTenとか)

なので店舗IDを主キーにするのがふつうで、これをauto_incrementにするかどうか。
auto_increment列は売り上げとか日々データが増えるテーブルに対して
つけるものだと考えているので、私なら店舗IDはauto_incrementにしない。
860NAME IS NULL:2010/05/06(木) 11:42:23 ID:???
>>856

読んでないだろお前
861NAME IS NULL:2010/05/06(木) 11:46:57 ID:???
>>856
ソース読むんだよ、坊や。
バイナリ拾って「あぁグチャグチャやんw」って言っちゃダメだよ、坊や。
862855:2010/05/06(木) 15:46:25 ID:???
>859
わかりやすい解説ありがとうございました。

>なので店舗IDを主キーにするのがふつうで、これをauto_incrementにするかどうか。
>auto_increment列は売り上げとか日々データが増えるテーブルに対して
>つけるものだと考えているので、私なら店舗IDはauto_incrementにしない。

入門書や初心者向けのサイトだと
idを主キーにしてauto_incrementにしているため
そういうものかと思っておりましたが
日々増えるデータに対して割り当てるですね。

たしかに店舗IDだとそうそう増えるものではないため
自分がわかりやすい数値にすればいいわけか。
ありがとうございました。
863NAME IS NULL:2010/05/06(木) 16:36:37 ID:???
mysqlについて質問です
よろしくお願いします

table_a
|orders_id|orders_date|
|  1  |20100101  |
|  2  |20100101  |
|  3  |20100101  |


table_b
|orders_id|shop_kind|
|  1  |  0  |
|  3  |  1  |


table_bのshop_kindが1以外のものと、table_bにorders_idは無いがtable_aにorders_idが存在するレコードを抽出したいのですが、クエリをどう記述すればいいかわかりません
以下のSQLのXXXXXXXに何か入れればできそうなのですが、どうすればいいですか?

select ta.orders_id from table_a ta left join table_b tb on (ta.orders_id = tb.orders_id) where (tb.shop_kind !='1' or XXXXXXX);

結果はorders_idが1と3のものが取れればいいです
864863:2010/05/06(木) 16:37:58 ID:???
すいません訂正です
>結果はorders_idが1と3のものが取れればいいです
結果はorders_idが1と2のものが取れればいいです
865NAME IS NULL:2010/05/07(金) 19:08:16 ID:???
MySQLで、INSERTしようとすると
「the table 'table_name' is full ERROR 1114」
と出て登録できなくなりました。
MySQLのバージョンが5.1で、ENGINEは、NDBCLUSTERです。
tmp_table_sizeとmax_heap_table_sizeをデフォルトの16Mから
200Mへ変更してみても同じエラーになります。
パッと見よく分からない質問かもしれませんが、
こんなことが原因の可能性があると思う方がいましたら
教えてください。お願いします。
866NAME IS NULL:2010/05/07(金) 20:19:19 ID:???
MySQL_Cluster や NDBCLUSTER をわからずに言うけど
保存用ディレクトリのあるパーティションが
いっぱいとかじゃないの?
メモリテーブルならどこのサイズなんだろうかな...
867NAME IS NULL:2010/05/08(土) 01:26:49 ID:???
tmp_table_sizeとmax_heap_table_sizeはMEMORYストレージエンジンの設定だから
NDBとは関係ないパラメータ、のはず

Sun Micro.のときはよく宣伝してたけど
正直MySQL Cluster使ってる人は超少ないと思う
868NAME IS NULL:2010/05/10(月) 11:53:44 ID:???
>>865
あー、うちでもそれ、tmpテーブル作れない、ってのがあったなぁ。
そんときはええと・・・・・、うーんと、たしかインデックスのサイズも含めたのがtmp_table_sizeだか
heap_sizeだかになって、その見積もりが甘かったのが原因、だったきがします。
869NAME IS NULL:2010/05/10(月) 18:14:05 ID:???
username、pointというカラムがあるテーブルがあるとして、
ランキングの順位をつけて出力するSQLはどのようにかいたら
うまくいくでしょうか。
3位が4名いても次は4位となるランキングとなってます。

現在のところは select username,point from table order by point asc;
でプログラム側で処理しておりますが、全てSQL側で処理ができれば
便利だと思い、質問させていただきました。

よろしくお願いいたします。
870NAME IS NULL:2010/05/10(月) 20:14:44 ID:???
>>869
MySQLで分析関数を模倣1(前編)
http://codezine.jp/article/detail/3107
871NAME IS NULL:2010/05/12(水) 06:54:41 ID:BasMxRqb
phpMyAdminの情報から

MySQL
* サーバ: localhost via TCP/IP
* サーバのバージョン: 5.1.37
* プロトコルバージョン: 10
* ユーザ: root@localhost
* MySQL の文字セット: UTF-8 Unicode (utf8)

Web サーバ
* Apache/2.2.12 (Win32) DAV/2 mod_ssl/2.2.12 OpenSSL/0.9.8k mod_autoindex_color PHP/5.3.0
* MySQL クライアントのバージョン: 5.1.37
* PHP 拡張: mysqli

phpMyAdmin自体はUTF-8になっています。

この状態でphpMyAdminからテーブル作成したところchar型やvarchar型の照合順序がlatin1_swedish_ciになります。
show create tableで見ると、テーブル自体のDEFAULT CHARSETはlatin1となっています。
このままinsert文を実行してchar型に日本語を挿入して、phpMyAdminからselectすると????といった感じに文字化けします。
自前で作ったPHPスクリプト(UTF-8で保存)からアクセスしてphpMyAdminでinsertしたものを取得すると同様に????となります。

次は自前で作ったPHPスクリプト(UTF-8で保存)からテーブルを作成して同様にinsert文で日本語を挿入した場合、
照合順序やテーブルのDEFAULT CHARASETは同様ですが、文字化けせず取得することができました。
phpMyAdminから挿入した項目を見てみると、????にはなってないものの文字化けした字になっています。
さらにPHPスクリプトをShift_JISに保存しなおして同じテーブルに対しinsert文でさらに追加したところ、
追加した部分は正常に見れるものの、UTF-8で保存したときの日本語は文字化けしています。

日本語を挿入する場合、自前のスクリプトから最初に挿入したときの文字コードで挿入し続ければ問題ないことが分かったのですが、
こういうものなのでしょうか?
文字コード関連は複雑で関連ドキュメントを見てもいまいちよく分かりません・・・
872NAME IS NULL:2010/05/12(水) 11:23:43 ID:e1mmKCKP
初歩的とは思いますが、質問です。

作成したビューってのは、元のテーブルが更新されたら、そのタイミングでビューも更新されるって思ってていいのでしょうか?

また、year(sysdate())みたいなのを条件に含めてた場合も、日付が変わったタイミングでビューのデータも更新されるって認識で良いのでしょうか?

873NAME IS NULL:2010/05/12(水) 11:42:48 ID:???
ビューは普通にSELECT文を発行した結果返ってくる結果を
1つのテーブルに見せかけるだけのもの
当然、データは最新のものになるよ
874NAME IS NULL:2010/05/12(水) 12:04:02 ID:???
>>873
ありがとうございます。
SELECTのエイリアスみたいなものですか。
875NAME IS NULL:2010/05/14(金) 15:58:04 ID:UNEfj5/X
質問です。

バージョンは5.1.41です。

ユーザ情報のみのエクスポートをする方法ってありますか?
出来れば「GRANT」の形で出てくると嬉しいんですけど。
876865:2010/05/14(金) 16:46:55 ID:???
>>866-868
回答ありがとう御座いました。
ちょっと原因の特定ができず、
前任者の作ったシステムで本番環境だったため、
4日ほどかけて全部SQL-serverに移行しました。
877NAME IS NULL:2010/05/18(火) 21:26:26 ID:???
質問させてください。

table_main
+---------+-----------+
| main_id | main_name |
+---------+-----------+
| 1 | NAME1 |
| 2 | NAME2 |
| 3 | NAME3 |
+---------+-----------+

table_sub
+---------+----------+
| main_id | have_num |
+---------+----------+
| 1 | 10 |
| 2 | 10 |
| 2 | 20 |
| 3 | 10 |
| 4 | 20 |
+---------+----------+

このようなテーブルがあったとします。
この中から、たとえば「have_numを 10 と 20 両方もつ main_id の main_nameを取得する」
という SQL 文はどのように書けばよいのでしょうか。

サブクエリなど勉強中でいまいち方法が思いつきません。
お詳しいかた教えていただけましたら幸いです。

バージョンは5です。
878NAME IS NULL:2010/05/18(火) 22:47:52 ID:???
試してはいない。

SELECT tm.main_name
FROM
 table_main tm,
 table_sub tsa,
 table_sub tsb
WHERE
   tsa.have_num = 10
 AND tsb.have_num = 20
 AND tsa.main_id = tsb.main_id
 AND tsa.main_id = tm.main_id
879NAME IS NULL:2010/05/19(水) 21:26:34 ID:???
>>878
ありがとうございます!

have_numをもつ条件をさらに増やすとなると、
同様に SELECT する同一テーブルがどんどん増えてしまうのですが、
効率をよくするよい方法はありませんよね…?
880NAME IS NULL:2010/05/19(水) 22:58:04 ID:???
もしかしたら、この辺でどうだろ?

SQL質疑応答スレ 9問目
http://pc11.2ch.net/test/read.cgi/db/1252492296/6
6 :NAME IS NULL :2009/09/09(水) 19:37:35 ID:???
よくある質問3

(問)
ID HOGE
01 A
01 B
01 C
02 A
03 B

HOGEをAもBもCも持っている、ID:01だけ取り出すにはどうすればよかですか

(答1)
SELECT id
FROM TableName
WHERE hoge in ('A','B','C')
GROUP BY id
HAVING count(DISTINCT hoge) = 3
;

(答2)
select *
from TableName T1
where not exists (select *
         from (values 'A', 'B', 'C') T2 (HOGE)
         where not exists (select *
                  from TableName T3
                  where T1.ID = T3.ID
                  and T2.HOGE = T3.HOGE
                  )
         )
;
※valuesの部分(Table Value Constructor)はDBMSによって文法がかなり違うので注意
881NAME IS NULL:2010/05/20(木) 12:54:25 ID:???
created_tmp_disk_tables が発生したクエリを特定することはできますか?
882NAME IS NULL:2010/05/20(木) 21:57:54 ID:???
>>880
ありがとうございます!
このような方法があるのですね。
大変勉強になりました。

さらに、これを発展させて、

table_main
+---------+-----------+
| main_id | main_name |
+---------+-----------+
| 1    | NAME1   |
| 2    | NAME2   |
| 3    | NAME3   |  
+---------+-----------+

table_sub
+---------+---------+
| main_id | item_id |
+---------+---------+
| 1    | 1    |
| 2    | 1    |
| 2    | 2    |
| 3    | 1    |
| 4    | 2    |
+---------+---------+

table_item
+---------+-----------+
| item_id | item_name |
+---------+ ----------+
| 1    | アイテム1 |
| 2    | アイテム2 |
+---------+-----------+

「アイテム1 と アイテム2 の両方もつ main_id の main_nameを取得する」
という風に複雑になると、どのようにやればいいのでしょうか。

まず item_name に対応した item_id を取得し、
それを両方もつものを >>880 の方法で調べる……
という風な方法は思いつきましたが、
1つの SQL 文で記述する方法がわかりませんでした。

お詳しい方教えていただけましたら助かります。
883NAME IS NULL:2010/05/22(土) 01:52:20 ID:???
インポートについての質問です。
最新MySql Windows番にて、csvをインポートしようとすると

ERROR 1292 (22007): Incorrect datetime value: '2010/05/20 00:00:00
2' for column 'Date' at row 1

と出るのですが、日付データの最後についてる 2 の意味が分かりません。
使用したSQL文は以下のとおりです。

LOAD DATA INFILE "FileName.csv"
INTO TABLE TableName
FIELDS TERMINATED BY "," ENCLOSED BY '"'
LINES TERMINATED BY "/r/n";

Dateはテーブルの最後のフィールドで、他のフィールドのエラーは解決しましたが
このエラーだけ解決できません。エディタでcsvを開いたら"でくくられてないのに
取り込んでみたら"でくくられていたりと、いろいろと躓きまくっています・・・

どうか助言をお願い致します。
884883:2010/05/22(土) 02:14:29 ID:???
自己レスです解決しました。
LINES TERMINATED BY "/r/n"; を
LINES TERMINATED BY "\r\n";

に書き換えたところうまくゆきました。
スレ汚し失礼しました。
885NAME IS NULL:2010/05/23(日) 00:32:03 ID:???
Mac(10.6)にphpMyAdminを入れたのですが、パスワードがわからず
ブラウザからログインができません。どのように設定すれば良いのでしょうか?
886NAME IS NULL:2010/05/23(日) 07:20:46 ID:???
パスワードを知ればよろし。

どうしても分からないなら、mysql.userテーブルの該当の ユーザ@マシンのパスワードを消してしまう。
(これはrootとかのパスワードが分からないと出来ないだろうけど)
887NAME IS NULL:2010/05/26(水) 17:34:29 ID:???
3306を使ったDB接続ってNAT越えられますか?
888NAME IS NULL:2010/05/26(水) 17:34:57 ID:???
もちろん
889NAME IS NULL:2010/05/26(水) 20:49:06 ID:???
3306だけ通せばいいのでわりと楽なほう
890NAME IS NULL:2010/05/26(水) 22:08:51 ID:???
なるほど ありがとうございます
たしかにOracleだと他のポートも必要でしたよね
891NAME IS NULL:2010/05/26(水) 23:44:13 ID:???
>>887
セキュリティーの心配は?
892NAME IS NULL:2010/05/26(水) 23:47:20 ID:???
>891
まぁ確かにセキュリティの問題はありますね
お客がやりたい 責任は取るって言われるとやるしかないんです

F/Wで元IPを固定したらまぁ簡単に問題は起こらないと思いますが・・・
893NAME IS NULL:2010/05/27(木) 11:50:14 ID:???
待ち受けポート番号変えておけばちょっとは安全かもよ
894NAME IS NULL:2010/05/27(木) 13:51:15 ID:???
コマンドプロンプトでSelect文を実行すると
件数が多くなると全体を見れ無くなるんですが
txtファイルに出力するしかないですか?
895NAME IS NULL:2010/05/27(木) 13:54:58 ID:???
コマンドプロンプトの行数を増やす
896NAME IS NULL:2010/05/27(木) 14:13:56 ID:???
Pager使う
897NAME IS NULL:2010/05/27(木) 22:13:38 ID:???
とりあえず、コマンドプロンプトのプロパティを開いて、レイアウトタブを選択して、
その中の画面バッファのサイズの高さを増やしてみよう。
898NAME IS NULL:2010/05/27(木) 23:23:22 ID:tW/OnXJS
Navicatとかを使ったら?
899NAME IS NULL:2010/05/28(金) 00:28:03 ID:???
LIMIT入力すれば?
900NAME IS NULL:2010/05/28(金) 08:20:39 ID:???
>>894
何がしたいのか?
901NAME IS NULL:2010/05/31(月) 10:19:41 ID:???
>>900
わかってないのはお前だけだ
902NAME IS NULL:2010/06/01(火) 18:50:31 ID:???
MYSQLがインストールできましぇん

OS:WINDOWS XP
MYSQL VER:5.1.45

executeクリックした後に最後のチェックで1045エラーでrootのパス設定出来ないんですけど
どうしたらいいでしょうか。
本当すいません。教えて下さい。
903NAME IS NULL:2010/06/01(火) 19:24:36 ID:???
904NAME IS NULL:2010/06/01(火) 19:32:48 ID:???
executeとrootは小文字だろ
905NAME IS NULL:2010/06/03(木) 16:46:26 ID:???
PHP+MySQLで開発しています。
MySQLへのアクセス方法は、PHPからPHPのmysql関数、あるいはPHPのPDOクラスを用いて行う予定です。
できたものは公開したいと思っているのですが、ライセンスをどうすればいいのかよくわかりません。
作るアプリケーションは商用にも使えるアプリケーションになります。
これで開発したアプリケーションのライセンスはGPLになるのでしょうか?
できれば制限が緩いBSDやMITあたりにしたいのですが、MySQLを使ってる時点でGPLになってしまいそうで困っています。
MySQL以外にもPostgreSQLとSQLiteにも対応する予定です。
BSDやMITにしたい場合、MySQLの対応ははずすしかないのでしょうか?
どのみちソースコードを公開するからGPLでいいじゃんというツッコミはなしでお願いします。
906NAME IS NULL:2010/06/03(木) 17:00:45 ID:???
関係ないです
907NAME IS NULL:2010/06/03(木) 18:17:38 ID:zEZNACiR
PHPとMySQLでレンタルバナーみたいなのを作成しています。

会員は2000人ほどですが、1日10万前後のINSERTがあります。
1つのテーブルでアクセスを追加していく形なのですが、
INDEXさえ指定していれば、今後もこのままで大丈夫でしょうか?
それとも会員毎にDBを分けた方が良いのでしょうか?

将来を見据えて負荷がかからないような構造をしたいと思っていますので
構造についてアドバイスお願いします。
908NAME IS NULL:2010/06/03(木) 19:18:49 ID:???
tableA
id | name
--------
1 | aaa
2 | bbb

tableB
id | tableAid | point
-----------------
1 | 1    | 5
2 | 1    | 8
3 | 2    | 10
3 | 2    | 9
というテーブルで、 tableB.point が9以下の tableA.name を取得したいのですが
select tableA.name from tableB
inner join tableA on tableB.tableAid = tableA.id
where tableB.point < 10
とすると、当然ですが tableA.name が重複してしまいます。
プログラム側で取り除けばいいのですが、なるべくSQLのみで解決したいです。
可能でしょうか?
909NAME IS NULL:2010/06/03(木) 19:23:54 ID:???
SELECT DISTINCT 〜
910NAME IS NULL:2010/06/04(金) 04:19:52 ID:???
>>907
一日に10万レコードも増加するんだったら、1テーブルでは無理がある
会員毎にテーブルを分けるなりした方がいいだろう
それに加えて、古いレコードを削除するロジックも必須と思うが
911NAME IS NULL:2010/06/04(金) 10:40:49 ID:???
というかアクセスログみたいに追加しかしない、複雑な検索を
しないものならDB以外の保管手段を考えたほうがいいのでは
912NAME IS NULL:2010/06/04(金) 13:05:16 ID:???
DB以外の手法を取るとして、例えばファイルにしちゃうと、
件数が多すぎるから、ファイルオープン後の処理でスクリプトのメモリオーバーでコケる可能性が高いよ
913NAME IS NULL:2010/06/04(金) 13:11:19 ID:???
それ以前に設計の見直しが出来ないか?
詳しい仕様を知らんが、
件数をカウントするだけなら件数を保持しておくフィールドをインクリメントしてUPDATEすりゃあいい
なんでもかんでもINSERTしてるから肥大化するんでねえの?
914NAME IS NULL:2010/06/04(金) 13:18:09 ID:???
>>912
追記の書き込みオンリーで開いてもそうなる?
915907:2010/06/04(金) 13:45:41 ID:68Ryowuk
>>910-914
みなさんありがとうございます。

テーブルの構成は単純に
id|user_id|banner_id|date
で、「どの会員のバナーがどの日時にアクセスされたか?」を記憶します。
管理画面で範囲検索がしたいので、UPDATEではなくINSERTが必要です。

最低2年以上は保管したいと思っているのですが、
テーブルを分けた方が良いんですかね・・。
JOINして会員データと繋げて管理画面で表示させたいので、
DBを使う方が良いんです。
916NAME IS NULL:2010/06/04(金) 14:18:16 ID:???
検索はあんた1人がチマチマやるんだったらどうでもいいんじゃないかな。
動作が遅いとどっかから苦情がくるなら別だけど、これ以上正規化もないだろうからね。
それ以外は単純にINSERTしかしなくて、今問題がないなら余り考えないでもいいようにも思うけど。
INSERTにかかる時間は誰も感じないで済んでるんだろし、一時的にでも今更止められないでしょ。
あとはOLDテーブルみたいなのに心太する仕組みだけ組んどけばいいんじゃないの。
917NAME IS NULL:2010/06/04(金) 14:23:16 ID:???
>>915
NoSQLは?
918NAME IS NULL:2010/06/04(金) 15:09:10 ID:???
>>914
なる可能性が高い
オープンしたファイルの中身を変数に落としていく際にね
919NAME IS NULL:2010/06/04(金) 15:33:13 ID:???
時間は割り切って捨てたら?

俺だったらこうする

user_id|banner_id|day | count

プライマリーキー:user_id、banner_id、day

ようするにday(Y-m-d)毎にcountしちゃえば〜って事


10万件/日の2年分のデータを突っ込んだら、
ユーザー毎にテーブルを分けようとも、JOINで固まる

それに、915のテーブルだと、ある会員のアクセス数の取得
SELECT count(*) FROM TBL WHERE user_id= ? AND date < ? AND date <= ?
も動かなくなるぞ
920NAME IS NULL:2010/06/04(金) 15:40:56 ID:???
MySQL Proxy の話ってここでいいんでしょうか?
ぐぐってもあまり情報がでまわっていないもので・・・
921NAME IS NULL:2010/06/04(金) 20:36:18 ID:???
>>919
古いデータを定期的にそうやって集計してから切り捨てる、ということならアリだが、
最初からそういうテーブルしか持たないんだったらめんどくさいうえにかえって
遅くなるばかりでメリットがない。
922NAME IS NULL:2010/06/04(金) 21:18:56 ID:???
遅くなることはない、10万件を2000件に圧縮できる
SELECTもチョイだ

毎日10万件溜まってくテーブルにJOINだとかcount(*)するほうがおかしい
923NAME IS NULL:2010/06/04(金) 22:30:51 ID:ip+eErJw
mysqlを使ったプログラミングをするには、cのapiとjavaのどっちがおすすめ?
924NAME IS NULL:2010/06/05(土) 00:13:35 ID:cbT55XsI
MyISAMについて質問です。

トランザクション機能が使えないMyISAMを採用する場合、
トランザクションを使わないことによる問題点というものに対して、
特別な対策(テーブルを正規化しないとか)をするものなのでしょうか?
もしくは、トランザクションを使わないことによって発生する問題点を許容した形でシステム開発をするものなのでしょうか?


トランザクションを使わないでシステムを開発することに対してのイメージがわかないので、
MyISAMを使ってどのようにテーブル設計、というか注意事項というかが必要なのか、
そこらへんをご教示いただければと思います。

925NAME IS NULL:2010/06/05(土) 02:43:11 ID:nyGql8Ff
「MM00」みたいな英数字を表示させるにはどういった型で設定すればいいですか?
ちなみにVARCHAR(10)でやっても出来ません><

エラー名は
ERROR 1054 (42S22): Unknown column 'MM00' in 'field list'
です
926NAME IS NULL:2010/06/05(土) 05:26:43 ID:???
>>922
insertで済んでいたものがselect→insert/updateになるだろ。
同じ会員のバナーが同時にアクセスされることもあるだろうからロック待ちも
発生するし、厳密にはserializableじゃなきゃならんから、そうしたら毎回
テーブルロックだ。
927NAME IS NULL:2010/06/05(土) 06:19:49 ID:???
1時間に平均4000件、1分で70件か。
実際はGTに集中するだろうから10倍見積もるとして・・。
テーブルロック仕様を考えたやつはこの業界で生きていけないぞw
928NAME IS NULL:2010/06/05(土) 07:36:20 ID:???
>>925
単にselectするカラム名を間違っているだけなんじゃないの?
929NAME IS NULL:2010/06/05(土) 11:37:00 ID:???
>>924
MyISAMの問題はトランザクションがないことよりもクラッシュセーフでないこと。
電源ぶちって切っただけでDBが壊れる。
それでもよいときだけ使う
930NAME IS NULL:2010/06/05(土) 18:04:19 ID:8RarHjRw
なんで、設定フィルの拡張子がmy.cnfとmy.confの2種類あるの?
931NAME IS NULL:2010/06/05(土) 22:36:23 ID:qBJImX+X
SELECT test_tb.id,(test_tb.number+test_tb2.number)AS total FROM test_tb LEFT JOIN test_tb2 USING(id) GROUP BY test_tb.id

というSQLがあって、結果が
id|total
1 |10
2|NULL

となります。id2はtest_tb2.numberが存在しないのでNULLになりますが、
存在しない場合は「0」にするにはどう書けば良いのでしょうか?
932NAME IS NULL:2010/06/05(土) 23:06:32 ID:6EEUsDw0
>>931

mysql固有関数を使うなら

IFNULL((test_tb.number+test_tb2.number),0) AS total
933NAME IS NULL:2010/06/05(土) 23:17:18 ID:???
いや、test_tb.numberには値があるかもしれないんだからこうだろ
IFNULL(test_tb.number,0) + IFNULL(test_tb2.number,0) AS total
934NAME IS NULL:2010/06/05(土) 23:18:40 ID:qBJImX+X
>>932-933
ありがとうございます。この方法で行きます。
935NAME IS NULL:2010/06/05(土) 23:23:30 ID:???
>>933

質問なんですけど null値が含まれた計算結果はnullになるのでは?
936>>924:2010/06/06(日) 02:49:52 ID:???
>>929
ありがとうございます。
937NAME IS NULL:2010/06/06(日) 10:25:47 ID:???
my.cnfはあまり設定項目が多い印象を受けなかったのですが、
セキュリティに関してはmy.cnfで設定しないのですか?
938NAME IS NULL:2010/06/06(日) 19:34:34 ID:eYBmtmqg
InnoDBで1テーブル/ファイルにしている場合、
既存テーブルにautoextendつけたり、MAX_SIZEつけたりできますか?

有識者の方、よろしくお願いします。
939NAME IS NULL:2010/06/07(月) 00:37:27 ID:???
>>938
1) innodb_file_per_tableのときは各テーブル自動でautoextendする
2) InnoDBはそもそもMAX_ROWS効かない
940NAME IS NULL:2010/06/07(月) 11:44:41 ID:7daPAieJ
すみません、質問させてください
WindowsからLinuxに移行しましてMySQLをインストールシヨウと思っているのですが、HP(http://dev.mysql.com/downloads/mysql/#downloads)のどれをインストールすればいいのか分かりません
自分の持っている本にはmysql?.tar.gzをダウンロードとありますが、rpmしか見当たりません
で、こういうサイト(http://www.unix-vm.com/centos_4_1.html)を参考にしたのですが、4つもパッケージをダウンロードしています
これはやはり全部ダウンロードしなければいけないのでしょうか?
Windowsだとインストーラ一つだけだったのでどうなのかなぁ、と思いまして

OSはcentOSを使っております
以前yumでMySQLをインストールしたことはあったのですが、バージョンが古かったものでクリーンインストール時に「この際最新版をインストールしよう」と思い立ったのですが分からなくなりまして
宜しくお願いいたします
941NAME IS NULL:2010/06/07(月) 11:48:29 ID:7daPAieJ
ごめんなさい、もう一つ質問がありました
centOS5.4を使っている自分の場合、Select PlatformはRed Hat Enterprise Linux 5を選択するのでしょうか?
それともLinux - Genericを選択すればいいのでしょうか?
942NAME IS NULL:2010/06/07(月) 12:29:12 ID:???
本がどれだかわからんけど、持ってる本の通りにやりたいなら
Source Code 選んでGeneric Linuxのとこに*.tar.gzあるよ
943NAME IS NULL:2010/06/07(月) 12:30:08 ID:???
"Source Code"すら探せないんだからWindowsに戻るが正解
944NAME IS NULL:2010/06/07(月) 18:09:46 ID:???
100万レコードを全文検索する事って出来ますか?
945NAME IS NULL:2010/06/07(月) 20:27:24 ID:???
可能
946NAME IS NULL:2010/06/07(月) 21:08:02 ID:???
条件がそれだけならまぁ可能だわなぁ
947NAME IS NULL:2010/06/07(月) 22:23:00 ID:???
じゃ、1レコード10KB程度の文章があったら?
948NAME IS NULL:2010/06/07(月) 23:01:38 ID:???
>>939
ありがとうございます。
file_per_tableだとデフォルトでautoextendつくんですね。

2)についてですが、
質問の仕方がかなり悪くて申し訳なかったです。
MAX_ROWSではなくてautoextendのMAX指定のことをお聞きしたいのです。
既存ファイルのautoextendのMAXサイズを変更できるのでしょうか。
教えていただければ幸いです。

よろしくお願いします。
949NAME IS NULL:2010/06/07(月) 23:28:05 ID:???
>>948
できるはず
まずは試してみよう!
950NAME IS NULL:2010/06/07(月) 23:29:41 ID:???
>>947
可能
ただし1回の検索に20分ぐらいかかるかも
951NAME IS NULL:2010/06/07(月) 23:32:40 ID:???
>>941
どちらでもよい
rpmの場合はclient、server、shared、develの4つを入れるのが基本
952NAME IS NULL:2010/06/07(月) 23:34:44 ID:???
>>937
my.cnfって最大200項目ぐらいあるけどそれでも少ない?
セキュリティは主にSQLでmysqlデータベースに対して設定する
953NAME IS NULL:2010/06/07(月) 23:41:24 ID:???
>>950
また条件後付けで「私のメモリは16GBです」「私のストレージはSSDです」とか言われるぞ。
954NAME IS NULL:2010/06/08(火) 00:16:03 ID:???
>>953
その条件だからって、20分が2秒にはならないだろ?
955NAME IS NULL:2010/06/08(火) 00:26:01 ID:???
>>954
20分がなんぼになるかじゃなくて、>>947条件後出しすんなボケ氏ねって話。
956NAME IS NULL:2010/06/08(火) 01:12:11 ID:???
いいえ、死ぬ必要はNight思うわ
957NAME IS NULL:2010/06/08(火) 10:07:34 ID:???
夜に死ねと
958NAME IS NULL:2010/06/08(火) 10:13:06 ID:???
・後出して条件出して答えてもらう
・単にMySQLの可能性が知りたいだけ

どっちだろ?素人だったらそもそも
100万件のデータなんて扱わないはずだから、後者かな。
959NAME IS NULL:2010/06/08(火) 14:18:15 ID:6789QTvE
話はそれるけどいまMysqlの日本語全文検索って
senna 以外はどんなのがあるの?
960NAME IS NULL:2010/06/08(火) 14:34:14 ID:???
5.1のエクステンションを見たことある
実績とかは知らない
961NAME IS NULL:2010/06/08(火) 22:46:37 ID:???
JOIN使うとすんごく遅くなるんですけど仕様ですか?
データは1テーブル数10万件
3、4テーブルJOINしてます。
962NAME IS NULL:2010/06/08(火) 22:48:10 ID:???
さあ、ジョイナス!!
963NAME IS NULL:2010/06/08(火) 23:15:01 ID:???
テーブル構造もSQL文もインデックスも情報なしに、なぁ。
964NAME IS NULL:2010/06/09(水) 04:06:02 ID:???
>>963
だからじゃね?
965NAME IS NULL:2010/06/09(水) 07:12:19 ID:???
ありがちなのは、N自乗。
966NAME IS NULL:2010/06/09(水) 13:17:17 ID:???
でも実際、インデックスを理解しないで使っている人周りに結構居ない?
967NAME IS NULL:2010/06/09(水) 13:39:55 ID:???
なんだか分からないが付けると速くなる魔法の機能でしょ、理解してるよ
968NAME IS NULL:2010/06/09(水) 13:41:21 ID:???
>>967
はネタだろうが、
実際に使わないインデックスが20くらい付いたテーブルは見たことがある
969NAME IS NULL:2010/06/09(水) 16:10:11 ID:???
とりあえず、JOINのキーになっているフィールドはインデックスにしてる
970NAME IS NULL:2010/06/09(水) 16:15:57 ID:???
where句ある?
971NAME IS NULL:2010/06/09(水) 18:51:52 ID:???
join されるテーブルで where 句使うなら、
複合インデックスで
where 句のカラム, 結合カラム
とインデックスを張らないとダメだよ。
joinする場合はどっち道 フルJOIN 避けるために件数減らしてからJOINだから、
結合カラムに単体でインデックスを張るのは意味がないと思う。
972NAME IS NULL:2010/06/09(水) 19:00:02 ID:???
>>971
結合カラム自体を where で絞り込む場合は?
973NAME IS NULL:2010/06/09(水) 19:02:01 ID:???
>>972
その場合は有効か。
974NAME IS NULL:2010/06/09(水) 19:35:50 ID:???
でもまあ実際コード引継ぎとかすると、
インデックスとクエリ直すだけで速度が100倍とかなるから、
おかげで神みたいな扱いをされて楽。
975NAME IS NULL:2010/06/09(水) 20:40:41 ID:???
とあるカラムのインデックス
976NAME IS NULL:2010/06/09(水) 22:13:06 ID:7pAbJT2V
auto_incrementを既存のテーブルに追加したいのですが、
どのようにsqlを書けばいいのかわかりません
どなたか、教えてください

977NAME IS NULL:2010/06/09(水) 22:39:04 ID:???
ALTER TABLE
ADDなのかCHENGEなのか知らんが。
978NAME IS NULL:2010/06/09(水) 23:31:31 ID:???
インナーのネイティブアルターか
979NAME IS NULL:2010/06/10(木) 00:09:03 ID:???
>>968
魔術はあるもん!
980NAME IS NULL:2010/06/10(木) 03:34:47 ID:???
キュキュキュッ
981NAME IS NULL:2010/06/10(木) 09:07:48 ID:9/rnYsAK
質問させてください。
記号などをInsertするとIncorrect string valueでエラーになる
のですがどうしたらいいでしょうか?
A,B,Cと複数のDBがあり、Aでしか起きない現象になってます。
982NAME IS NULL:2010/06/10(木) 10:03:27 ID:???
記号などって…w
例えばどの文字なのか、いくつか挙げるってのを何故しないの?

DB/テーブルの文字コード設定を調べておくってことを
「質問させてください」の前にやってないの?

そういやMySQLのバージョンすら分からんな。
983NAME IS NULL:2010/06/10(木) 14:45:20 ID:3agFnNQw
みなさん、どこまで正規化します?
正規化してテーブル分けすぎて後から結合する時に困ります・・。
かといって1つのテーブルで管理すると、レコードが多くなりすぎるし。
984NAME IS NULL:2010/06/10(木) 14:51:51 ID:???
正規化って何なのかよくワカンナイ
同じデータが重複しないようにしたりするだけ、1つのテーブルで管理とか逆にどうやってるのか分からない
正規化もワカンナイ
985NAME IS NULL:2010/06/10(木) 15:03:32 ID:???
>>983
結合する時に困るってどう困るんだい?
986NAME IS NULL:2010/06/10(木) 16:23:57 ID:3agFnNQw
>>985
例えばECサイト用のDBを構築してレポート表示したい時、

注文レポート、売上げレポート、アクセスレポート

と、3つの用途に関するレポートをテーブル分けしているとします。
これを表示する時、商品IDで結合するわけですが、
物凄くSQL文が長くなり、パフォーマンスに影響が出ないか懸念しています。
テストで、10レコード程度入れて試している分には速いのですが・・。
987NAME IS NULL:2010/06/10(木) 16:28:09 ID:???
>>986
ハードウェアのスペック挙げれば解決できるからいいんじゃないの。
俺の場合、データを重複させないようにした方が、二時利用に役立つから極力してるよ。
988NAME IS NULL:2010/06/10(木) 16:31:35 ID:3agFnNQw
>>987
そうですね。SQL文が長くなる=プログラム側の問題は考えないようにします。
989NAME IS NULL:2010/06/10(木) 16:55:58 ID:???
>>988
SQL文が長くなってしまってメンテが大変になる場合は、
ある程度区切って結合させてデータを取得し、プログラム側で結合させる事もある。

ま、いろいろ方法はあるよね。
990NAME IS NULL:2010/06/10(木) 19:09:09 ID:???
>>987
ハードに逃げるのは馬鹿のやること。
厳しい事を言うが設計がおかしいと考えるべき。
991NAME IS NULL:2010/06/10(木) 19:35:56 ID:???
3テーブルを結合したくらいで"ものすごく"SQLが長くなるってのがイメージ付かないんだけど?

それにSQLの長さ自体はパフォーマンスには関係ない。
商品IDは主キーなりインデックス張ってあるなりしてるだろうけど、インデックスを使っている限りはDBというものは極めて高速に動く。

データ数が1テーブル10万〜100万オーダー超になるとどうしても遅くなるので、
そういった場合は最後の手段としてハードウェアのスペックを上げる。

3テーブルJOINを使うとメンテ出来ないって?さっさと別業種に転職しろw
992NAME IS NULL:2010/06/10(木) 19:58:03 ID:???
メンテ出来ないって誰が書いてるの?
993NAME IS NULL:2010/06/10(木) 20:17:15 ID:???
「長い」という基準の違いでしょう
994NAME IS NULL:2010/06/10(木) 21:39:21 ID:???
>物凄くSQL文が長くなり、パフォーマンスに影響が出ないか懸念しています。

奇妙な考えだなぁ。
995NAME IS NULL:2010/06/10(木) 22:06:07 ID:???
10KB程度のSQLはよくあること
996NAME IS NULL:2010/06/10(木) 22:25:18 ID:???
どうせDBの実行所要時間なんて殆どがディスクアクセスでしょ。
いくら長いSQL文たって、そのパースにかかる時間の割合なんぞたかが知れてるんじゃないの。
997NAME IS NULL:2010/06/10(木) 23:02:38 ID:???
いろいろとパスワードを設置できるみたいですが、
mysqlにログインする時のパスワードと、databaseにログインする時のパスワードは別なんですか?
998NAME IS NULL:2010/06/10(木) 23:54:41 ID:???
パスワードはユーザに設定してるもんだよ。
だから、DBにそのユーザが含まれていたら同じ。
999NAME IS NULL:2010/06/11(金) 10:35:04 ID:???

毎日毎日、10万件ものデータいつどうやって作ってるのか、そっちのほうが気になるよ。
1000NAME IS NULL:2010/06/11(金) 13:53:37 ID:???
普通にサイト運営してたらログとして溜まるだろうが
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。