MySQL 総合 Part7

このエントリーをはてなブックマークに追加
1NAME IS NULL
快速 RDBMS、MySQL の総合スレです。

前スレ[MySQL 総合 Part6] http://pc8.2ch.net/test/read.cgi/db/1133166614/

[関連スレと過去ログ]
http://find.2ch.net/index.php?STR=MySQL
http://makimo.to/cgi-bin/search/search.cgi?D=db&q=MySQL&sf=0&link2ch=on

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

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

・関連ツール及びユーティリティ
・関連書籍
>>2
2NAME IS NULL:2006/02/17(金) 14:39:56 ID:Lge3FOwZ
3NAME IS NULL:2006/02/17(金) 19:14:47 ID:???
table_a
code key1
nengappi key2
suryo_a

table_b
code key1
nengappi key2
suryo_b

table_c
code key1
nengappi key2
suryo_c

[sqlの質問]
上記3つのテーブルにデータが入っていて、それを
下記のような形のテーブルにまとめたいのですが
1つのsql文で書くことは可能でしょうか?
よろしくご教授のほどお願いします。

table_m
code key1
nengappi key2
suryo_a
suryo_b
suryo_c

4NAME IS NULL:2006/02/17(金) 21:11:30 ID:???
コード | 年月日 |数量a
--------------------------
001 | 0600101 |100
002 | 0600102 |50
003 | 0600105 |100

コード | 年月日 |数量b
--------------------------
001 | 0600102 |100
002 | 0600103 |200
003 | 0600105 |100

コード | 年月日 |数量c
--------------------------
001 | 0600103 |100
002 | 0600104 |200
003 | 0600105 |100

↓↓↓(結果)

コード | 年月日 |数量a |数量b |数量c
-------------------------------------------
001 | 0600101 |100  |   |
001 | 0600102 |   |100  |
001 | 0600103 |   |   |100
002 | 0600102 |50  |   |
002 | 0600103 |   |200  |
002 | 0600104 |   |   |200
003 | 0600105 |100  |100  |100

こんな感じで、縦に入っている数量を横に
展開したいというような・・・
5NAME IS NULL:2006/02/18(土) 00:03:14 ID:???

select コード,年月日,数量a,NULL,NULL from テーブル1
select コード,年月日,NULL,数量b,NULL from テーブル2
select コード,年月日,NULL,NULL数量c from テーブル3
6NAME IS NULL:2006/02/18(土) 14:57:42 ID:???
>>4
mixiにも質問投げてますね
7NAME IS NULL:2006/02/19(日) 04:17:13 ID:???
質問です。

修士論文のために引用文の管理をするための便利なソフトはないかと別スレで尋ねたところ、
ここを紹介されました。

ネットで軽く調べてみたのですが、ちょっと難解な印象を受けました。
なんらかの言語に関する特別な知識とかは必要ですか?
簡単な使い方を紹介しているサイトなどありましたら教えてください。
8NAME IS NULL:2006/02/19(日) 04:44:52 ID:???
9NAME IS NULL:2006/02/19(日) 14:53:04 ID:???
データベースのバックアップを取りたいので、教えてください
いくつかのテーブルがinnodbで参照整合を張られている状態で、
古いデータだけをバックアップ、というか削除したいのですが
どうしたらいいのでしょうか。
10NAME IS NULL:2006/02/19(日) 15:40:11 ID:???
こりゃ、「仕事 or 宿題丸投げスレ」だな。
11NAME IS NULL:2006/02/19(日) 20:03:46 ID:3lzonMpB
Windows 2000でMySQLのサービスが開始できなくなり、MySQLが使えなくなって大変困っています。エラーとこれまでの経過は、以下の通りです。

コントロールパネル -> 管理ツール -> サービス

「ローカルコンピュータのMySQLサービスを開始できません。エラー1058:指定されたサービスは無効であるか、または有効なデバイスが関連付けられていないため、開始できません。」
どうすればいいでしょうか?
12NAME IS NULL:2006/02/19(日) 20:15:33 ID:???
>>11
アンインストール
再インストール
13NAME IS NULL:2006/02/19(日) 20:20:27 ID:3lzonMpB
やりましたが、出来ませんでした。
14windows:2006/02/19(日) 20:21:10 ID:E0ular7n
WindowsServer2003でWebサーバ作ってます
ASPとMySQLの連携がわからないんですけど
誰か教えてください
15NAME IS NULL:2006/02/19(日) 20:57:21 ID:???
>>11 他のOSにしろ。
16NAME IS NULL:2006/02/19(日) 21:00:33 ID:???
>>14 windowsなんかやめとけ
17NAME IS NULL:2006/02/19(日) 21:02:49 ID:???
ええい めんどくさい
おまえら、カネ払って有償サポート受けろ。
その方がスッキリする。
18NAME IS NULL:2006/02/19(日) 22:46:59 ID:???
>>17 ナイスアドバイス
19NAME IS NULL:2006/02/19(日) 23:06:56 ID:???
肉の多い大乃国
20NAME IS NULL:2006/02/20(月) 00:59:40 ID:???
>>11
>>13
再インストールやったなら、なぜ最初にそう書かない。
ほかにもやったことを全部書きなさい。
21NAME IS NULL:2006/02/20(月) 01:27:11 ID:???
>>11
インストール先のディレクトリ名は?
昔、Windowsの場合は空白やフルパスで長くなると不具合があった気がする。
22NAME IS NULL:2006/02/20(月) 01:46:28 ID:???
[Firebird-jp-general] MLからのネタだが
(元はfirebird-devel listかららしい)

MySQL ABがNetfrastructure社を買収したそうだ。
http://www.netfrastructure.com/
この買収によりNetfrastructureという製品(Interbase/Firebirdを利用した
アプリケーションフレームワークのようなものなのかな?)の権利と、
Netfrastructure社のCEOであるJim Starkey氏がMySQLの仕事をフルタイムですることになる。
Jim Starkey氏は、元Interbaseの開発者。
23JDBCドライバの中の人 ◆K1AKxx0vr2 :2006/02/20(月) 04:18:44 ID:???
盛り上がってますなw

>>11
Windowsのサービスからの起動は、エラーメッセージが物凄くPoorだから困るよね。

もうちょい詳しい原因を知りたいのにって場合には、

サービス > 右クリックでプロパティを開く > 実行ファイルのパスを確認

この実行ファイルパスをコマンドプロンプトから直接実行してみろ。さっきよりは何かがわかる。

24JDBCドライバの中の人 ◆K1AKxx0vr2 :2006/02/20(月) 04:21:11 ID:???
ていうか>>17がてっとり早い正解というのも確か。
自分で問題の切り分けできない人は有償サポートを使った方が良いよ。
てかMLとか2chだと情報貰ってこちらで切り分けとか、できんからね。
25JDBCドライバの中の人 ◆K1AKxx0vr2 :2006/02/20(月) 04:35:47 ID:???
以下、独り言。

さらに言うと、OSSのコミュニティって単体の問題を誰かに解決してもらうための場じゃなくて、
問題解決のための切り分け方法を教えてもらう・盗み出すための場だと思うんだが。
それを自分で身に付けようとする香具師は有償サポートなんてなくても大抵やってけるし、
身に付けない香具師はプロプラエタリ製品のときと同じく金を払って誰かに頼る必要があるだろう。

プロプラエタリ製品では内部技術情報が手に入らないのである程度仕方が無かったわけだが、
OSSは極論、ソース読めば全部書いてあるんだよ。まあソース読まなくとも親切な誰かが教えてくれたりする。

で、おまいらがOSS使う理由ってほとんど「金をかけたくないから」じゃないの?
金を払わない代わりに何かが必要になるのは世の常だが、それをやらないんじゃあまりかわらんと思うぞ。

ちなみにこのコテハンは後1週間くらいで消えますんで、JDBC Driverについて聞きたいことがある人はお早めに。



26NAME IS NULL:2006/02/20(月) 05:32:02 ID:???
JDBCの中って蒸しますか?
27JDBCドライバの中の人 ◆K1AKxx0vr2 :2006/02/20(月) 06:20:24 ID:???
>>26
接続プロパティが多数あり、それがごちゃごちゃしているため、蒸しします。
28NAME IS NULL:2006/02/20(月) 08:05:15 ID:???
>> 3,4
SQL質疑応答スレ(2ちゃんねる)で教えてもらった内容ですが、一応自己レスしておきます。

手法1
select x.code code, x.nengappi nengappi,
sum(x.suryo_a) suryo_a, sum(x.suryo_b) suryo_b, sum(x.suryo_c) suryo_c
from (
select code, nengappi, suryo_a, null as suryo_b, null as suryo_c
from table_a
union all
select code, nengappi, null as suryo_a, suryo_b, null as suryo_c
from table_b
union all
select code, nengappi, null as suryo_a, null as suryo_b, suryo_c
from table_c ) x
group by x.code, x.nengappi

手法2
select x.code, x.nengappi, a.suryo_a, b.suryo_b, c.suryo_c from
(select code, nengappi from table_a
union select code, nengappi from table_b
union select code, nengappi from table_c) x
left join table_a a on x.code = a.code and x.nengappi = a.nengappi
left join table_b b on x.code = b.code and x.nengappi = b.nengappi
left join table_c c on x.code = c.code and x.nengappi = c.nengappi
order by x.code, x.nengappi
29NAME IS NULL:2006/02/20(月) 13:35:14 ID:???
度数分布って出せる?
10%刻みで欲しいんだけどSQLじゃあ無理かな
30NAME IS NULL:2006/02/20(月) 15:02:11 ID:???
しかしあの ML の白痴的な全文引用はなんとかならんものか…。
31NAME IS NULL:2006/02/20(月) 15:08:40 ID:???
>>30
GMailを使っている漏れはそんなことは気にならない勝ち組。
32NAME IS NULL:2006/02/21(火) 01:27:15 ID:???
差集合をjoinで実現したいのですが、可能ですか
33NAME IS NULL:2006/02/21(火) 02:19:38 ID:???
全文引用を除去してDBに突っ込んでsql引いて見れるようにするスクリプト書けばいいんじゃね?

windows serverなら迷わずsql server使っとけ。ソースの必要性無いだろ。
あと構築無理なら退職して、おまいの年収の予算で代わりに鯖構築できる香具師雇え。
34NAME IS NULL:2006/02/21(火) 02:44:28 ID:???
>>33
SQL Serverだと高負荷時にロックの嵐になりうわ何をするくぁwせdrftgyふじこlp;@:
35NAME IS NULL:2006/02/21(火) 02:57:05 ID:???
>>25 コテハンは消えても、このスレには常駐ですか?
中の人がいるのは心強い事ですので。
36NAME IS NULL:2006/02/21(火) 03:28:32 ID:???
>>35
うん、中の人大好き。
PreparedStatement キャッシュの質問と、
ResultSetが戻れない設定なのに戻れるの質問したの俺です。
どちらもオライリーに載っていなかったのでとても感謝です。

あとイルカがかわいいです。
37JDBCドライバの中の人 ◆K1AKxx0vr2 :2006/02/21(火) 05:42:45 ID:???
声援レスdクス。元々おいらは期間限定の中の人だったのだけど、
その期間が終了するので、その後はこのコテは使えない。
なのでコテは消すけど、スレには残るよ。正規の中の人じゃなくなるが。
38NAME IS NULL:2006/02/21(火) 13:49:06 ID:???
phpMyAdminでMySQL5.0をいじってます。
table01のカラム(cll)に外部キーを設定を追加したいんですが、

ALTER TABLE `table01` ADD CONSTRAINT `fkey` FOREIGN KEY (`cll`) REFERENCES
`table02` (`cll`) ON DELETE CASCADE ON UPDATE CASCADE;

として、何も置きませんでした。
エラーもなかったけど、

SHOW CREATE TABLE table01;

でテーブルの設定をのぞいたところ、変化無し・・・
MySQL5.0のマニュアルを参照しても、
構文が間違っているようにも見えず困ってます。

どなたか理由を教えてください。
SQL質疑応答スレにて、こっちで聞いた方がいいと聞きました。
初心者にもわかりやすくお願いします。
39NAME IS NULL:2006/02/21(火) 14:25:18 ID:???
>>38
MyISAMじゃね?
http://dev.mysql.com/doc/refman/4.1/ja/alter-table.html
... ADD [CONSTRAINT [symbol]] FOREIGN KEY (...) REFERENCES ... (...) と
... DROP FOREIGN KEY ... をサポートしている
InnoDB 型のテーブルを対象としている場合を除いて、
FOREIGN KEY、CHECK、REFERENCES の各節では実際には何も行われない。
40NAME IS NULL:2006/02/21(火) 16:15:44 ID:???
>>39
>MyISAMじゃね?
あ、それでした!
ああすっきりした。
助かりました。ありがとうございます。。
41NAME IS NULL:2006/02/21(火) 18:21:45 ID:xy522R4q
誰かがSELECTをしているとINSERTが一時停止しているのは解るのですが、
SELECT実行が長くてもINSERTが実行されるようには出来ないでしょうか?。。orz
42NAME IS NULL:2006/02/21(火) 21:50:34 ID:???
ヒント:オラクル
43NAME IS NULL:2006/02/21(火) 22:13:01 ID:???
ヒント:独立性レベル
44NAME IS NULL:2006/02/21(火) 22:22:09 ID:???
45NAME IS NULL:2006/02/21(火) 22:41:48 ID:4YfYULSd
MySQLでORACLEのOSqlEditみたいなエディタってあります?
46NAME IS NULL:2006/02/21(火) 23:19:08 ID:4YfYULSd
MySQLでORACLEのOSqlEditみたいなエディタってあります?
47NAME IS NULL:2006/02/21(火) 23:39:35 ID:???
>>46
かわいいイルカが動いてくれるやつがあるよ
InnoDBでcount(*)するといっぱい泳いでくれるよ
48NAME IS NULL:2006/02/21(火) 23:40:19 ID:???
49JDBCドライバの中の人 ◆K1AKxx0vr2 :2006/02/22(水) 01:23:44 ID:???
>>41
ストレージエンジンは何を使ってるの?
InnoDBの場合には「マルチバージョニング同時実行制御」が実装されているので、
SELECT中のINSERT/UPDATE/DELETEあるいはその逆も同時にガシガシ行えるはずだよ。
http://dev.mysql.com/doc/refman/4.1/ja/implementation.html

MyISAMでLOCK TABLEしてるなら無理だけど。
50NAME IS NULL:2006/02/22(水) 01:36:56 ID:???
中の人はアドバイスが的確というか、さすがですな。
(嫌みではないですよ)
51NAME IS NULL:2006/02/22(水) 05:59:40 ID:???
>>50
そんなホメても何もでないからね。てれるじゃねぃかよ。

52NAME IS NULL:2006/02/22(水) 16:33:41 ID:yf3Bz3Qo
41です。
極力delayedは使用を避けるように書いてあるから何か心配です。。
53NAME IS NULL:2006/02/22(水) 18:15:54 ID:???
環境WinXP Pro SP2

MYSQL 5.0.x

簡単に↓みたいなテーブルを作成したとして、
create table user
( num int( 5 ) )

numに5バイト?より大きいものが入ろうとするとエラーになりますが、
カラムで設定した以上のデータが格納されようとしたときに、
エラーとせずに、途中でデータをぶったぎって格納するみたいな設定はどこでするのでしょうか?
54NAME IS NULL:2006/02/22(水) 18:56:22 ID:???
>>53
trigger
55NAME IS NULL:2006/02/22(水) 21:57:41 ID:FX7brAdQ
テーブル接頭語とは何ですか?
だれか教えてください。
56NAME IS NULL:2006/02/22(水) 22:42:10 ID:YqcjGihj
mysqlでBEGINした後COMMITするまでテーブルロックがかかってしまうのですが、これを行ロックにする方法を教えてもらえませんか
57NAME IS NULL:2006/02/22(水) 22:49:58 ID:???
>>56
commitするまではロックはかかっていませんよ
58NAME IS NULL:2006/02/22(水) 22:52:37 ID:???
>>52
強制終了したら、キューに溜まってるレコードが無いことになるだけかと。

あるいは>>49にもあるようにInnoDBを使うとか、
レプリケーションを使って重いSELECTはスレーブ側で実行するとか。

59NAME IS NULL:2006/02/22(水) 22:53:08 ID:???
>>56
InnoDBを使えば?
60NAME IS NULL:2006/02/22(水) 23:29:57 ID:YqcjGihj
ループ
@begin
Aテーブル1SELECT
Bテーブル2INSERT
Cコミット
ループ終わり
この場合どのテーブルにロックがかかるんですか?
61NAME IS NULL:2006/02/22(水) 23:43:05 ID:???
>>60
2)で1にREADロック
4)で2にWRITEロック
62NAME IS NULL:2006/02/23(木) 00:07:42 ID:???
>>55
データべース(DBMSのことじゃないよ)を複数使って切り分けられない事情がある場合に、
そのデータべースの中でユーザやアプリケーションの名前空間を切り分けて
利用する方法のひとつで使われるもの。

具体的にはテーブル名に"user01_","user02_"…などのユーザ毎の接頭語(または接頭辞)
アプリケーション毎に"apl01_","apl02_"…などの接頭語(または接頭辞)を付けて区別する。

あくまでもDB利用方法の一形態であって、DBMSの機能ではないよ。
63NAME IS NULL:2006/02/23(木) 00:17:02 ID:???
>>60
2つクライアント立ち上げてやってみりゃ分かるだろうに。
64JDBCドライバの中の人 ◆K1AKxx0vr2 :2006/02/23(木) 02:27:13 ID:???
>>60
どんなテーブルに対してどんなSELECT文、INSERT文を実行しているのか知らないけど、

mysql> show status like '%lock%';

ってやってみたら何か分かる鴨〜。

あるいは

mysql> show innodb status \G

おまけ:
>>51おまいさんは誰だw
6551:2006/02/23(木) 02:52:31 ID:???
そーです。私が変なおじさんです。
66NAME IS NULL:2006/02/23(木) 03:00:58 ID:???
>>63
ロックされてるかどうかをチェックするなんてできんの?
67JDBCドライバの中の人 ◆K1AKxx0vr2 :2006/02/23(木) 03:30:05 ID:???
>>66
ロックの挙動、分離レベルごとのSELECTの挙動を調べる際に、コンソール(mysqクライアント)を
複数立ち上げて、というのはよくやるよ。

ロックされていれば、文字通り、"insert into hoge values (hogehoge)"とやったときにリターンしない。

ちなみに、InnoDBでデフォルトの分離レベル(Repeatable Read)で動かしている場合には、
SELECTは何のロックも発生しないよ。(共有ロックも、もちろん排他ロックも)

"LOCK IN SHARE MODE"か"FOR UPDATE"をつければそれぞれ共有ロック/排他ロックが発生するけど。
68NAME IS NULL:2006/02/23(木) 03:38:25 ID:???
>>67
> >>66
> ロックの挙動、分離レベルごとのSELECTの挙動を調べる際に、コンソール(mysqクライアント)を
> 複数立ち上げて、というのはよくやるよ。
たとえば、多数の更新処理が行われてるとしたときにselectかけてみるとする
その状況を再現するにはどうすればいいの?


> ちなみに、InnoDBでデフォルトの分離レベル(Repeatable Read)で動かしている場合には、
> SELECTは何のロックも発生しないよ。(共有ロックも、もちろん排他ロックも)
別スレッドがcommitしてWRITEロックを持っているときに、
その対象行を取得しようとしたときの挙動はどうなるのでしょうか?
69JDBCドライバの中の人 ◆K1AKxx0vr2 :2006/02/23(木) 04:04:16 ID:???
>>68
再現、というのは負荷テスト的な話のことかな?

InnoDBにおけるマルチバージョニング同時実行制御をコンソールレベルで確認する場合には、以下を

■まずコンソール1にて
mysql> create table t1 (c1 int primary key, c2 int) engine=innodb;
mysql> insert into t1 values (1,1),(2,2),(3,3);
mysql> begin;
mysql> update t1 set c2=20 where c1=2;

■続いてコンソール2にて
mysql> select * from t1;

→マルチバージョニングにより、c1=2の行でブロックされずに読める。
→またc1=2の行はc2=2のままである。

■続いてコンソール1にて
mysql> commit;

■続いてコンソール2にて再度
mysql> select * from t1;

→commitされたので、c1=2の行はc2=20となっている。

ちなみに、コンソール2側でもbeginしてからSELECTした場合、自身がcommitするまで
コンソール1側の更新値は読まない。

。。。てかこれ、普通に分離レベルの説明と一緒だな。。マルチバージョニングによりロックが発生しないという点を除いて。

↑↑↑
こういうのが基本形。更新処理が多数=あるトランザクションが更新中の行を他のトランザクションが読みにいく、
というケースが頻発する、と考えると、この基本形がいたるところで発生すると理解可能。

実際の高アクセス時を再現したい場合には、マイクロベンチマークツールを使って、
このようなクエリを実行するようにして負荷テストを行う、という感じだとおもいまふ。

70JDBCドライバの中の人 ◆K1AKxx0vr2 :2006/02/23(木) 04:28:30 ID:???
長くなったので分けて続投。

>>68
すまんです。何を知りたいのか、ちとよく分からないのだけれども。
COMMITが発行された後に、発行されたSELECTのことですか?

とりあえず一般的な説明を置いておきます。

以下もInnoDBの話ね。

ある行のカラムを誰かがUPDATEで10から20に更新したとする、COMMITはまだしていない状態ね。
この時、InnoDBでは行そのものに対して10から20へ値を書き換える。と同時に、
値10はUNDOログの領域(メモリ上)にコピーされる。なぜなら、この後ROLLBACKされたら、
戻さなきゃならないから。

で、マルチバージョニングというのは、共有ロック/排他ロックを伴わないSELECT(InnoDBだと普通のSELECT)が
このタイミングで行われた時に、行のところにある20を読みに行くのではなくて、UNDOログにある10を読んで返す、
ということが行われる。ちなみに、これはOracleの「読み取り一貫性」といわれているものと同じだと思う。
UPDATEを行ったセッションにより、行そのものは排他ロックされているが、他のセッションはこの時、
行ではなくUNDOログを読んでいるのでロックの影響(待たされる)を受けない。

(というか、↑マルチバージョニング同時実行制御の一般的な説明だなあこれは。)

で、この後、めでたくUPDATEしたセッションはCOMMITを発行したとする。
すると、UNDOログにコピーされた値10は、もうROLLBACKされることは無いため不要となるね。
InnoDBではこの値10は次に、History Listと呼ばれる領域(メモリ上)へコピーされる。

このCOMMIT後にSELECTを行うと、言うまでも無く行にある値20を読み込む。これは当たり前ですな。

ただし、このSELECTを行うセッションがトランザクションが有効で、このCOMMITよりも前に
一度UNDOログから値10を読んでいた場合、再度SELECTすると、行の値ではなく、History Listの値を読みに行く。
従って、値20ではなく値10が返る。

(というか、これはマルチバージョニングにおける、REPEATABLE READの説明だな。)

-- ここまでが高レイヤーの話で、ここから先は低レイヤーの話 ---

COMMITコマンドをMySQLサーバが受け付けた場合、トランザクションログ(REDOログ)へ
書き込みを行ったとリターンする。これは通常の設定ではDisk I/Oを伴うものなので、ある程度の時間がかかるわな。
このDisk I/O待ちの間に、別のセッションがこの行をSELECTしようとする場合を想定するなら、
やっぱり待たされるとおもう(これはおいらの推測)。
History Listを読みに行く場合(重複読み)には、UNDOログからHistory Listへの移動待ちが
理論上あるかもしれないがDisk I/O待ちに比べれば無視できるほど小さいでせう。

おいらもあまりMySQLサーバの中の話は詳しくないのでおかしなところあったらゴメンネ。
71NAME IS NULL:2006/02/23(木) 09:46:43 ID:???
MySQL4.0でデータベースごとに文字コードを指定することはできますか?
72NAME IS NULL:2006/02/23(木) 13:32:15 ID:???
fedora3にソースからphpmyadmin拾ってきて入れたんだけど、
euc-jpが選べない、
これはmysqlかphpの問題どっちでしょうか?
73NAME IS NULL:2006/02/23(木) 15:05:21 ID:???
>>72
もちっと他人に理解できる説明をする努力を
74NAME IS NULL:2006/02/23(木) 15:12:33 ID:???
>>72
mysqlの問題
再コンパイル
75NAME IS NULL:2006/02/23(木) 15:51:13 ID:???
指定の列が同じ値をもつレコードを抽出したいんだけど
なにかいい方法ありますか
76NAME IS NULL:2006/02/23(木) 16:49:23 ID:???
SELECT WHERE
77NAME IS NULL:2006/02/23(木) 16:50:00 ID:???
って同じ値ならなんでもいいのか
GROUP BYとHAVING併用とか
78NAME IS NULL:2006/02/23(木) 18:51:47 ID:???
GROUP BY だと1レコードしか出力してくれなくね?
79NAME IS NULL:2006/02/23(木) 19:11:20 ID:???
>>78
同じ値を1グループとして1行しか返さないね。

SELECT * FROM t
WHERE key in ( SELECT key FROM t GROUP BY key HAVING count(key) >1)
か、冗長だけど
SELECT * FROM t t1
WHERE key = ( SELECT key FROM t t2 WHERE t2.key = t1.key GROUP BY key HAVING count(key) >1)

いまへろへろっと書いたSQLなので通るかは知らぬ。
80NAME IS NULL:2006/02/23(木) 20:53:57 ID:4uFzTdYN
フィールドってなんですか?
81NAME IS NULL:2006/02/23(木) 20:54:40 ID:???
>>79
できた!ありがとう!
INがポイントね。うっかりしてた。

でも思ったより重いな。
これを足がかりに高速化してみます。
82NAME IS NULL:2006/02/23(木) 21:22:33 ID:???
>>80
「データベース フィールド」でぐぐれ。
83JDBCドライバの中の人 ◆K1AKxx0vr2 :2006/02/23(木) 21:24:49 ID:???
>>71
データベースごとの文字コード指定はMySQL 4.1からだね。ごめんねー。
84NAME IS NULL:2006/02/23(木) 23:25:36 ID:???
中の人ハケーン!

某所で、MySQL cluster + CONNECTER/J の記事を見たんだけど、
ndb-clusterもサポート範囲内?

情報少なくて壁に当たりそうな気がするので、頼りにできるかとりあえず聞いておく
85NAME IS NULL:2006/02/24(金) 00:56:01 ID:???
>>84
JavaPressの記事のことかな? ならその記事を書いたのはおいらだw 
ただし、個人で遊ぶ範囲なら対応可といえるかもだけど、ちゃんとしたSIで使うなら、
Clusterはどこかの商用サポートも使っておいたほうがいいとおもふ。
特にノード数をかなり増やすような場合にはね。
86JDBCドライバの中の人 ◆K1AKxx0vr2 :2006/02/24(金) 00:57:13 ID:???
>>85
名前付け忘れ
87NAME IS NULL:2006/02/24(金) 02:10:09 ID:???
すごく初歩的なことだと思うんですが、

mysql4.1で(windows環境、MAXは入ってません。)、
複合キーを設定しようと思い、複合キーが無いので本に書いてある通り

CREATE TABLE MASTER_DATA(
MASTER_ID INT NOT NULL PRIMARY KEY,
MASTER_NAME_ELE VARCHAR(35) NOT NULL PRIMARY KEY,
MASTER_VALUE_ELE TEXT
)

とやったのですが

Multiple primary key defined

とエラーが帰ってきてしまいます。
複数指定できないのでしょうか?

どうすれば二つ以上のフィールドを主キーにできますか?
一応参考にした本(MySQL徹底攻略ガイド[技術評論社])の内容

CREATE TABLE テーブル名(
フィールド名 型 NOT NULL PRIMARY KEY,
フィールド名 型 NOT NULL PRIMARY KEY,
・・・・・・
)

と書いてあったのですが、複数でいけるんでしょうか?

だとしたら、数値型と文字型を主キーに出来ないとかでしょうか。
よろしくお願いします。
88NAME IS NULL:2006/02/24(金) 02:18:07 ID:???
>>87
ほんと初歩的だね。

CREATE TABLE hoge
 ( id INTEGER,
  name VARCHR(35),
  VALUE TEXT,
  CONSTRAINT PK_hoge PRIMARY KEY ( id, name) )
8984:2006/02/24(金) 02:36:29 ID:???
>>85
ひょっとして漏れって運がいいかも!?

空気嫁と言われそうだが、知ってそうなので早速質問
ndb-clusterを構築する際に、managementノードを冗長化するのは不可?

確かにmanagementノードが落ちただけではSPoFにならないっぽいけど、
問題無ければheartbeat等で冗長化したい。その方が手放しで運用できるから。
ただ、managementノードとdataノードの間のやりとりの詳細がどうなっているかまでは
記事からは読み取れないので、フェイルオーバー・フェイルバックかけても大丈夫なのかどうか疑問になってる。

どこかでFAQで出ているようだったらスマン。
90JDBCドライバの中の人 ◆K1AKxx0vr2 :2006/02/24(金) 03:03:37 ID:???
>>89
Managementノードを複数起動する、ってのは想定しないかも。試してないので分からぬ。

89さんに期待させてしまったとしたらスマソ。やっぱConnector/J側以外はちと自信無し。
以下を参考にしてくれたらありがたい。てかもうこのあたりはチェック済みか?

(日本語) ttp://www.ipa.go.jp/software/open/forum/development/#2
(日本語) ttp://www.hirohama.biz/fswiki/wiki.cgi?page=FrontPage
(英語) ttp://dev.mysql.com/doc/refman/5.0/en/ndbcluster.html
91NAME IS NULL:2006/02/24(金) 03:56:07 ID:???
わざわざ夜遅くまでサンクス。

やっぱり英文読むしか無いのかな
数万程度で日本語サポート受けれるなら買ってしまいたいんだが、
桁が一桁違うんだよなぁ・・・・

とりあえずもう少し足掻いてみます。
92NAME IS NULL:2006/02/24(金) 05:01:42 ID:KEz4NyP4
>>88
CONSTRAINT〜〜
っていうのが何か分からなかったので、試行錯誤した結果、
PRIMAEY KEY(id,name)
だけでいけることが分かったので、それでやる事にします。
ありがとうございました。
精進します。
93JDBCドライバの中の人 ◆K1AKxx0vr2 :2006/02/24(金) 07:16:40 ID:???
>>90
タイムゾーンがいまPSTなのでこっちは朝〜昼だよw 役に立てなくてごめんね。
年間数万でクラスタのサポート・・・てのはMySQL ABでも無理だろうなぁ。
ましてや日本企業だと完全な赤字だろう。

まあ自助努力による技術力の向上と経費節減がOSSなわけだし、とりあえず健闘を祈る(^^
94NAME IS NULL:2006/02/24(金) 12:45:28 ID:???
>>92
CONSTRAINT hogehogeは、その主キー制約の名前をつけること。
制約に名前付けて何がうれしいか、という点については、
1. 制約の有効・無効を切り替えるとき指定しやすい
2. PRIMARY KEYやUNIQUE制約だと、インデックスの名前に使われたりする
95NAME IS NULL:2006/02/24(金) 20:16:55 ID:???
金出すならオラクルの方が楽でいい。
無料で使えるのがオプソのメリット。
96NAME IS NULL:2006/02/25(土) 14:41:10 ID:???
中の人に質問

JDBCのおすすめの参考書、何かありますか?
97JDBCドライバの中の人 ◆K1AKxx0vr2 :2006/02/25(土) 16:22:17 ID:???
>>96
難しい質問ですな。一冊もJDBC本読んだことない(^^;
96さんはどんなことを知りたいのでしょう?

JDBC参考書の決定版=JDBC 4.0 Spec (現在はPublicDraft版、英語のみ)というのがありますが・・・。
JDBC 4.0 Specは過去の仕様の集大成+新機能追加分なので。
http://jcp.org/aboutJava/communityprocess/pr/jsr221/index.html
98NAME IS NULL:2006/02/25(土) 22:20:42 ID:CcAG7UPd
おしえてちょ
テーブル名kuruma
id syasyu
1 カローラ
2 ティーダ
3 アクセラ
というテーブルがあるとして、
select syasyu from kuruma
とすると全行取得できるんだけど
select * from kuruma where syasyu = "カローラ";
とsyasyuを指定すると取得できなくて困ってます。

mysql4.0系とかねやんmysqladminをつかってます。

かねやんでselect syasyu from kurumaの結果を
csvファイルで出力してエディタでみると1行おきに
空行が入ってるのでsyasyuの後ろに何かよけいなものが
ついているかと思うんだけどなにがついてるか確認する
にはどうしたらいいでせうか?

99NAME IS NULL:2006/02/26(日) 01:25:46 ID:???
>>98
改行でもはいってるんじゃねぇの?
10098:2006/02/26(日) 07:50:10 ID:lbSCs5sW
レスありがと。
空行が入ってることから改行が入ってることは
多分そうだと思うんだけど
誰が入れたんだ(怒!
ところですでに入ってしまってるデータから改行文字を
取り除くにはどうしたらいいんでしょ?
101NAME IS NULL:2006/02/26(日) 08:11:20 ID:???
>>100
ヒント:マニュアル
102NAME IS NULL:2006/02/26(日) 16:09:01 ID:???
> 誰が入れたんだ(怒!
10372:2006/02/26(日) 23:33:22 ID:???
>>74
再コンパイルしたけど無理でした、--with-charset=ujis とかしても
無理。
MySQLの問題ではないよう。正確に言うと、
MySQLとPhpmyadmin両方の問題っぽい。
MySQL4.0なら問題なくeuc-jp選択可、
MySQL4.1ならphpmyadminが2.5以下じゃないと選択不可、
色々調べたがよくわからん、日本語ではphpmyadminがmysql4.1にちゃんと
対応していないってことですかね。誰かへるぷみー
104NAME IS NULL:2006/02/27(月) 00:16:12 ID:???
なんか知らんけど、MySQL 4.1.12 + phpMyAdmin 2.6.4-pl1 に

> ujis (EUC-JP Japanese)
> ujis_bin 日本語, バイナリ
> ujis_japanese_ci 日本語, 英字の大小を区別しない

ってあるけど?
105NAME IS NULL:2006/02/27(月) 02:05:48 ID:39oPOPzH
最近MySQL使い始めたのですが,datetime型とかtime型とか
なんのためにあるんでしょうか?使い方がいまいち分からないのですが,
varcharやtextで保存するのと何か違いがあるのでしょうか?
106NAME IS NULL:2006/02/27(月) 03:24:37 ID:???
>>105
日付用関数もあることだし
自動補完機能が働くから SELECT や UPDATE に便利でウッハウハ

以上
107NAME IS NULL:2006/02/27(月) 04:49:33 ID:???
WinXP + MySQL4.0.26です。
コマンドプロンプトから操作しているとき、構文エラー等があるたびにビープ音がピーピー鳴ってやかましいです。
これを消すにはどうすれば良いですか?
ググって、my.iniに以下のように記述しましたが効果がありませんでした。
[client]
set-variable=no-beep
108NAME IS NULL:2006/02/27(月) 05:24:09 ID:???
ヒント:phpMyAdmin
109JDBCドライバの中の人 ◆K1AKxx0vr2 :2006/02/27(月) 06:20:47 ID:???
>>107
mysql -b または mysql --no-beep だよ。
my.iniに書くなら、[client]じゃなくて[mysql]だよ。←ぐぐった先のBlogにも(略

そ も そ も グ グ ら ん で も mysql --help に ( r y
110NAME IS NULL:2006/02/27(月) 08:18:26 ID:???
内蔵スピーカの配線ぶった切る これ最強
111NAME IS NULL:2006/02/27(月) 09:22:44 ID:???
Win版ですが昨日初めて2003Serverにインストールして動かしてみて
1度再起動かけてみるとbinフォルダからmysqld-max-nt.exeが消えていて
動かない状態になってました。
こういうことってよくあるんでしょうか?
112NAME IS NULL:2006/02/27(月) 09:47:02 ID:???
SELECT * FROM hoge GROUP BY a;
としたとき 出てくるレコードはユニークなaのみになるけど
同じaのうち、どのレコードになるかは決まってない?
ORDER BY b とかなんかで一番大きいbをもつもの とか
選択できる?
113NAME IS NULL:2006/02/27(月) 09:52:52 ID:???
>>112
GROUP BYの使い方は、グループ化であって、ユニーク取得じゃないよ。
本来はグループ化項目以外はSUM, MIN, MAXなりを使わなきゃいけないのを、
MySQLが利便性考えて返してるだけ。
まあ、HAVINGでも試してみてください。期待の結果が得られても、SQL標準じゃないのだけは
ご承知おきを。
114NAME IS NULL:2006/02/27(月) 09:54:22 ID:???
>>111
うぃるす。


スタートアップ時に、前回起動直後の状態に戻す
ツールでも入ってるんじゃないの?
115JDBCドライバの中の人 ◆K1AKxx0vr2 :2006/02/28(火) 06:22:50 ID:???
そろそろ中の人じゃなくなるのでこのコテで書くのはこれで終わりにします。
短期間でしたが声援ありがとうございました。ヘタレなQ/Aにもお付き合い頂きありがとうございました。
これからもMySQLをみんなよろしくね〜ノシ
116NAME IS NULL:2006/02/28(火) 09:14:02 ID:???
>>115 中の人
お疲れさまでした。いろいろ勉強になりました。
今後も名無しでもいていただけるとありがたいです。
117NAME IS NULL:2006/02/28(火) 17:19:48 ID:GYdaipXD
質問させてください。
DATETIME型を引数に取るストアドを作って
呼び出してみたのですが、どうも受け付けてもらえません

DATETIME_T01('1800-01-01 10:01:01')
DATETIME_T01(1800-01-01 10:01:01)
DATETIME_T01("1800-01-01 10:01:01")


この指定方法で試してみました。
どう指定したら動くか教えてください。お願いします
118NAME IS NULL:2006/02/28(火) 18:26:16 ID:???
俺、PHPからver.3系使ったんだけど
DATETIME型に突っ込むクエリに含まれる
ハイフンやコロンでだいぶはまったことがあるよ。

出力を変数に格納して直接クエリに流し込めないのだと
わかるまですっげえ悩んだ。
119NAME IS NULL:2006/02/28(火) 18:43:22 ID:???
>>117
どう受け付けてもらえないのか、早い話エラーメッセージを書いたほうが回答しやすいです。
いまマニュアルにあたれないのですが、引数上で文字列→DATETIMEへの変換を自動でさせようと
しているようですが、明示的にDATETIME型へ変換し、それを引数としてみたらいかがでしょう?
120NAME IS NULL:2006/02/28(火) 23:58:10 ID:U459FQMy
IDにMySQL出ました
121NAME IS NULL:2006/03/01(水) 00:09:48 ID:???
Known Limitations of MySQL Cluster
* When using multiple management servers:
o You must give nodes explicit IDs in connectstrings because automatic allocation of node IDs does not work across multiple management servers.
o You must take extreme care to have the same configurations for all management servers. No special checks for this are performed by the cluster.
o In order that management nodes be able to see one another, you must restart all data nodes after bringing up the cluster. (See Bug #13070 for a detailed explanation.)

MySQL Cluster FAQ
Q. Is it helpful to have more than one management node for a cluster?
A. It can be helpful as a fail-safe. Only one MGM node controls the cluster at any given time, but it is possible to configure one MGM as primary, and one or more additional management nodes to take over in the event that the primary MGM node fails.

同じマニュアルの中の別部分なんだけど、どう解釈すればいいんだろう
前者は「ヤメトケ」 後者は「ゼヒトモヤレ」っぽいんだが・・・・・
122NAME IS NULL:2006/03/01(水) 04:14:51 ID:qaOP2plP
>>121
前者
複数の管理サーバーを置くことの注意事項について
1.ノードのIDはコネクトストリングで明示的に指定すること
2.すべての管理サーバーに同一のコンフィグレーションを設定するように注意すること
3.管理ノードがお互いを認識できるようにするために、クラスターを立ち上げた後にすべてのデータノードをリスタートさせること


後者
クラスター内での複数の管理ノード(MGM node)を置くことの有用性の説明
フェイルセーフとしてよろしいと

123NAME IS NULL:2006/03/01(水) 10:18:05 ID:0+6rSoKm
>>119
そうですね、すまんです。

ただ、エラーコードも↓なんですよね、あまり役に立たないような。
エラーコード:1064 [MySQL][ODBC 3.51 Driver][mysqld-5.0.18-nt]You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DATETIME_T01(1800-01-01 10:01:01)' at line 1
SQLステータス:37000

とりあえず、CAST使って明示的に変換してみたんだけど、やっぱり駄目でした。
MySQLでストアド使ってる人って少ないんですかね。ぐぐっても殆ど出てこない。
124123:2006/03/01(水) 10:30:37 ID:0+6rSoKm
すまない、俺は重大な過ちを犯していたようだ・・・・




ストアド呼ぶときCALL付け忘れてた(´д`)すさまじくすいません。
125NAME IS NULL:2006/03/01(水) 10:41:04 ID:???
>>124
気にスンナ! 誰にでも間違いはある
126NAME IS NULL:2006/03/01(水) 10:52:32 ID:???
>>124
DB(とプログラミング)暦2週間の俺と同じエラーだけど、気にしないでください。
ROMってても、質問内容すらほとんど理解できません…
127NAME IS NULL:2006/03/01(水) 12:14:36 ID:???
>>124
BEGINしてたことならある...
128NAME IS NULL:2006/03/01(水) 13:54:26 ID:???
phpmyadmin でmysql管理してます。
apacheのssl経由なら大丈夫だと思ってたんですが、
よく考えたらmysql自体にもssl機能があるんですね。

この場合データの盗聴を防ぐにはmysql側でも
sslを使った方がいいのでしょうか?
色々調べてみましたが、よくわかりませんでした。
自宅PCからphpmyadminまではapacheのSSLで暗号化すれば、
phpmyadminとmysqlのやり取りはlocalhostでの
やり取りなので暗号化しなくてもよいのかなと若干思うのですが。
129NAME IS NULL:2006/03/01(水) 14:21:10 ID:???
>>128
[Webブラウザ]-HTTP/SSL-[Apache]-localhost/socket通信-[MySQL]
このデータの流れしかないなら、MySQL側でSSL対応は特に必要ない。
130129:2006/03/01(水) 14:22:48 ID:???
[Apache]は[Apache+PHP]だな。
131NAME IS NULL:2006/03/01(水) 14:23:55 ID:???
>>128
SSLを使うとパフォーマンスがだいたい35%から50%ほど低下します。
インターネットをまたいでサーバへ接続とかで無い限り使う必要ないです。
132NAME IS NULL:2006/03/01(水) 15:11:08 ID:???
別のhostからのサブクエリとかinsert ... select ..っていうのはさすがにできないですか?
133NAME IS NULL:2006/03/01(水) 15:51:12 ID:???
>>132
Federated Storage Engineを使えばできるんでね? 試してないけど。
134NAME IS NULL:2006/03/02(木) 00:14:16 ID:YdphAYN1
mysqlの将来性ってどうですか?
実は最近今後DB系でいこうかなと考えています。
で、検討してるのがOracleかmysqlです。
最近mysqlがenterprise系の機能強化をはかっていると聞き興味津津です。
一昔前ならOracleとmysqlを比べる事自体が間違いだったかもしれませんが今後mysqlの将来性はどうなのでしょうか?
OracleとかSQL、DB2辺りとの比較で教えていただければと思います。
135NAME IS NULL:2006/03/02(木) 00:42:43 ID:???
案件の内容にあわせて、環境は作るものじゃないの?
136NAME IS NULL:2006/03/02(木) 01:16:16 ID:???
>>134
>>実は最近今後DB系でいこうかなと考えています。
本気で「DB系」で飯を食っていこうと思うなら、1つのRDBMSしか知らないんじゃ
あかんと思うよ。マグレーション案件はこれからも増えていくと思うし。
2つ以上を深く知ることで分かることもあるし。

MySQLの将来という点で言えば、OracleやIBMに買収でもされない限りは大丈夫とおいらは思う。

137136:2006/03/02(木) 01:17:16 ID:???
誤:マグレーション
正:マイグレーション
138NAME IS NULL:2006/03/02(木) 13:19:04 ID:???
>>133
ありがとうございます。
その発想を参考にNFSでDBディレクトリをマウントしてうまく行きそうです。
139_:2006/03/03(金) 00:17:05 ID:JlNH6suN
>>136
サンクス。
mysqlのみじゃだめってことっすね。
notesDB勉強しますw

というのは冗談で、notesDBとかexchangeのアーカイブ製品コレで作れないかなぁと考えたのです。
140NAME IS NULL:2006/03/03(金) 01:26:25 ID:???
>>139
MySQLはいろんなStorage Engineがあるので、まだ知られざる活用法とかもあるとおもう。
元Oracle使いがMySQLを使うとInnoDBマンセーになってたわけだけど。

あるいは技術力があるなら、自分で特定用途のStorage Engineを書いてアプリからは
MySQL経由で呼ばせるというのも有りだと思う。あるいは既存Storage Engineに
自分で機能追加(独自ログ出力等)も有り。Google,Incはこの方法だな。
141NAME IS NULL:2006/03/03(金) 02:12:03 ID:???
> 既存Storage Engineに自分で機能追加(独自ログ出力等)も有り。Google,Incはこの方法だな。
どこかに載ってた? 気になる・・・・・
142NAME IS NULL:2006/03/03(金) 03:19:39 ID:???
VineLinuxでサーバを作ってデータを検索できるサイトの作成を行ってます。
PHPでMySQLに接続して検索したりデータを更新したりできるようにしたいのですがいくつか不具合があります。
それがサイト自体の作成はWindowsで行っていてWindowsでは起こらない不具合なのです。
ちなみにWinもLinuxも同じ程度のスペックです。

1.データベースには接続できるけどデータベースへの書き込みやデータの更新ができない。
2.データの検索にLinuxの方が比較にならないくらい大きく時間がかかる。

基本的な所でそういうよくある凡ミス的なことで考えられることってありますか?

人の手伝いということで全く知識がない状態なので内容が適当ですみません。
143NAME IS NULL:2006/03/03(金) 05:55:39 ID:???
>>131
インターネットをまたいで別のmysqlサーバーから重要データとか
引っ張ってくる場合は、SSLを使うべきでしょうか?
パフォーマンス落ちるといわれると激しく鬱ですね
144NAME IS NULL:2006/03/03(金) 08:27:14 ID:???
>>142
1. データファイルのパーミッションがread onlyとかいうオチかな?
insert,updateしたときのエラーが分かると検討つけやすい

2. 設定は本当にWin, Linuxともに同じものなのか
145NAME IS NULL:2006/03/03(金) 09:55:55 ID:???
>>143
VPNにして暗号化は別のにやらせればいいと思う
146NAME IS NULL:2006/03/03(金) 16:55:52 ID:???
鯖のCPUで暗号化するとそりゃ遅く成る罠。
普通はまたがないように、ネットワーク構成採るけどな。

あとは重要データを流出する覚悟でどうぞ(w


人の手伝いと逝っても金貰ってるんだろ?
自分で解決出来ないなら仕事受けるなよ。
知識が無いなら金で買えよ。いいSIに丸投げ汁!


MySQLに限らんけど、オープンソースは自己拡張してなんぼ。


ノーツやエクスチェンジはDB2やSQL serverを前提にしてる所が有るから、MySQLの置き換えは勧めない。
無料の代わりに苦労したければがんがれ。


JDBCドライバの中の人はJIS(iso2022jp)の実装ヨロシコ。
変換面倒だと思うからbrokenでjisで突っ込んでjisで出すのしかサポートせずエラー返しまくりでいいから(笑)。
147NAME IS NULL:2006/03/03(金) 22:42:30 ID:???
>>141
Googleによるカスタマイズの件は、2005年のMySQLユーザカンファレンスの
とあるセッションで出た話なのだ。ネット上にソースがあるのかどうかは知らん。ゴメンネ。
148NAME IS NULL:2006/03/04(土) 20:22:36 ID:???
アンケート結果に順位を付けようとしています。

フィールドにpoint(得点),rank(順位)があります。
pointをSELECTして得点が高い順に順位をつけてrankへUPDATEとしているのですが、
ORDER BY で取って来た順番をrankへ入れると、同点順位になりません。

例えば、Aさん、10点。Bさん8点、Cさん8点、Dさん5点の場合
求めているのは、 A:1位、B:2位、C:2位、D:3位
ソートでは、 A:1位、B:2位、C:3位、D:4位
になってしまいます。

何かいい方法はありませんでしょうか?
149148:2006/03/04(土) 20:34:05 ID:???
訂正
×求めているのは、 A:1位、B:2位、C:2位、D:3位
○求めているのは、 A:1位、B:2位、C:2位、D:4位

一回SELECT取り出してから、UPDATEしようとしています。
#SQLで処理できたりしませんよね…
150NAME IS NULL:2006/03/04(土) 21:00:04 ID:???
>>149
もし5.0以上なのであればストアド使えばいいんじゃない?
151NAME IS NULL:2006/03/04(土) 21:33:30 ID:???
MySQLはupdate文に相関サブクエリって使えたかな?

update table1 T
set rank=(
select count(*)+1 from table1
where point<T.point
)
152NAME IS NULL:2006/03/04(土) 21:33:52 ID:???
>>150
5.0以上でないもので…
5.0以上でもストアドプロシージャ?でのやり方がわかりませんし…
153NAME IS NULL:2006/03/04(土) 21:49:33 ID:???
>>151
相関サブクエリ Mysql でググってみましたけど4.1から対応なんですかね…
よくわからなかった orz..
154NAME IS NULL:2006/03/04(土) 21:51:36 ID:???
順位を振る関数はMySQLには無いからアプリ側でやった方が早い様な?違う?
155NAME IS NULL:2006/03/05(日) 08:48:36 ID:???
>>153
もし使えないとしても、原理は>>151の通りだからわかるだろう。
(>>151は不等号の向きが間違っている気がするが)
順位はorderで求めるんじゃなく、「自分より得点が高い件数+1」だ。
156NAME IS NULL:2006/03/05(日) 15:45:16 ID:???
>>155
なるほど、そういうことですか。やっとアルゴリズムが理解できました。

>>151 を5.0を入れてやってみましたがエラーになりました…

UPDATE table1 T set rank=(SELECT COUNT(*)+1 FROM table1 WHERE point > T.point)

エラー内容
1093: You can't specify target table 'T' for update in FROM clause

Tを消しても、table1,Tにしてもエラーでダメです…
table1とTはテーブル名だと思うのですが,どちらも同じテーブルですが、同じテーブルに
UPDATEはかけられないのですかね…
157NAME IS NULL:2006/03/05(日) 18:28:29 ID:???
お邪魔します。こちらでお尋ねして宜しいでしょうか。
「TurboLinux7 Server」に「MySQL(rpm版 3.23)」を入れて、「Apache(rpm版)」と「PHP(rpm版)」を使ってます。
「/home/」ディレクトリに容量の大きい後付のHDDをマウントしたので、データベースディレクトリをそちらへ移動して、
「MY.CNF」の設定も変更して「Linux」のコマンドラインでは正常に動作するのですが、
今まで動いていたPHPスクリプトでデータベースへの接続が出来なくなってしまいました。

「php.ini」の関連項目も修正しましたし、試しに"localhost"の後にポート番号や
ソケット位置も指定しましたが改善されません。

データベースディレクトリのパーミッションも間違えて無いと思いますし、色々検索し
てみたのですが探し方が悪いのか解決策に行き当たりません。
他に何か原因が有りますでしょうか?
158NAME IS NULL:2006/03/05(日) 20:27:18 ID:???
>>157
>「Linux」のコマンドラインでは正常に動作するのですが、
>今まで動いていたPHPスクリプトでデータベースへの
>接続が出来なくなってしまいました。

なら、PHPが吐いてるエラーぐらい提示せよ。
つかPHPの範疇だと思うけどな(それは構わないけど)
159NAME IS NULL:2006/03/05(日) 20:46:28 ID:???
>>13
銀河鉄道999の冥王星の描写がそんな感じ。
160159:2006/03/05(日) 20:48:02 ID:???
30km先目標の誤爆
161NAME IS NULL:2006/03/05(日) 21:14:03 ID:???
つい数日前だが、
mysqlテーブル(権限テーブル)をMyISAM以外でimportすると、
mysqlのコマンドプロンプトからはログインできるのに、
libmysqlclient経由ではログインできなくなった。

PHPはlibmysqlclient経由だと思うので、恐らく同じことが起きると思う。

とりあえずmysqlコマンドプロンプトで確認 って常識が通用しない現象なので注意汁
162157:2006/03/05(日) 23:04:22 ID:???
レス頂きありがとうございます。
書き込みして以降も色々調べていたんですが、「Apache」のエラーログで
「MaxClients」の設定が少ないと出まして、調べたらなぜか5になってました。
インストールしたときのまま(150)にしていたはずなのに…。

そこを修正したら今度は
「Can't connect to local MySQL server through socket」
と、データベースディレクトリを移動した時に「MySQL」起動時にコマンドラインで
出たメッセージが出ました(こちらは解決)。

確かにソケットは存在してるんですが…。

取りあえずエラー原因が分かった(ようなので)あれこれやってみます。
ありがとうございました。
163NAME IS NULL:2006/03/05(日) 23:20:36 ID:???
TL7って時点で穴空きまくりだろうな。
インターネットには間違っても公開するな。
164NAME IS NULL:2006/03/06(月) 00:17:53 ID:???
>>162
ソケットファイルの存在だけでなく、パーミッションも確認。
165157=162:2006/03/06(月) 09:40:08 ID:???
>>164
パーミッションですか…一応確認したつもりなんですが…。
出先なので帰ってから再確認してみます。ありがとうございます。

>>163
そんなにやばいんでしょうか。
まぁ、あくまで自分だけでやってるので大丈夫かと…多分…おそらく…。
166NAME IS NULL:2006/03/06(月) 14:28:49 ID:???
すみませんが、質問です。
LinuxでMySQLをアンインストールするには、どうすればよいでしょうか?
/usr/local/mysql を削除し、mysqlユーザを削除するだけで良いのでしょうか?

インストール方法は、バイナリ(5.0.15)に対して以下のように行いました。
(OSはDebian Sergeです)
http://oss.timedia.co.jp/index.fcgi/kahua-web/show/MySQL%c6%fc%cb%dc%b8%ec%a4%ce%ce%b9/%a5%d0%a5%a4%a5%ca%a5%ea%a4%ce%a5%a4%a5%f3%a5%b9%a5%c8%a1%bc%a5%eb
shell# groupadd mysql
shell# useradd -g mysql mysql
shell# cd /usr/local
shell# tar xvzf mysql-standard-5.0.15-pc-linux-gnu-i686.tar.gz
shell# ln -s mysql-standard-5.0.15-pc-linux-gnu-i686 mysql
shell# cd mysql
shell# scripts/mysql_install_db --user=mysql
shell# chown -R root .
shell# chown -R mysql data
shell# chgrp -R mysql .
shell# bin/mysqld_safe --user=mysql &
167NAME IS NULL:2006/03/06(月) 21:52:50 ID:???
だから削除しやすいように、.deb作れよ。
デビアン使ってる意味無いじゃん。デビアンのパッケージシステム使え!
168NAME IS NULL:2006/03/06(月) 22:44:12 ID:???
>>166 このコマンドを打ち込め。すっきりするはずだ。

rm -rf /usr/local
169157:2006/03/06(月) 23:22:32 ID:???
なんとか解決しました。
なんか釈然としない解決策ですが、取りあえず動いたからいいや…。
お騒がせしました。
170NAME IS NULL:2006/03/06(月) 23:25:24 ID:???
>>168
それだと/usr/local以下が全部消えてしまうだろ!
素人に嘘教えるな。

ここは以下のように打ち込めば、今回のユーザに不要な部分が
自動的に全部消えるのでそうしなさい。

rm -rf /usr/local/../../
171NAME IS NULL:2006/03/07(火) 00:02:41 ID:???
それでは何も削除されないよ。これで完璧
find /usr/local/../../ -type f -delete
172NAME IS NULL:2006/03/07(火) 00:05:48 ID:???
あれ?MySQL control center って消えた?
173NAME IS NULL:2006/03/07(火) 02:49:51 ID:???
CC は Administrator に吸収されたからもう使うな
174NAME IS NULL:2006/03/07(火) 03:22:29 ID:???
/usr/includeとかにもインスコされてるから、フォルダごとごっそり消した方がいいよ。
mysqlユーザやグループも作られてるから/etc/passwd*や/etc/groupも消した方がいい。
最後に再起動すれば、きれいに消えた状態で使えるようになる。
175NAME IS NULL:2006/03/07(火) 03:51:53 ID:???
起動しなくなったんですがどうしたらいいでしょうか
176NAME IS NULL:2006/03/07(火) 03:56:41 ID:oIS2f7SY
今、3.23.58をインストールしたんですが、phpinfoでみたらClient API versionが3.23.48なんですがこれは普通なんでしょうか?
177NAME IS NULL:2006/03/07(火) 04:54:28 ID:???
いまどき3.23.*を使う時点で異常
てのは冗談として
APIのバージョンが違うのはよくあること。
同じtarballなりrpmなりでインストールしたなら大丈夫。安心汁
178NAME IS NULL:2006/03/07(火) 08:50:51 ID:???
>>175
つ[バイアグラ]
179NAME IS NULL:2006/03/07(火) 11:11:51 ID:???
漏れのPCがおっきしたよ(w

クライアントAPIバージョンってどこ見てるんだっけ?
% mysql --versionからの抜き出し?
本当は変更無くてもバージョン値は統一すべきだよなあ。何となく気持ち悪い。

バックエンド(インターネットには繋がってない無い鯖)で古いバージョンが動いてるってのは良く有る話だけどな。
SQLインジェクション除けとかアプリケーション鯖で避けてれば問題が出る事はまず無い。
180NAME IS NULL:2006/03/07(火) 14:55:34 ID:???
>>176
PHPをバイナリで入れてるなら普通。
phpinfoのは、phpが使うmysqlクライアントのバージョンだから
そのバイナリがビルドされた時に使われた(組み込んだ)バージョンが表示される。

>>179
バージョンはMySQLサーバと一緒に上がってるよ。
個人的には「変更無くてもバージョン値は統一すべき」なのが気持ち悪い。
クライアントは本体とは別の系列でカウントすべきだと思うんだけどね。
181NAME IS NULL:2006/03/07(火) 17:26:10 ID:???
クライアントがサーバと別の配布なら別けてもいいけどね。
一緒なら上がるのが普通。

% strings /usr/sbin/sshd | grep OpenSSH | grep 200
OpenSSH_3.6.1p1+CAN-2004-0175
% strings /usr/bin/ssh | grep OpenSSH | grep 200
OpenSSH_3.6.1p1+CAN-2004-0175
182NAME IS NULL:2006/03/07(火) 17:55:00 ID:???
あるフィールドの値が、そのフィールドのn番目の値より小さいものをDELETEしたい場合はどんなクエリで実現できますか?
MySQL4.0です。
183NAME IS NULL:2006/03/07(火) 18:02:40 ID:???
n番目とは?
184NAME IS NULL:2006/03/07(火) 18:45:25 ID:???
>>183
すみません。
SELECT num FROM a ORDER BY n, 1
の結果をresとし、
DELETE FROM a WHERE num < res
ということをやりたいのですが、これを一度にやってしまう方法を探しています。
185NAME IS NULL:2006/03/07(火) 19:49:44 ID:???
>>184

サブクエリが使えない4.0で一発では無理かと
186NAME IS NULL:2006/03/07(火) 19:54:42 ID:???
10番目です。
187NAME IS NULL:2006/03/07(火) 20:28:02 ID:???
>>185
そうですか…
4.1に変えてサブクエリを使います。ありがとうございました。
188NAME IS NULL:2006/03/08(水) 14:18:50 ID:???
ttp://www.atmarkit.co.jp/fdb/rensai/sqlclinic12/sqlclinic12_1.html
の複数テーブル同時インサートってMySQLでも可能ですか?
試しにやってみたらSyntax Errorになったのですが・・・
189NAME IS NULL:2006/03/08(水) 20:01:45 ID:6fl6xIiS
いかのようなクエリ文のusingで困っています。
ぐぐったのですが情報がほとんど得られなかったので、詳しい方いらっしゃいましたらご教授お願いいたします。
$sql = 'SELECT cat.* FROM c_commu_category AS cat' .
' INNER JOIN c_commu_category_parent AS pcat' .
' USING (c_commu_category_parent_id)' .
' ORDER BY pcat.sort_order, cat.sort_order';
190NAME IS NULL:2006/03/08(水) 20:37:35 ID:???
どう困ってるのかがさっぱりわからないよ。
191NAME IS NULL:2006/03/08(水) 22:20:26 ID:???
確かに、どう困ってるかわからん。君はこんな質問されて答えられるか??
推測でusing使う場合は、二つの表の列名同じじゃないといけないよ。
192NAME IS NULL:2006/03/08(水) 22:56:59 ID:???
193NAME IS NULL:2006/03/08(水) 23:19:26 ID:hf6SJfRA
データベース初心者なんですが

ID 本文 語数 キーワード(不定数)

みたいなテーブルって作れますか?
作れたとして不都合ありますかね?
194NAME IS NULL:2006/03/08(水) 23:31:58 ID:???
>>193
そのテーブルを作って不定数個のデータを入れるなら構わないけど
そのテーブルが不定なのは設計が宜しくない。
まあ動的にやることもあるにはあるんだけど。
195NAME IS NULL:2006/03/08(水) 23:43:08 ID:hf6SJfRA
>>194レスありがとうございます。

ID 本文 語数 キーワード
01 abc 3 a,b,c

みたいなのはOKですよね?

ID 本文 語数 a b c

みたいなのがダメで。

それとも↓すべきということでしょうか?
ID 本文 語数 キーワード
01 abc 3 a
01 abc 3 b
01 abc 3 c
196NAME IS NULL:2006/03/08(水) 23:50:07 ID:???
>>195
テーブル分けるべ
197NAME IS NULL:2006/03/08(水) 23:54:12 ID:hf6SJfRA
どうわけたらいいんでしょうか?
198NAME IS NULL:2006/03/09(木) 01:39:59 ID:???
>>197
(*ID, 本文, 語数, キーワード)

(*ID, 本文, 語数)
(*ID, *キーワード)
199NAME IS NULL:2006/03/09(木) 11:54:41 ID:???
>>198
よくわかりました。どうもありがとうございます。
200NAME IS NULL:2006/03/09(木) 13:03:22 ID:???
フィールドに配列使えるDBがあるってのをどっかで見たことある
MySQLではできない、対応予定なしなのかな?
201NAME IS NULL:2006/03/09(木) 13:08:07 ID:???
>>200
非一次正規形(NFNF)とかいうやつですね。昔はADABAS Cが対応してました。
いまはOracleとかでもできる…んだよね?
MySQLはinnodbの拡張とかだと難しいけど、バックエンドの追加なら簡単そうだから、
ある日突然サポートするといいだすかもね。
202NAME IS NULL:2006/03/09(木) 18:03:26 ID:???
配列型のフィールドMySQLで使えたらどれだけ便利かといつも思う
まぁテーブル正規化しろ、といわれればそれまでなんだが
203NAME IS NULL:2006/03/09(木) 18:13:16 ID:???
配列使ったら負けだと思う・・・
204NAME IS NULL:2006/03/09(木) 20:53:29 ID:???
中には多次元配列が使えるヤツもあるからな。Firebird とか。
極論で言えば、それだとレコード数1・フィールド数1で済んでしまう。

これに甘えて正規化できないバカが増えそうだ
205NAME IS NULL:2006/03/09(木) 21:54:22 ID:6oW3XNUg
smart styleっていう会社mysql業界ではなまえがうれてそうなんだけどどんな会社?
↓ソの会社のhomePage
http://www.s-style.co.jp/

この前陸那比で見掛けて機になってます

誤字脱字は許して下さい。Fedoraの文字変換デフォで使ってるので、、
206NAME IS NULL:2006/03/09(木) 22:22:16 ID:???
smart style?
初めて聞いた。
207_:2006/03/09(木) 22:44:42 ID:6oW3XNUg
あまり有名じゃないみたいですね
208NAME IS NULL:2006/03/09(木) 23:25:53 ID:???
>>205
大阪の会社で関東には余り出てこない(営業圏じゃない)から首都圏では知名度が低い。
関西のオープンソース関連のイベントには結構、というか殆ど出てるんではないかな。
# イベント自体が少ないから<関西や他の地方
209206:2006/03/09(木) 23:46:55 ID:???
大阪の会社だけど知らんかった。
というか、うちがイベント出てないしw
210_:2006/03/10(金) 00:37:54 ID:97Mv0Gsl
働くにはよい会社ですかねぇ

ちょっと陸那比見て依頼興味があるんで。。。
211NAME IS NULL:2006/03/10(金) 00:46:06 ID:???
配列使えてうれしいの?
フレームワークで吸収すればいいじゃん。
DB依存するとろくな事無いよ。
212NAME IS NULL:2006/03/10(金) 00:59:41 ID:???
正規化すればするほどSQLのレイテンシが悪くなる問題もあるからなぁ
配列使えるなら、使うことで高速化できるケースもかなりある筈・・・・
213NAME IS NULL:2006/03/10(金) 01:29:05 ID:???
配列ねぇ。
検索しないんならSerializeして突っこめばいいんじゃないの?
検索するなら正規化しる!って話だろうし。
214NAME IS NULL:2006/03/10(金) 03:59:12 ID:???
でも配列は誰もが一度は夢見る機能だと思う
215NAME IS NULL:2006/03/10(金) 05:08:33 ID:???
XMLの夢は見た
216NAME IS NULL:2006/03/10(金) 08:21:40 ID:???
YAMLで突っこめ!
217NAME IS NULL:2006/03/10(金) 12:46:49 ID:lWTqMqLd
かねやん MysqlAdminでテーブルに簡単にデータ追加する方法って無いんでしょうか?
かねやんでデータベースのテーブル1を開いて、
空欄をダブルクリックするとレコード詳細が出ますが、
そこから「フィールド内容」に直接書きこもうとしても灰色になってて書きこめません。
218NAME IS NULL:2006/03/10(金) 15:41:31 ID:lWTqMqLd
プライマリキーをテーブルを作った後から設定する方法ってありますか?
219NAME IS NULL:2006/03/10(金) 16:31:35 ID:???
>>217-218
自己解決しました
220NAME IS NULL:2006/03/10(金) 17:36:15 ID:???
YAML嫌いなのでRDocで突っ込む。
221NAME IS NULL:2006/03/11(土) 17:32:33 ID:???
222NAME IS NULL:2006/03/11(土) 17:33:05 ID:???
>>221
スマソ誤爆
223NAME IS NULL:2006/03/12(日) 03:07:50 ID:???
質問です。
mysqldump の出力を、PostgreSQL に取り込みたいのですが、そのままではた
くさんのエラーが出ます。しかし、出力ファイルをエディタやスクリプト言語
で修正するのも手間です。

何か、効率の良い方法はないでしょうか?
MySQLのバージョンは5.0.18、OSはLinux です。
224NAME IS NULL:2006/03/12(日) 12:00:38 ID:???
>>223
生きてるのも面倒だろ?
七輪と煉炭とガムテープが一番効率が良くて簡単だと思うよ。
225NAME IS NULL:2006/03/12(日) 14:07:15 ID:???
>>223
定義だけは手動で作り直したら?
データはCSVでなんとかなるでしょ。

>>224
ワロタ
226NAME IS NULL:2006/03/12(日) 16:49:45 ID:???
>>223
http://osb.sra.co.jp/migration/action.php

マイグレーションの話は、移行予定先DBMSのスレで訊いた方が良いぞ。
227223:2006/03/12(日) 18:59:35 ID:???
結局、
mysqldump --compatible=postgresql
とすれば良いことが分かりました。始めから英文マニュアルを読めばすむこと
でした。
http://dev.mysql.com/doc/refman/5.0/en/mysqldump.html

http://www.hijiki.net/archives/2005_01.html
> それは--compatibleオプションで、mysqldump --compatible=mysql40… とす
> ると出力されるSQLファイルを4.0系のものに変換して出力してくれるのです。
> 驚いたのがoracleやPostgreSQLへ変換するパラメータも有ることです。これは
> 便利だ。

最近感じているのですが、
・5.0系には素晴らしい新機能がたくさんある。・新規開発なら当然5.0を選ぶ
べき。
・しかし日本では今現在4.0系ばかりが使われている。
・よって、ググったり、2chで質問したりしても、そういう情報はなかなか得
 られない。
・あきらめて英文の公式マニュアルを読むべし。それだけの価値はある。

では、失礼します。
228NAME IS NULL:2006/03/12(日) 20:52:53 ID:???
50はまだ実績が無いから人柱。
新規開発でも重要なデータ入れるなら、枯れた40使うべき。
DBは導入後10年ぐらいの付き合いに成る重要なソフトだぞ。
229NAME IS NULL:2006/03/12(日) 21:21:45 ID:???
>>227
--compatible=postgresqlの存在は知らなかった。
どこまでコンパチな内容を吐くのかね。
230NAME IS NULL:2006/03/12(日) 21:26:42 ID:???
>>228
MySQLサーバじゃなくて、付属クライアントだけ切り離して
見てみるのも良い事だと思うけど。
全ての機能が新しいサーバでしか使えないわけでもないんだから。
231NAME IS NULL:2006/03/12(日) 23:06:37 ID:???
honoka varchar(15), nagisa varchar(15), data text という構成のテーブルがあり、
honokaとnagisaをセットでプライマリキーに設定しています。

honokaとnagisaはセットなのですが、検索時においては
honoka単独とかnagisa単独で検索することも多いため、
myadmin使って、nagisaにインデックスを振った状態でさらに
honokaにインデックスを振ろうとしたら
PRIMARY と INDEX のキーは両方とも、カラム `honoka` に設定されるべきではありません。
といわれました。

なぜでしょうか。
232NAME IS NULL:2006/03/12(日) 23:37:23 ID:???
>231
既に honoka, nagisa という順番の主キーがあるので
honoka カラムにそれ以上キーは必要無いから。
nagisa が単独でキーを持つのは意味があるので有効。
233NAME IS NULL:2006/03/13(月) 00:07:20 ID:???
4.0は制限しかなくてできることが少ないので、初心者にはオススメだけど、わかっている奴には物足りない。
5.0はフルスペック目指しているけど、まだまだ開発途上で人柱になるつもりでなければ辛い。
そんな漏れは4.1でbinary指定で使ってる。
英文読む必要があるのは同感。頼むから更新部分の日本語翻訳してくれ。
仕様変更前の情報が載っていて、信用すると動かないってかなり問題だと思うんだけどなぁ


>>231
プリキュアかよ・・・・・
234NAME IS NULL:2006/03/13(月) 01:41:39 ID:???
>>233
なんでまだ binary なの?ソートや文字列演算で問題出ない?
utf8, cp932, eucjpms のいずれかを使えばいいのに。
Javaでは全く問題無いけど、他の言語では違うのだろうか?

MySQL日本語の旅|新キャラクタセットcp932,eucjpmsとは何か
http://oss.timedia.co.jp/index.fcgi/kahua-web/show/MySQL%C6%FC%CB%DC%B8%EC%A4%CE%CE%B9/%BF%B7%A5%AD%A5%E3%A5%E9%A5%AF%A5%BF%A5%BB%A5%C3%A5%C8cp932,eucjpms%A4%C8%A4%CF%B2%BF%A4%AB
235NAME IS NULL:2006/03/13(月) 02:04:12 ID:???
・DBはデータの保証を行う重要な位置付けにあり、入力するデータによって保存問題が起きる時点で論外
・文字コード変換が必要な場合は、DBにアクセスを行うアプリ側で処理すれば良い。
 そもそもDB直接アクセスのインターフェースを一般オペレータに開放するなど考えられない。
・ソートも、基本的に文字コード順でソートできれば無問題。
 どっちにしろ、複雑なソートを行おうとするなら、アプリ側で処理する必要がある。

あと、これはちょっと違うが、
50万件超のレコードを、数千種類のカテゴリでソートすると、SQLだけではとんでもない処理時間になる。
結局アプリ側で処理してるよ。
最近はクイックソートやクイックサーチだけでなくて二分木ライブラリまであるし。
236231:2006/03/13(月) 02:18:23 ID:???
>>232
ありがとう。
ついでにさらに質問

>>231のテーブルにおいて
nagisa を検索するときに 頭9文字で検索することが多いのですが
その場合、インデックスは有効に機能するのでしょうか。
237NAME IS NULL:2006/03/13(月) 03:09:25 ID:???
>>236
つ explain
238231:2006/03/13(月) 04:04:34 ID:???
>>237
ありがとう。こんな便利機能知らなかった。
マーブルスクリュー食らって反省してきます。
239NAME IS NULL:2006/03/13(月) 05:42:34 ID:HUDYj6ns
MySQL4.0.26で、MERGEテーブルのことで質問です。

FULLTEXTインデックスのあるMyISAMをMERGEするときに、
FULLTEXT KEYを入れると
#1214 - The used table type doesn't support FULLTEXT indexes
となりますが、
FULLTEXT Keyを入れないと
CREATE TABLEはできますが、開くときに

#1016 - Can't open file: 'test.MRG'. (errno: 143)
となってしまいます。

どうすれば利用できますか?
240NAME IS NULL:2006/03/13(月) 07:40:41 ID:???
>>239
PRIMARY KEY の問題の可能性。詳細は
http://lists.mysql.com/bugs/14773
241NAME IS NULL:2006/03/13(月) 08:52:56 ID:HUDYj6ns
全く英語がわかりません。。
>MERGE tables do not create indexes on their own,
ぐらいしか解りませんでしたorz
242NAME IS NULL:2006/03/13(月) 09:38:36 ID:???
翻訳サイトにつっこんでみた?
243NAME IS NULL:2006/03/13(月) 10:38:14 ID:???
一体日本の教育はどうなっとるのじゃ!
中・高と英語を6年も学ぶんだぞ?
244NAME IS NULL:2006/03/13(月) 10:40:26 ID:???
もしかしたら専門(MySQL)用語で詰まってるのかも。
それなら日本語で書いても無理。
245NAME IS NULL:2006/03/13(月) 12:01:13 ID:???
timestamp型をindex作成したのですが実際にselectしてみると
データが1件もヒットしません。
これってmysqlの仕様ですか?

Mysql 4.1です。

宜しくお願いします。
246NAME IS NULL:2006/03/13(月) 12:54:04 ID:???
    /    ||    :ヽ
   ┌|(⌒ヽ :|| ..:⌒: |┐   / ̄ ̄ ̄ ̄ ̄ ̄ ̄
   |::|::ヽ.__:):||(___ノ ::|::|  │ 
    |:|: ..   :||    .. |:|  │ 
    :|: ..   ||    ..|| < >>245 日本語でおk 
     :\ [_ ̄] /::|   │ 
::     |\|_|_|_|_/:::|    \________
   __| |   / / :|___
247NAME IS NULL:2006/03/13(月) 14:04:08 ID:???
>>235
そりゃ、ちょっと特殊すぎる事例なんじゃないか?
MySQLが一番多く使われているのは、はてなやmixiのようなWebサイト構築だろう。
そういう運用で、DBデータをSQL以外で処理しているとは思えん。
248NAME IS NULL:2006/03/13(月) 18:07:32 ID:???
> ・DBはデータの保証を行う重要な位置付けにあり、入力するデータによって
> 保存問題が起きる時点で論外

そもそもこの文の意味が分からん。
一つのchar型のカラムに、どんな種類の文字コードでもセットできるようにし
たいってことか?まさか。

一時期あちこちで binary型が推奨されていたけれど、あくまで緊急避難とい
うことだろう。弊害が大きすぎる。

SELECT * FROM [テーブル名] WHERE [カラム名] LIKE '%十%';
binaryだと、こんなクエリをWindowsクライアントから受け付けることすらで
きない。Shift_JIS では、「十」=0x8F5C、「\」=0x5C で重なってしまうから
だ。

MySQLの5.0.4 及び、4.1.12で、cp932とeucjpmsが導入されている。これら以
降のバージョンを使っている、binaryにし続けた方がいい理由なんて、無いと
思うが。
249NAME IS NULL:2006/03/13(月) 19:42:17 ID:YmeF+nF2
今日始めたばかりなのですが質問させてください
とてもくだらないであろう事なのてすが…
4.0.26で本を読みながら接続してみたところできました。
そしてパスワードを設定し一度切断してまた再接続しろと
本に書いてあったのでやってみたところパスワードが違うようで何をやってもだめでした。
はじめからやり直すにはどうしたらよいのでしょうか?
250NAME IS NULL:2006/03/13(月) 19:56:13 ID:???
でも日本語には複数のコードが有る。文字化けと言うかデータ喪失は避けたいとなると、バイナリ処理が一番現実的じゃね?
アプリ側で文字コード変換しても、失う物は失うよ。クライアントからは入力した文字が、DBに入ってないというクレームが来る。
人名系とか氏ねる。

どうせ人柱してくれるなら、嵌ったことをblogにでも書いて公開してぐぐれる様にしてくれ。
同じく、更新部分の英文読む必要に迫られたら、日本語翻訳しろとは言わんからm概要だけでも同じくblogにでも曝してくれ。
みんながそれぞれ英文読む時間の再利用が出来ないのが無駄。

アニヲタ?
ますますDB使いって駄目だなあって言われる悪寒。
251249:2006/03/13(月) 19:58:24 ID:???
すいません自己解決しました
252NAME IS NULL:2006/03/13(月) 20:15:50 ID:???
>>249
管理ユーザのパスワードなら、マニュアルにパスワードを忘れた場合に
権限データベースをスキップしてMySQLサーバを起動させるオプション
のことが書いてあるから、その記述に従うのが良いと思うよ。
253NAME IS NULL:2006/03/13(月) 21:13:38 ID:???
> 一つのchar型のカラムに、どんな種類の文字コードでもセットできるようにし

Macの人だね、きっと。
254NAME IS NULL:2006/03/13(月) 22:27:01 ID:YmeF+nF2
>>252
ありがとう。そりゃそうですよね、よく読み直します。
プログラム系はさっぱりなのであせりました
255NAME IS NULL:2006/03/14(火) 00:08:46 ID:???
>>248
運用時にwindowsから直接SQL叩くのかよ・・・・・・
漏れの感覚ではその時点で正気とは思えない。

\x5c問題が嫌なら、問題が起きないコード体系を使えばいい。
設定したからといって、設定漏れ・ミスで問題が起きない事を保証できるかと言われれば、
漏れは「保証できない」と返答する。

それでなくても、MySQLの文字コード関連は設定が5箇所以上に渡っていて、
それぞれの組み合わせで動作結果が変わる。
ハードウェア障害等で復旧処理が必要になった時に間違わないのかと言われれば
当然リスク要因に挙げられるし、ややこしいことを考えずにbinaryにしておいて、
フロントエンド(アプリ側)で処理させる方が得策だと考えている。


こうやって文字コードで何かと考えなければならない時点で、もうなんというか・・・
256239:2006/03/14(火) 02:26:57 ID:OKJBYypF
何となく雰囲気は読めるのですが、、

FULLTEXTインデックスがないとうまく動くのですが‥
257NAME IS NULL:2006/03/14(火) 15:57:47 ID:???
すみません、以下の違いは何なのか教えていただけませんか?
character_set_client
character_set_connection
character_set_database
character_set_results
258NAME IS NULL:2006/03/14(火) 16:32:55 ID:???
つ google の 1件目
259NAME IS NULL:2006/03/14(火) 20:46:49 ID:???
マカウゼーな。
ろくに文字コードも知らんアフォのくせに。
260NAME IS NULL:2006/03/14(火) 21:35:35 ID:???
>>258
失礼しましたorz
「MySQL文字コード」で検索していました…

もう一つ疑問があるのですが、
character_set_connectionの値は実際にどんな影響があるのですか?
データベースの文字コードがeucjpms、cp932、utf8のものを使って試したところ、
client、resultを設定すれば(シェルでsjis、Perlからutf8で実験)正しくINSERT、SELECT、ORDER BYできたのですが…
261NAME IS NULL:2006/03/15(水) 15:46:22 ID:???
mysqlのユーザのパスワードって何で暗号化してるか分かりますか?
262NAME IS NULL:2006/03/15(水) 15:53:44 ID:???
詳細は良く知らないがSHA1かその変形だと思う。
263NAME IS NULL:2006/03/15(水) 23:37:30 ID:???
実験って、文字化けしない文字を実験しても意味が無いよ。
文字化けする文字をわざと入れて検証しないと意味が無い。
実務経験無しの素人?
264NAME IS NULL:2006/03/16(木) 01:37:05 ID:???
>>263
趣味グラマーです…
反省してきます
265NAME IS NULL:2006/03/16(木) 23:47:53 ID:???
カーネル2.6系環境でビルドすると
アーキテクチャ固有ヘッダ関連で
エラーになるよね?
なんとかなんないの?
266NAME IS NULL:2006/03/17(金) 01:44:28 ID:YsGKwMIo
すいません
なぜ LIKE '%ゆりこ%' で “てるこ”が当たるんでしょうか?
267NAME IS NULL:2006/03/17(金) 02:37:47 ID:???
>>266
文字エンコーディングが、ちゃんと設定されてないからではないか。
268NAME IS NULL:2006/03/17(金) 03:04:29 ID:+oeQ5Gmh
『You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near』

このメッセージ↑が出てzipとかjpgとかアップロード全く出来ません。
XPですけど、PCリカバリしないとダメですか?
269NAME IS NULL:2006/03/17(金) 03:11:31 ID:???
>>268
英語くらい読めよ
270NAME IS NULL:2006/03/17(金) 06:04:49 ID:KX0IVh5h
>>269
傲慢な態度してないでたったと教えろよ。分かんないの?
271NAME IS NULL:2006/03/17(金) 06:19:02 ID:???
>>270
バカには教えても理解できないだろう
272NAME IS NULL:2006/03/17(金) 06:41:41 ID:???
>>270
質問者がID出してるのにそれは無いだろ。
273NAME IS NULL:2006/03/17(金) 08:46:49 ID:???
>>269が正解
274NAME IS NULL:2006/03/17(金) 08:51:37 ID:???
日本語が不自由な在日が湧いてる。
たったとってどこの言葉だよ。
ボラクルでも買ってエラーメッセージも日本語にしてもらえよ(w

文字コードが理解出来ない香具師はDB使うスキルが足りないよ。
大人しく業者に丸投げするかオフスのおまけのアクセスでも使っとけ。
275NAME IS NULL:2006/03/17(金) 09:12:01 ID:???
オフスってどこの言葉だよ
276NAME IS NULL:2006/03/17(金) 09:26:54 ID:???
オフス、オラ悟空!
277NAME IS NULL:2006/03/17(金) 10:17:32 ID:???
ボラクルのエラーメッセージ、日本語だと ORA-XXXXX ????????????????????????????
とか出て読めないことがおおいww
結局エラー番号で調べなおす・・・
278NAME IS NULL:2006/03/17(金) 13:22:06 ID:???
日本語対応コンソールぐらい使え。
279NAME IS NULL:2006/03/17(金) 21:57:14 ID:???
まぁボラクルのエラーメッセージは誤訳も多いから英語にしといた方が安心
280NAME IS NULL:2006/03/17(金) 22:58:41 ID:???
すると英語が読めない低能が困ると(w
281NAME IS NULL:2006/03/18(土) 18:41:19 ID:1lxcM2Nb

$sql .= ' class = ' . $class;
$query = 'select * from `mas`,`report_p` where' . $sql;

これならうまくいくのですが、これに

ORDER BY `bangou` ASC

これをくっつけて昇順表示にしたいのですが、どこにくっつけてもエラーがでます。

なぜでしょうか?
282NAME IS NULL:2006/03/18(土) 18:51:47 ID:???
bangouだけじゃ、bangouがどのテーブルに属しているか
分からないからじゃないの?
283NAME IS NULL:2006/03/18(土) 19:53:10 ID:1lxcM2Nb
なるほどやってみます。そういわれたらそうですね。
284NAME IS NULL:2006/03/19(日) 11:50:38 ID:Mf01Nu/5
mysql> SELECT * FROM jpzipcode WHERE oldpost='468";
'> SELECT * FROM jpzipcode WHERE oldpost='468';
'> ;
'> ;
'> ;
'> \
'> \
'> \
'>
'> "
'> \

となってプロンプトから抜けられません
\qでも抜けられません
コマンド打ち間違えた場合どうすればよいのでしょうか?
285NAME IS NULL:2006/03/19(日) 12:26:19 ID:Mf01Nu/5
事故怪傑しました
286NAME IS NULL:2006/03/19(日) 12:29:22 ID:???
>>284

'
287NAME IS NULL:2006/03/19(日) 12:53:29 ID:jgNyFySV
SQL Serverのエンタープライズマネージャーみたいに
GUIでクエリとか操作できるソフトってないですか?
288NAME IS NULL:2006/03/19(日) 13:24:23 ID:???
>>287
SQL Serverはあんまり好きじゃないど
DTSだけは神だよな
289NAME IS NULL:2006/03/19(日) 13:59:19 ID:???
290NAME IS NULL:2006/03/19(日) 14:29:26 ID:???
>>289
おいおい
あれは使い勝手悪いだろ
もう少し使い勝手いいやつ教えてやれよ
291NAME IS NULL:2006/03/19(日) 18:36:12 ID:???
GUIでしか操作出来ない時点でDB使うスキルが足りない。
業者に丸投げした方がいいよ。
292NAME IS NULL:2006/03/19(日) 20:57:12 ID:???
>>291
ただの面倒臭がりやなのかもよ。
293NAME IS NULL:2006/03/19(日) 22:11:43 ID:q4Z3aC05
初心者な質問で申し訳ないんですが・・
mysql -umechakucha
でログインできてしまうのはどうにかならないのですか?
権限がないから問題無いようにも思えますがなんか気になります。
294NAME IS NULL:2006/03/19(日) 22:15:34 ID:???
ログインさせたくないユーザにmysqlコマンド実行でき無くしちゃえば?
そもそもそんな変な事するユーザをログインさせるな。
295NAME IS NULL:2006/03/19(日) 23:42:59 ID:???
>>293
普通ログインできないと思うぞ。
my.cnfで、mysqlやclientのデフォルトのアカウント設定とかしてないか?
296NAME IS NULL:2006/03/20(月) 00:18:48 ID:???
ブログなどいろいろなコンテンツが入っているコミュニティサイトを作っているんですが、
例えばある画面で表示させるデータをDBから取得してくる場合、

1)一度DBに接続してから、その画面に表示させるデータを全部取得してから切断
2)または、機能ごとにデータを取得する関数のなかで接続切断している

どちらがいいのでしょう?
プログラミングの仕方の質問でスレ違いの気がするんですが、
皆さんはどのようにしているんでしょうか?
297NAME IS NULL:2006/03/20(月) 00:25:40 ID:???
1) 比べるまでもない
やってみればわかる。
ConnectionPoolしてるなら気分の問題かな。
298NAME IS NULL:2006/03/20(月) 02:03:57 ID:???
PV稼ぐ気有るなら、静的に書き出さないと毎回SQL引いてたら鯖堕ちるぞ。
299NAME IS NULL:2006/03/20(月) 04:15:15 ID:???
ならXOOPS使っているレン鯖は全滅だな。
300NAME IS NULL:2006/03/20(月) 06:12:35 ID:???
でも、Xoopsは実際に重たいと思うぞ。
301NAME IS NULL:2006/03/20(月) 12:21:05 ID:???
XOOPSで鯖が落ちたという話は聞かないね。
MT禁止の鯖ならあるけど。
302NAME IS NULL:2006/03/20(月) 12:27:15 ID:???
xoopsの場合はapacheのコネクション数上限で絞ったり、いろいろ対策ができるからじゃね?
303NAME IS NULL:2006/03/20(月) 12:58:57 ID:???
XOOPSはバグ多すぎ…
いったいどれだけのサイトが改ざんされたことか
304NAME IS NULL:2006/03/20(月) 16:04:43 ID:???
サイト丸ごとのミラーなのね。
http://ftp.iij.ad.jp/pub/db/mysql/
305NAME IS NULL:2006/03/20(月) 17:27:16 ID:DnAPAci/
今まで一人しかユーザーが居なくて一人ですべてを管理していたアプリがあるのですが、
管理責任者はすべてのデータを管理し、ほかの管理者はユーザーIDによって担当の
DBを拾い出して管理するという仕組みに変更することになりました。
(ログインするときのユーザー名が管理するDBのIDと同じになると言う設計です)
今までは、ログインすると管理題目一覧が出て、管理題目を選択すると、管理題目詳細に
飛ぶ仕組みでした。
今度は管理責任者は従来どおりなのですが、管理者はログインした時点で管理題目一覧を
飛ばして、管理題目詳細へ飛ぶようにしたいと思っています。
しかし、管理責任者は選択するとき、管理題目をクリックするので、linkラベルを使って飛ばせ
ますが、管理者はログインしたら何もクリック等せずに管理画面詳細に飛ばさなくてはならない
ので、記述の方法で行き詰っています。
if($_POST['kanrisikaku']!='yes'){
//userid.phpに遷移する<この処理の書き方が分からない。
}
useridにあたる部分の生成方法は分かるのですが、分かっているPHPファイルを読ませる方法が
分かりません。
どなたか御教授ください。 お願いします。
306305:2006/03/20(月) 17:35:23 ID:DnAPAci/
PHP質問に書いたつもりでMySQLスレだった・・・
吊ってきます。
307NAME IS NULL:2006/03/20(月) 17:39:52 ID:???
>>305
WebProg板のPHPスレ行き。

しかしその説明じゃ、読んだ人はわけ判らんよ。
そのシステムについての前提情報の説明が全然ないから。
308NAME IS NULL:2006/03/20(月) 17:41:52 ID:???
PHPスレはこんなんばっかだけどなw
309NAME IS NULL:2006/03/20(月) 23:50:40 ID:???
xoopsは落ちないように絞ってるからでしょ。
鯖は落ちないけど、利用者は重い!って叫んでる状態。

アフェとか広告稼ぎにはPV少ないと致命的。
310NAME IS NULL:2006/03/21(火) 00:16:45 ID:???
connection数 768
平均秒間クエリ数 800程度
最大秒間クエリ数 1400程度

これでもcpu 50% idle ですよ。
311NAME IS NULL:2006/03/21(火) 01:15:34 ID:???
ぶっちゃけapache鯖とmysql鯖とではどっちの方が先に落ちるようになってんの?
312NAME IS NULL:2006/03/21(火) 03:03:25 ID:???
システムの一時ディレクトリが存在しないとき、
mysqld が起動時に
C:\ 直下に ib2 ib3 ib4 ib5 という空のファイルを作るっぽいです。
これは一時ディレクトリに書き込めるかどうかのテストのようですが、
なぜかディレクトリが存在しないときにシステムのルートで試すようです。

同様の現象で困っている方いらしたら、参考までに。
313NAME IS NULL:2006/03/21(火) 10:30:38 ID:???
>>311
WinならApache
314NAME IS NULL:2006/03/21(火) 13:44:19 ID:???
Mysql5で使っているauto_incrementがあるテーブルを
mysqldump --compatible=mysql40 とmysql323 でバックアップファイルに出力したら
AUTO_INCREMENTが含まれていないのだが、これって仕様ですか?

--compatibleをつけないで出すと問題なくAUTO_INCREMENTがある状態で吐き出します。
マニュアルやGoogleで調べても全く情報が出てこない…

どなたかご存知の方いませんか?



315NAME IS NULL:2006/03/21(火) 14:25:35 ID:???
一時ディレクトリ存在しない時に作るスクリプトを書いて、そこからmysql起動すればよろし。

mysql40とmysql323のころにはAUTO_INCREMENTの機能が無かったからでは?
付けないときはmysql5仕様で出力されてるだけ。
316NAME IS NULL:2006/03/21(火) 20:43:20 ID:???
>>315
んなことはない。auto_incrementはかなり昔からある。
素直にバグじゃね?
317NAME IS NULL:2006/03/22(水) 03:05:13 ID:???
どうして avg()やmax()、min()はあるのに median() が無いのはなぜ?
318NAME IS NULL:2006/03/22(水) 21:53:07 ID:???
>>317
>median() が無いのはなぜ?

特殊な関数だから、、、需要が低いんじゃね?
319NAME IS NULL:2006/03/22(水) 23:12:31 ID:???
確かに欲しいよなぁ。。>median()
まあcount(*)してorder by すれば分かるっちゃ分かるが。
320NAME IS NULL:2006/03/22(水) 23:53:23 ID:???
ググリ疲れますた
打ち込み疲れますた

文字コード近辺の事例ってとこまでつかんだのですが…

エラー1406にてINSERT不能

コマンドプロント,スクリプト(perl)共に英数のは場合は可能
何かさわりまくってると何故かプロントのみ日本語が通ったり…
何か ってのが全然不明れす

今は下記の設定でプロントからも通りません

WinXP
mysql 5.0.18

Server characterset: ujis
Db characterset: ujis
Client characterset: ujis
Conn. characterset: ujis

基本的な事なのかな
321NAME IS NULL:2006/03/23(木) 00:25:34 ID:???
>320
ググッた時は 何もしないで治った ってのがあったんですが
ほんとに 何もしないで治りました… HOIMI♪

一応…
一回 英数で入力して,日本語入力したらとおるようになりました
322NAME IS NULL:2006/03/23(木) 00:38:11 ID:???
>>321
error 1406 ってどんなエラー?
323NAME IS NULL:2006/03/23(木) 00:50:05 ID:???
>321
うぉ…なおってない,,動作が安定してない?
訳わかんないっす、、
最初日本語入力できたカラムにまたぶっこめなくなってるし

>>322
Data too long for column 'sub' at row 1 
です
324NAME IS NULL:2006/03/23(木) 00:53:40 ID:???
>323
補足perl
INSERT INTO spot ( hoge,hoges,oe-,hogee ) VALUES ( 'て','て','て','て' )
↑ 通った。
↓ 通らない。
INSERT INTO spot ( hoge,hoges,oe-,hogee ) VALUES ( '俺','噛み','行く','' )
325NAME IS NULL:2006/03/23(木) 01:01:27 ID:???
文字コードSHIFT_JISじゃね?
326317:2006/03/23(木) 01:19:03 ID:???
やっぱ中央値ほしいです

SELECT MAX(hip), MIN(hip), MEDIAN(hip) FROM chugaku GROUP BY gakunen;
としたいとき、MEDIAN(hip)に代わる表記方法がいまいち思いつかないです。
327NAME IS NULL:2006/03/23(木) 02:00:17 ID:???
その例だったら、MEASURE(hip)でどうだろう?
328320:2006/03/23(木) 04:35:49 ID:???
報告〜....
結局 mysqlのバージョン下げて対応
色々漁ったけどこれが一番いいとおもふ
ほんと今回は苦労しますた 

時間かなり食った,小学生定額年にはむつかしかったれす。 
これから1時間寝て通学シマツ!
329NAME IS NULL:2006/03/23(木) 06:17:26 ID:???
中央値の候補が100とか1000とかあったら処理が大変。
MAXとMINを足して2で割って誤摩化しとけ。
330NAME IS NULL:2006/03/23(木) 06:26:15 ID:???
>>317

こんな所で駄々こねてないで、mysql.comにそう言え!
331NAME IS NULL:2006/03/23(木) 09:14:17 ID:???
統計のことはRに丸投げが正しいやり方です
332NAME IS NULL:2006/03/23(木) 10:33:18 ID:???
プロントはEdy使える
333317:2006/03/23(木) 12:02:34 ID:???
>>329
ごみっぽいデータはほんとマジでごみなので
MAX(hip)が120cmとかありえない数値だったりするんですよ
334NAME IS NULL:2006/03/23(木) 12:03:57 ID:???
PostgreSQL 使えばいいじゃん
335NAME IS NULL:2006/03/23(木) 18:33:04 ID:???
http://mysql-udf.sourceforge.net/
知ってるかもしれないけどこんなのもあるよ
336NAME IS NULL:2006/03/23(木) 19:57:25 ID:2T59S4kh
MySQLのライセンスですが、自社(自分)のWebサーバのバックエンドとしてMySQL
を使用して他者に有償で利用させたい場合、コマーシャルライセンスは必要無い
のでしょうか?

以下のページを見ると、良いのかなという感じなのですが、
http://sonic64.com/2003-05-23.html

ソフトエイジェンシーのページを探しても、そのような記述が見つかりませんでした。
http://www.softagency.co.jp/mysql/licensing.html

どうなのでしょうか?
337NAME IS NULL:2006/03/23(木) 20:07:28 ID:???
>>336
接続部分に使ってるライブラリなどをリストアップして、代理店に電話するしかないとおもうよ。
338NAME IS NULL:2006/03/24(金) 11:58:52 ID:???
ABからライセンス取った方がいいね。
無料で使って儲けようって考えが浅ましい。
339NAME IS NULL:2006/03/24(金) 13:28:28 ID:???
test_abc、test_def
を作成して、
phpmyadminで見ると
test_で始まっている2つがひとくくりで表示されてしまいます。

これはあくまでphpmyadminの勝手な機能で、
MySQL側で hoge_ が一致する場合は、
同様の権限に設定する、なんていう恐ろしい機能がある
わけではないですよね?
340NAME IS NULL:2006/03/24(金) 22:23:29 ID:8+rEtgD4
下記の環境(Linux)でphpMyAdminから日本語データを
入力することができません。

PHP5.1.2
MySQL5.0.19
phpMyAdmin2.8.0.2

MySQLの各default-charsetは全てujis(日本語EUC)に設定、
phpMyAdminはWindows上のブラウザで操作してます。
気になるのは、MySQLの文字コードを上記のように設定して
いるにも関わらず、phpMyAdminのトップページに表示される
MySQL文字コードがutf-8になっています。

PHPのmbstringsの設定などが関係するのでしょうか?
341NAME IS NULL:2006/03/24(金) 22:44:19 ID:???
phpスレの話だな。
MySQLを使う以上、utf-8で全部統一した方がいいよ。
変換すると絶対文字化けは避けられない。
342NAME IS NULL:2006/03/24(金) 23:00:39 ID:???
っていうより、HTMLの話なんじゃ…
343NAME IS NULL:2006/03/25(土) 10:45:50 ID:0QpbJoUh
複数のカラムに個別でindexを付けているのですが、whereの中で or で連結するとindexが働きません。
以下のような形で作り、
-------------------
create table test(
a int,
b int,
index(a),
index(b)
);

insert into test(a, b) values(1, 11);
insert into test(a, b) values(2, 22);
insert into test(a, b) values(3, 33);
-------------------
以下のようなselectをしても type が ALL で、key も NULL になります。
explain select * from test where a=1 or b=11;

マルチカラムインデックスの場合にorはダメとは良く見るのですが、個別でindexをつけた場合でもorはダメなのでしょうか?
344NAME IS NULL:2006/03/25(土) 17:38:14 ID:???
GROUP BY で質問

先頭2文字がA〜Zののものとそれ以外 というグループ分けを
したい場合、どうしたらいいかな
345NAME IS NULL:2006/03/25(土) 19:00:28 ID:???
>>343
index(a,b)
ってインデックスを作ればいいのでわ?
346NAME IS NULL:2006/03/25(土) 21:02:53 ID:Kbd6Xz91
344
1列追加してA〜Zのレコードは’1’、それ以外は’0’の値にしてこれをGROUP BYの対象列にする
これが一番てっとり早い
347NAME IS NULL:2006/03/25(土) 22:34:50 ID:0QpbJoUh
>>345
ありがとうございます。出来ました。
でも、index(a,b)はマルチカラムインデックスになるので、orで繋ぐと無効になると思ってたのですが・・・。
何か私、勘違いしてますか?
348NAME IS NULL:2006/03/25(土) 22:53:31 ID:???
>>347
「GROUP BY を使う」のと、「GROUP BY でインデックスが使われる」では意味が違うと思うのですが。
そもそも何がやりたいの?
本当は
>先頭2文字がA〜Zののものとそれ以外 というグループ分けを
>したい場合、どうしたらいいかな
ではないと思われるのだけど。
349345:2006/03/25(土) 23:15:47 ID:???
>>347
>orで繋ぐと無効になると

そういうものだったのね。知らんかった。

どっちにしろMySQLでは同時に使えるインデックスの数は一つなので、
where a=1 or b=11
の場合は
index(a,b)
とするしかないと思いますよ。

index(a),index(b)としても、
インデックスが効くのはa=1の走査だけで、or以降のb=11は全走査になってしまう。
この近辺の事情は「なんで?」って聞かれてもワカランので、
本読んだ方が早いかも。
MySQLの性能で困ったらまずこいつがおすすめ↓

実践ハイパフォーマンスMySQL
http://www.oreilly.co.jp/books/4873112095/
350344:2006/03/25(土) 23:19:08 ID:???
>>348
>>347ハワタシチガウデス。

>>346
すでに動いてるデータベースなのでテーブル構成とか変えたくないし
なによりデータを追加するロジック部に手をつけたくないのです。
ええ、旧態依然とした超保守的な運用です。
351NAME IS NULL:2006/03/25(土) 23:27:17 ID:???
>>350
A-ZとA-Z以外を抽出するSQLを
2回に分けて発行してみるとか。
レコードのマージは自力で。
352NAME IS NULL:2006/03/25(土) 23:44:14 ID:???
>>350
GROUP BY col RLIKE "^[A-Z][A-Z]"
遅いと思うけど。
353NAME IS NULL:2006/03/26(日) 00:19:25 ID:???
>>347
ここを見ると、マルチカラムインデックスのor接続はインデックス
が使用されないと書いてあるが、本当にできた?
http://dev.mysql.com/doc/refman/4.1/ja/mysql-indexes.html
http://dev.mysql.com/doc/refman/4.1/ja/multiple-column-indexes.html
354344:2006/03/26(日) 00:21:37 ID:???
>>351-352
ありがとう!おかげで解決しました!

SELECT MAX(hip) AS maxhipsize, MIN(hip) AS minhipsize,
IF ( LEFT(name,2) BETWEEN 'aa' AND 'zz', LEFT(name,2) , 0 ) AS kasira
FROM chugaku GROUP BY kasira;

GROUP BY の後ろにエイリアスが使えるのがポインツなのね。
IFの正の項がちょっと違うのは 当初
頭文字2文字でさらにグループ分けをする という発展系を
考えていたから。ついでに実装できた。
355NAME IS NULL:2006/03/26(日) 01:11:53 ID:sAZz4prI
>>349
有難うございます。その本こんど買ってみたいと思います。

>>353
インデックスは利用されてました。でも、一つだけ(>_<)
------------------------
create table test(
a int,
b int,
index(a,b),
index(b)
);

insert into test(a, b) values(1, 11);
insert into test(a, b) values(2, 22);
insert into test(a, b) values(3, 33);

explain select * from test where a=1 or b=11;
------------------------
上のような形でテストしましたが、以下の結果になりました。

(1) index(a),index(b)
   ⇒ インデックスは一つも利用されない

(2) index(a,b)
   ⇒ aだけインデックスが利用される。

(3) index(a,b),index(b)
   ⇒ aもbもインデックスが利用される?
     ※ possible_keyは "a,b" だけど、keyには"a"しか出てこない
356NAME IS NULL:2006/03/26(日) 01:40:09 ID:???
> possible_keyは "a,b" だけど、keyには"a"しか出てこない

これでどうして両方利用されるって解釈になるんだ
357NAME IS NULL:2006/03/26(日) 03:59:17 ID:???
>>356
?がついてるだろ。
これは疑問形だよ。 彼の魂の問いかけだよ。 >>355の心の叫びだよ。
358NAME IS NULL:2006/03/26(日) 15:36:38 ID:???
曲に乗せておおくりします
359NAME IS NULL:2006/03/26(日) 23:25:21 ID:???
ttp://dev.mysql.com/doc/refman/4.1/ja/privileges-provided.html

create の権限をユーザに与えると
データベース、テーブル、インデックスの作成権限が
与えられますが、
これをテーブルとインデックスのみに制限することはできないでしょうか?

データベースを自由に作られてしまうと都合が非常に悪いので・・・。
360NAME IS NULL:2006/03/26(日) 23:44:31 ID:Yd/vBUAb
361NAME IS NULL:2006/03/27(月) 00:09:40 ID:???
データベース名で使用できる文字を制限する方法ってないでしょうか?
362NAME IS NULL:2006/03/27(月) 01:24:32 ID:???
ソースを弄る。
レンタルでもしたいのでしょ?
363NAME IS NULL:2006/03/27(月) 01:48:01 ID:???
>>361
無いような気がする。
DB作成用のフロントエンドを提供して、それを介してのみ
作成させるようにするしかないんでないかい。
364NAME IS NULL:2006/03/27(月) 19:43:43 ID:???
>>359
ヒント
グローバルレベル
データベースレベル
365NAME IS NULL:2006/03/28(火) 00:05:05 ID:???
質問です。
MySQL5.0.19 をrpmインストールしたのですが、システムテーブルのインストー
ルに失敗します。
"Installation of system tables failed!"

原因追求のため、mysql_install_db を手動で実行したところ、mysqld が働い
ていないようなのです。

/usr/sbin/mysqld --bootstrap --skip-grant-tables --basedir=/ --datadir=/var/lib/mysql --skip-innodb --skip-bdb --skip-ndbcluster --max_allowed_packet=8M --net_buffer_length=16K < test.sql

-- test.sql の内容 --
use mysql;
set table_type=myisam;
CREATE TABLE test ( Host char(60) binary DEFAULT '' NOT NULL);
-- --

これを実行しても、/var/lib/mysql/mysql の内容は少しも変化がありません。
これは一体、何が原因なのでしょうか?
366NAME IS NULL:2006/03/28(火) 12:29:00 ID:???
再起動すれば動くと思う。
rpmで入れただけじゃ動かんよ。起動しないとな(w
367NAME IS NULL:2006/03/28(火) 21:02:16 ID:Md72ukln
質問です。
FULLTEXTインデックスを使用するため、MyISAMテーブルの使用を考えています。

ただ、テーブルへのアクセス頻度がとても高く、毎秒600クエリの発行が行われていて、
そのうちの約30%はINSERT/UPDATE/DELETEです。

MyISAMテーブルはこの負荷にも耐えられるでしょうか??
368NAME IS NULL:2006/03/28(火) 21:16:33 ID:???
ISAM可愛いよぼくのISAM
369NAME IS NULL:2006/03/28(火) 21:55:26 ID:???
>>367
それだけ案件がわかっているのなら、
実際に実行してみるのが早いんじゃね?
370NAME IS NULL:2006/03/28(火) 22:19:16 ID:???
DB鯖のスペックにもよるしねえ。
ベンチマークしてみてくれ。
不安ならオラクル代理店に相談して言いなりに買い込んでくれ。
371NAME IS NULL:2006/03/28(火) 22:53:46 ID:???
すみません、質問です。

id fruit price
1 りんご 100
2 オレンジ 50
3 ぶどう 150
4 メロン 600
5 すいか 500

値段の高い、上位3つの果物の平均を求めるには
どうしたらよいでしょうか。

よろしくお願いします。
372NAME IS NULL:2006/03/28(火) 23:04:59 ID:???
>>367
自分のクエリをベンチ取ってみれば?
200件/sの更新はやったこと無いんでよく分からなすなぁ。
70%のviewもどんなクエリか、鯖スペもよくわからんし。

あと、FULLTEXTインデックスが効果有るのは英文のみね、念のため。
373NAME IS NULL:2006/03/28(火) 23:09:56 ID:???
>>367
>毎秒600クエリの発行が行われていて、
>そのうちの約30%はINSERT/UPDATE/DELETE

MyISAM云々よりも、Disk I/O性能をどう上げるかによる気がする。
374NAME IS NULL:2006/03/28(火) 23:56:29 ID:???
MySQL自身が自分にきたクエリを勝手にテーブルつくってそのクエリをログったりとかする構文てないですか?
375NAME IS NULL:2006/03/29(水) 00:35:56 ID:???
>>374
意味不明。クエリーログとかレプリケーションとか。
なんで構文でON/OFFさせたいの?
376NAME IS NULL:2006/03/29(水) 00:58:24 ID:???
MySQLないですか?

まで読んだ。
377NAME IS NULL:2006/03/29(水) 05:40:08 ID:???
>>371
一発じゃ無理っぽくない?
とりあえずバストの大きい順に並べて
上位3つを取り出して
あとはスクリプトで処理とか
378NAME IS NULL:2006/03/29(水) 07:51:29 ID:???
>>371
sub selectが使えるバージョン(=4.1以上)限定だが

select avg(price) from (select price from hoge order by price desc limit 3) as v;

379NAME IS NULL:2006/03/29(水) 13:12:51 ID:???
ちょっと特殊なアプリで、テーブル名をユーザから与えられた上で、
特定の SQL を実行するのですが、この場合テーブル名のエスケープ処理の
セオリー等あるでしょうか?

今のところは、必ずダブルクォーテーションで囲んで、テーブル名に
ダブルクォーテーションがあったら重ねる、と言う程度しか行っていないのですが…
380NAME IS NULL:2006/03/29(水) 13:24:02 ID:???
特殊というか、危険で間抜けで間違ったアプリ
381NAME IS NULL:2006/03/29(水) 13:59:45 ID:???
うーん。DB アクセスを行うアプリケーションを作るアプリケーションといいますか、
どうしてもテーブル名が任意ってのが要件そのものなのですよね。
あ、ユーザと言うのは不特定多数のユーザではなくて二次的な開発者になります。

一般的にバインド変数なんかが使えない状況ってどうしてるものなのでしょうか?
382NAME IS NULL:2006/03/29(水) 14:54:30 ID:???
>>379
名前は任意だとしても、クォーテーションや
支障がありそうなのが混じってたら通すことより弾いたら?
あと``で括っとけ。
383NAME IS NULL:2006/03/29(水) 16:34:50 ID:???
>>382
「'」はクォーテーションだけど、「`」って何て言うの?
384NAME IS NULL:2006/03/29(水) 16:46:26 ID:???
バッククォーテーション、アクサングラーブ、グレイブアクセント
385NAME IS NULL:2006/03/29(水) 18:43:15 ID:???
のび太の恐竜2006
386NAME IS NULL:2006/03/29(水) 18:57:43 ID:???
のび太の恐竜2006rm -fr /のび太の恐竜2006
387NAME IS NULL:2006/03/29(水) 23:36:07 ID:???
name, date, hipsize
というテーブル chugaku があるとき
name が重複しているので、重複をなんとかしたいです。
このとき、ついでに 一番最新の date のときの
date と hipsizeも取得したいです。
SELECT name,date,hipsize FROM chugaku GROUP BY name ORDER BY date
とやってみたものの、hipsize が date と無関係に採用されてしまって
困っています。
これってどうしたらいいのかな
388NAME IS NULL:2006/03/29(水) 23:55:25 ID:???
>>387
dateはたいがい予約語だったりするのでこういう命名はやめましょう
389NAME IS NULL:2006/03/30(木) 00:44:44 ID:???
人間の誕生日なら、birthdayあたりでいいんじゃねーの?
製造年月日ならcreated
390387:2006/03/30(木) 02:03:09 ID:???
すみません。date は誕生日とかではなく サイズを測定した日時です。
何日かおきに測定しているのですが、全員の測定サイズの
最新分を一覧したいんです。
391NAME IS NULL:2006/03/30(木) 03:07:22 ID:???
centos 4.3をつかっています(mysql-4.1.12)、文字化けを解消したく
mysql-4.1.18のsrpmを拾ってきて
centosのspecをつかいビルドしましたが、make testでmysqldumpの
所でエラーになってrpmが作れません。

make testって必ず必要でしょうか。
392NAME IS NULL:2006/03/30(木) 06:54:16 ID:???
>>390=387
まずはdate=>mdate(measured date)とするとして。
SELECT name, mdate, hipsize
 FROM chugaku
 WHERE (name, mdate) IN (
        SELECT name, MAX(mdate)
         FROM chugaku
         GROUP BY name )
でどないでっしゃろ。相関は避けてみた。しかし複数列のINが使えたっけ…
使えないときは
SELECT name, mdate, hipsize
 FROM chugaku a,
      (SELECT name, MAX(mdate) AS max_mdate
        FROM chugaku
        GROUP BY name) b
 WHERE a.name = b.name AND a.mdate = b.max_mdate
としてみるとか。しかしFROM句に問い合わせかけたっけ…
使えないときはVIEWを使うとか工夫してください。
393NAME IS NULL:2006/03/30(木) 15:06:14 ID:???
>>390
そもそもnameをユニークにしていないオマイが悪い
394NAME IS NULL:2006/03/30(木) 15:23:40 ID:???
ユニークにすれば解決するわけじゃないと思うのだが
395NAME IS NULL:2006/03/30(木) 16:15:01 ID:???
計測する度にその日付とサイズが追加されてるテーブルってことだろ?
だから名前毎の最新日付を一覧するだけの、単純なviewじゃん。
名前は正規化するべきだよな。
396NAME IS NULL:2006/03/30(木) 16:30:21 ID:???
hipsizeとかchugakuとかあると、みんな優しいな。
397NAME IS NULL:2006/03/30(木) 19:22:17 ID:???
>>396
このスレのみんなは女児が絡まなくても優しいよ。
398NAME IS NULL:2006/03/30(木) 19:25:51 ID:???
ちなみに私はたくさんの人からユニークな顔ですねと言われます
399NAME IS NULL:2006/03/30(木) 20:04:23 ID:???
ねらーにロリコンが多いのは昔からの伝統。
400NAME IS NULL:2006/03/30(木) 23:04:20 ID:???
>>399
普段から2ch語を連発していたり、
仕事中に2chブラウザで2chを見てたりするような奴には
確かにロリが多かったね。
401NAME IS NULL:2006/03/30(木) 23:42:40 ID:???
>ロリが多かったね。

そりゃ、すごい
402NAME IS NULL:2006/03/31(金) 00:33:52 ID:???
>>377,378
レスありがとうー。使わせていただきます。
403NAME IS NULL:2006/03/31(金) 00:53:24 ID:???
女の子が出てくるようなアニメのスレが充実してるしなあ。
にちゃん=ロリコン掲示板。
404NAME IS NULL:2006/03/31(金) 08:44:46 ID:???
おまえら、どこにも女児とは書かれてないぞ
男児のhipsizeかもしれんぞ



で、ちょっと聞きたいんだが、
auto_incrementで実際に使われるカウンタを編集することってできる?
show table statusで見るには見れるが、書き換える方法って無いよな多分・・・・・
405NAME IS NULL:2006/03/31(金) 08:54:46 ID:???
>>404
auto は auto
406NAME IS NULL:2006/03/31(金) 12:21:26 ID:???
>404
alter table
407NAME IS NULL:2006/03/31(金) 14:27:54 ID:???
>>406
さんくす
ALTER TABLE 使って変更する方法がALTER TABLEの項目に書かれてた。
でも、ALTER TABLEはテーブルコピーなんだよな・・・・・・・orz
やっぱAUTO_INCREMENTやめるか
408NAME IS NULL:2006/03/31(金) 20:05:33 ID:vrbQSusH
大きな集合をorder byして
オフセットに大きな値を指定して取り出すと、
どうしても遅くなってしまいますよね。

select * from hoge_T order by id limit 200000,100

等。
たとえmogeにインデックスを張っていても
数秒かかってしまいます。

ひとつの集合を、そんなに大きくならないようにするしか
ないのでしょうか。
たとえばメーリングリストシステムのようなものでは、
集合の要素数の上限に制限を設けることはできません。
いったいどうやって処理しているのでしょうか。
409408:2006/03/31(金) 20:06:34 ID:???
moge→idでした
410NAME IS NULL:2006/03/31(金) 20:22:16 ID:???
メールは遅延してもいいと思うけど?
411NAME IS NULL:2006/03/31(金) 20:40:50 ID:???
idに連番が振られているならwhere id between 200000 and 200099 でいいのでは。
412NAME IS NULL:2006/03/31(金) 21:04:18 ID:U6Pwxkp0
MyISAMのことなのですが、
誰かがテーブルに書き込むと書き込みロックを取得され、読み込みは書き込まれるまで待機、
もしくは非常に長い読み込みの時に、行を追加したい場合、読み込みロックが取得されているので書き込みロックが取得できず時間かかるのはわかっているのですが、
そんな矛盾を回避するにはどうしたらよいのでしょう。。

トランザクションを使えば平気なのでしょうか??
413NAME IS NULL:2006/03/31(金) 21:44:51 ID:???
>>408
select * がどれほどの項目量がわからんが、
単純に、viewに現れるの文字量が多いと遅くなるよ。
414NAME IS NULL:2006/03/31(金) 22:36:34 ID:???
>>412
書き込みをテンポラリテーブル使ってやるとか?
案件によるけど。
415NAME IS NULL:2006/03/32(土) 00:43:23 ID:???
select birthday from maidcafe

で、3月32日って表示されてしまうんですけど…
416NAME IS NULL:2006/03/32(土) 03:09:37 ID:???
32日っち表示させる方がシステム的には難しいわな。 4/1だしな
417NAME IS NULL:2006/03/32(土) 04:29:15 ID:???
as を使えば 4/1-->3/32 の変換は簡単。
418NAME IS NULL:2006/03/32(土) 05:12:55 ID:???
my.cnfのdatadirを変更してから再起動すると
Checking for crashed MySQL tables
という表示がでるようになったのですがこれはなにか問題が発生しているのでしょうか?
一応普通にMYSQLは使えているのですが・・・。

DebianでMYSQLをインストール後すぐにmy.cnfを編集しました。
mysqlcheckなどを試してみたのですが直りませんでした。
アドバイスよろしくお願い致します。
419NAME IS NULL:2006/03/32(土) 09:29:30 ID:???
>>417
おしえてくれ
420NAME IS NULL:2006/03/32(土) 11:27:42 ID:???
asのマニュアルってどこにあるのー?
http://dev.mysql.com/doc/refman/5.1/en/
421NAME IS NULL:2006/03/32(土) 12:22:32 ID:???
MoSQL開発のお知らせ
http://www.mysql.gr.jp/frame/modules/news/article.php?storyid=68

※MoSQLは「萌(も)えすきゅ〜える」と発音します。
422NAME IS NULL:2006/03/32(土) 15:57:08 ID:???
>>418
my.cnfを書き換えて再起動前に、
元のdatadirの中身を新しいdatadirに全部写してる?
MyISAMだけ?InnoDBは使ってるの
423Gentoo35才:2006/03/32(土) 16:28:45 ID:???
はじめまして!
日本語関係の質問です。
サーバー
GentooLinux2.6.11 CUIのみ
MySQL4.1.14
クライアント
WindowsXP SP2
JDK1.5
でクライアントからUTF8で日本語をINSERTしてからSELECTすると全部????になります。
my.cnfに設定が必要なのでしょうか?
設定例や参考になるサイトをご存知でしたら教えてください。
424NAME IS NULL:2006/03/32(土) 17:41:30 ID:???
>>422
MyISAMは非常に簡単でいいよね。
InnoDBに関しても
http://dev.mysql.com/doc/refman/4.1/ja/multiple-tablespaces.html
ここを読む限りでは、
サーバを再起動してトランザクションがない状態ならいけるっぽいけど、
やったことはないw
425NAME IS NULL:2006/03/32(土) 17:46:44 ID:???
>>423
キャラクタセットは一筋縄ではいかん
426NAME IS NULL:2006/03/32(土) 18:17:07 ID:???
427Gentoo35才:2006/03/32(土) 18:35:12 ID:???
なるほどありがとうございます。いろいろググーてみたけど、いまいちだったのでいろいろ試してみて分かったらうpします。
428NAME IS NULL:2006/03/32(土) 18:52:49 ID:???
winのjavaはデフォルトsjisだったと思う。
utfにするやり方はjavaスレで訊いてくれ。
429NAME IS NULL:2006/03/32(土) 21:09:44 ID:???
>>428
意外と簡単で、鯖側とクライアントのcharsetあわせるだけ。
ていうかgoogleで検索したらMLのログがごろごろ出るんだが。

useUnicode=true
characterEncoding=charset
にするだけ。
windowsはsjisじゃなくてcp932で拡張文字が化けない。
〜とかもいける。
430418:2006/04/02(日) 01:33:21 ID:???
>>422
>>424
レスとんくすです。
はい、cp -rp で元の/var/lib/mysqlの中身を全てコピーしてます。
一応権限も確認してみましたが元の状態と同一でした。
InnoDBは使っていません。
431Gentoo35才:2006/04/02(日) 14:27:10 ID:???
ありがとうございました。解決しました。
Resolved:
サーバー GentooLinux2.6.11 CUIのみ MySQL4.1.14
クライアント WindowsXP SP2 JDK1.5
でクライアントからUTF8で日本語をINSERTしてからSELECTすると全部????になります。 my.cnfに設定が必要なのでしょうか?設定例や参考になるサイトをご存知でしたら教えてください。
Resolution:
JavaでJDBC接続先指定に?useUnicode=true&characterEncoding=UTF-8を追加
Connection conn = DriverManager.getConnection ("jdbc:mysql://172.25.0.99/english?useUnicode=true&characterEncoding=UTF-8", "root", "password" );
MySQLでmy.cnfを以下に設定する。
[mysqld]
character-sets-dir = utf8
default-character-set = utf8
※show create table <TABLE_NAME> でCHARSET=utf8じゃない場合はテーブルを作成し直す必要がある
432NAME IS NULL:2006/04/03(月) 11:34:49 ID:???
>>415-417 の書き込みが、過去込み日付と関連してて笑える
433NAME IS NULL:2006/04/03(月) 20:59:43 ID:???
MySQL全機能リファレンス
http://www.amazon.co.jp/exec/obidos/ASIN/477412169X/qid=1144058997/sr=1-4/ref=sr_1_10_4/503-4083833-1175913

この本について質問なんですが、
自分のPCの環境はwindows+apache+mysql5で、mysql入門以前っていう入門書は持ってます。
自分の使っているレンタルサーバーはxreaで、環境はlinux+apache+mysql5.0.18です。
上の本はlinuxとmysql4.1中心みたいなんですが、自分の環境で買う価値あるでしょうか?
434NAME IS NULL:2006/04/03(月) 21:21:27 ID:???
>>433
リファレンスが体系的に編集されていて、MySQL関連のリファレンスとしては多分最高の分類。
Linux、Windowsの両者をカバーしているし、俺が長年手放すことのできない数少ない良書の一つ。
短所は
・題名どおりリファレンスに特化しているのでシステム構築法などは一切なし
・バージョン5の新機能ストアドやトリガに関することがらは一切なし
お主が実際にやることがDB管理なのか実装担当なのかアプリ開発なのかわからんので一概には
言えんが持っていて損はない。とくにコマンドラインを多用するようなら尚更。
あとはバージョン5対応の新版が出そうなのでそれまで待つかどうかといったところ。
435NAME IS NULL:2006/04/03(月) 23:42:09 ID:MriyOhOm
度数分布表とかを出したいなと思ったんだよ?
hipsize を 1cm刻みで集計したいんだが

SELECT CAST(hipsize AS UNSIGNED) AS hips,
COUNT(hipsize) AS hipcount FROM chugaku
GROUP BY CAST(hipsize AS UNSIGNED);

みたいに書くと、まあそれなりに表示されるけど
途中でhipsizeが飛んだりすると 並びが悪く
歯抜けになって度数がうまく並ばない。

これをなんかうまい方法ないもんかね
436NAME IS NULL:2006/04/04(火) 00:20:29 ID:???
一冊でこれだってのはほとんど見つからないと思う。
winの本では、linuxで動かすのは厳しいと思う。
まあインストールドキュメントぐらい見てインスコ出来ないと本当は無謀なんだけど。

特に、大事な情報を扱うなら、業者に頼んだ方がいいよ。
437NAME IS NULL:2006/04/04(火) 00:22:14 ID:???
それはMySQLの問題じゃなくて、そもそもデータベースが何なのかを知らないだけでしょう?
438NAME IS NULL:2006/04/04(火) 02:02:44 ID:???
最近の本では、運用(というか使用に関してかな)では、これが良かったよ。
「現場で使えるMySQL」
http://www.seshop.com/detail.asp?pid=6776&mode=spec
MySQL4.1以降の日本語の扱いについて結構ページを割いて解説したり、
通常の運用に必要な作業についての説明がある。
439433:2006/04/04(火) 21:42:50 ID:???
レスありがとうございます。かなり良さそうな本なので買っちゃおうかな
と思ってるんですけど、Mysql5対応の新版が気になります。出るのは
いつごろの可能性が高いんでしょうか?
440NAME IS NULL:2006/04/05(水) 19:45:56 ID:???
SQLの練習用アプリとかないですか?
441NAME IS NULL:2006/04/05(水) 20:34:36 ID:???
>>440
つ[MySQL]
442NAME IS NULL:2006/04/05(水) 20:49:14 ID:rU5gLVh0
同じデータを返すSELECT文をDISTINCTでグループ化する場合と、GROUP BY句でグループ化する場合とどちらが速度は速いのでしょうか?
443NAME IS NULL:2006/04/05(水) 22:22:27 ID:???
>>441
あれで練習できるんですか?
よくわからんのですが・・・
444NAME IS NULL:2006/04/05(水) 22:23:46 ID:???
どういう練習がしたいかだよな。
SQLも方言があるから、どれも使えるようにしたければどれも使ってみるしか無い。
445NAME IS NULL:2006/04/05(水) 22:30:01 ID:???
Postgre というやつなんですが企業の研修で出てきてわけわかんなかったんで家で練習できないかなと
446NAME IS NULL:2006/04/05(水) 22:31:40 ID:???
あ・・ごめんなさいスレ違いみたいですね
>>440は取り下げます
447NAME IS NULL:2006/04/06(木) 00:10:29 ID:FHxUcsgK
重いクエリを発行したら
サイト全体が落ちたような重さになります。
こういう場合は対象範囲を絞って、
何度かに分けてクエリを発行するのが定石なんでしょうか?
448NAME IS NULL:2006/04/06(木) 00:30:10 ID:???
>>447
まず実行プランを確認する。
449435:2006/04/06(木) 03:49:32 ID:???
今回のは少し難しかったみたいだな
450NAME IS NULL:2006/04/06(木) 08:30:26 ID:???
>>447
CPUの使用率が100%になるパターン?

漏れは
where foo in ( select ...)
って書き方をして異様に重くなったことがあったんだけど
SQL文を変更して取り繕った。
451NAME IS NULL:2006/04/06(木) 09:33:27 ID:qhNwdaaY
当方、SQLの練習中の者なのですが
私ではどうにも理解できないエラーが起こって困っています。

create table test(
id text not null primary key,
name text);

とした際に、

ERROR 1170 (42000):BLOB/TEXT column 'id' used in key specification without a key length

と表示されます。
この原因について、どなたかアドバイス等いただけませんか?
MySQLのバージョンは5.0です。
452NAME IS NULL:2006/04/06(木) 09:48:27 ID:???
>>451
主キーが文字列(長さが可変長のデータ)って
ヘンな気がしますが。

エラーメッセージを読むと「キーの長さを指定しないで使った」と言っているので
長さを指定(固定)すればよいと思われ。
453451:2006/04/06(木) 09:58:03 ID:???
解決しました。ありがとうございます。
textをcharにしてみたところ問題なく通りました。
textって、可変長なんですね…(..;)

>>452さん、アドバイスありがとうございます。

主キーが文字列なのは私も気になっているのですが、
A-000のような形のキーを想定しています。
こういう場合、普通はどうするものなのでしょうか…?
454NAME IS NULL:2006/04/06(木) 10:13:42 ID:???
>>453
“A-000”がアルファベット+数値という意味なら、別々の列にして複合キーにするとか。
もしくは“A-000”がもっと複雑なルールに基づくコードなら、固定長文字列(CHAR)にする。
で、可変長文字列なら、TEXTじゃなくてVARCHAR(n)を使います。
455451:2006/04/06(木) 10:24:57 ID:???
なるほどなるほど。

キーの例については、練習用なので内容に深い意味はないです。
GP-03でもARX-7でもなんでも対応できるようにと考えてみました。
サンプル丸写しよりは訓練になるかと思ってやってみたのですが。
どう見ても墓穴ですね…orz

他の項目も、textをやめてcharとかvercharで試してみることにします。

アドバイスありがとうございました。
精進します。
456NAME IS NULL:2006/04/06(木) 10:33:28 ID:???
>>453
主キーは、その項目とは別に どうにかして整数にする癖を
付けるべき。 文字列では、他の表と関連づけるキーとした時
劇的なスピード低下を招く。
457451:2006/04/06(木) 10:47:33 ID:???
>>456
アドバイスありがとうございます。
とりあえず、オートナンバー振ってみます。

親切にどうもです。
458NAME IS NULL:2006/04/06(木) 11:14:46 ID:???
>>456
文字列と整数でそんなに違うんですか?
459NAME IS NULL:2006/04/06(木) 13:10:12 ID:???
試せ
460NAME IS NULL:2006/04/07(金) 06:28:17 ID:???
    , イ)ィ -─ ──- 、ミヽ
      ノ /,.-‐'"´ `ヾj ii /  Λ
    ,イ// ^ヽj(二フ'"´ ̄`ヾ、ノイ{
   ノ/,/ミ三ニヲ´        ゙、ノi!
  {V /ミ三二,イ ,  /,   ,\  Yソ
  レ'/三二彡イ  .:ィこラ   ;:こラ  j{
  V;;;::. ;ヲヾ!V    ー '′ i ー ' ソ
   Vニミ( 入 、      r  j  ,′  
   ヾミ、`ゝ  ` ー--‐'ゞニ<‐-イ
     ヽ ヽ     -''ニニ‐  /
        |  `、     ⌒  ,/
       |    >┻━┻'r‐'´
      ヽ_         |
         ヽ _ _ 」    

  ググレカス [ Gugurecus ]
  ( 2006 〜 没年不明 )
461NAME IS NULL:2006/04/07(金) 08:01:37 ID:???
ひでー  おまえらあれだろ、日常会話で
「へぇ〜、これ凄いですね。 いくらで売ってるんですか?!」
「ググレぼけ」
って、心の中で思ってるだろw
462NAME IS NULL:2006/04/07(金) 08:43:30 ID:???
ググれとは言わないが、聞く前に必ず調ベろとは言います
463NAME IS NULL:2006/04/07(金) 08:49:59 ID:???
>>461
会話の中で出てきた疑問だったら、そこまでは思わない。
調べる時間があったのに調べずに質問してきたら、この時間なんしてたの?って思う
464NAME IS NULL:2006/04/07(金) 10:02:29 ID:???
まあ、言われるなりの理由があるってこった。
465NAME IS NULL:2006/04/07(金) 11:06:56 ID:???
Q: MySQL でわからないことがあったら「まずはググれ」なんですか?
A: そんなことないです。MySQL はドキュメントが予想以上にしっかりとできていますので。
466NAME IS NULL:2006/04/07(金) 11:15:08 ID:???
    , イ)ィ -─ ──- 、ミヽ
      ノ /,.-‐'"´ `ヾj ii /  Λ
    ,イ// ^ヽj(二フ'"´ ̄`ヾ、ノイ{
   ノ/,/ミ三ニヲ´        ゙、ノi!
  {V /ミ三二,イ ,  /,   ,\  Yソ
  レ'/三二彡イ  .:ィこラ   ;:こラ  j{
  V;;;::. ;ヲヾ!V    ー '′ i ー ' ソ
   Vニミ( 入 、      r  j  ,′  
   ヾミ、`ゝ  ` ー--‐'ゞニ<‐-イ
     ヽ ヽ     -''ニニ‐  /
        |  `、     ⌒  ,/
       |    >┻━┻'r‐'´
      ヽ_         |
         ヽ _ _ 」    

  マニュアル ミロー [ Manual Mirror ]
  ( 2006 〜 没年不明 )
467NAME IS NULL:2006/04/07(金) 14:24:26 ID:???
魚を取ってあげるより、魚の釣り方教えた方が、
その人のためにもなるって事かな
468NAME IS NULL:2006/04/07(金) 14:32:31 ID:???
フィールドの型を date にしたんですが、
select時にどう使えばいいんでしょうか?
where hiduke < 2006-01-01
とか指定すれば2006年以前のデータの抜き出しと考えてよろし?
単純に演算子で使えるんでしょうか?
469NAME IS NULL:2006/04/07(金) 14:42:43 ID:???
使えるけど、
2006-01-01
これじゃ2006ひく1ひく1だ
where hiduke < '2006-01-01'
こうかな
470NAME IS NULL:2006/04/07(金) 14:55:40 ID:???
>>467
小学校のでの英語教育を義務化しましょうって事だろう。
MySQLはドキュメントが充実してはいるけど、4.1以降は日本語訳されてない。
471NAME IS NULL:2006/04/07(金) 22:14:22 ID:???
英語って言っても難しい表現はほとんどないので、
中学レベルでも読めると思うけど。
それとつまずく人は4.1以前の内容でつまずいているような気がする。
472NAME IS NULL:2006/04/08(土) 13:58:52 ID:???
ドキュメントがいきなり歴史と他RDBMSとの比較から始まり、ここで挫折する人が多いかと。
473NAME IS NULL:2006/04/08(土) 14:11:17 ID:???
10行以上の文章は読めない軽度の文盲が多いからな。
474NAME IS NULL:2006/04/08(土) 16:11:03 ID:???
>>470
> 4.1以降は日本語訳されてない。
はあ?
http://dev.mysql.com/doc/refman/4.1/ja/index.html
475NAME IS NULL:2006/04/08(土) 17:51:35 ID:???
本人じゃないけど、たぶん4.1「より後は」訳されてないって言いたかったんじゃないかな。
誤解うむから、5系は訳されてないって言ったほうがいいよね。
476NAME IS NULL:2006/04/08(土) 20:59:44 ID:???
英語の前に日本語を勉強しましょうってか。
477NAME IS NULL:2006/04/08(土) 21:30:44 ID:???
5系の日本語マニュアル まだぁ???
478NAME IS NULL:2006/04/08(土) 22:15:10 ID:???
だっておまえら翻訳しても読まないから
479NAME IS NULL:2006/04/09(日) 00:21:21 ID:???
>>478
(ノ∀`)
480NAME IS NULL:2006/04/09(日) 08:45:47 ID:???
こりゃまた痛いところを w
481NAME IS NULL:2006/04/10(月) 01:16:29 ID:???
内容が理解出来ないってのもあるな。
有る程度知識が無いと理解出来ない記述が多い。
482NAME IS NULL:2006/04/10(月) 02:41:48 ID:???
マニュアルはpostgresqlの方が読みやすいな。
483NAME IS NULL:2006/04/10(月) 03:09:49 ID:???
PostgreSQLは激遅で使いものにならないから論外。
484NAME IS NULL:2006/04/10(月) 07:56:30 ID:???
最近のバージョンは軽くなったとか聞いたけど、まだまだ重いの?>PostgreSQL

マニュアルは……別にMySQLのも読みにくいとは思わないけど。
あ、フォントが小さいのはちょっと嫌かも。
485NAME IS NULL:2006/04/10(月) 09:21:25 ID:???
>>484
PostgreSQL 8.1 なら select 以外は
MySQL5 より速くなっているよ。
486NAME IS NULL:2006/04/10(月) 10:53:52 ID:W/8mHrFM
くだらない質問なんですが

hoge1
hoge4
hoge10
hoge11

といったようなデータがあって、後ろの数字で降順ソートすると当然

hoge4
hoge11
hoge10
hoge1

となりますが、これを

hoge11
hoge10
hoge4
hoge1

と降順ソートさせるやり方はあるのでしょうか?hoge001とかhoge011と数字の桁を揃える以外で。
487NAME IS NULL:2006/04/10(月) 13:02:54 ID:???
>>485
で、数字は?
488NAME IS NULL:2006/04/10(月) 14:14:32 ID:???
>>486
ソート用の列を追加するのが考え方として素直だし
処理も速いと思いますが。
489NAME IS NULL:2006/04/10(月) 19:01:50 ID:???
>>485
> select 以外は
ワロス
490NAME IS NULL:2006/04/10(月) 19:18:18 ID:???
MySQLではINSERT文やSELECT文の実行時にはWRITEロックやREADロックが自動的に
取得されるみたいですが、それだとどうしてLOCK TABLES文やUNLOCK TABLES文が
存在するんでしょうか?
491NAME IS NULL:2006/04/10(月) 19:40:40 ID:???
いまからつくるDBの文字セットはutf8_general_ciがいいですか?
492491:2006/04/10(月) 20:30:07 ID:???
eucでそのフィールドに”梶hを入力したら"?"になってしまいました。
鰍使うならばSJISかutf8にしなければならないのでしょうか。
493NAME IS NULL:2006/04/10(月) 21:57:35 ID:???
>>492
SJIS(Shift_JIS)も駄目。Shift_JISにもEUC-JP
の定義に無い文字(NEC特殊文字)だからね。
正しくcp932かeucjpmsを使うか、UTF-8
494491:2006/04/11(火) 01:06:38 ID:???
>>493さんへ
それがおかしいのです。
MySQL 3.23.42を使用しており、そこではeuc-jpをつかっていました。
そのDBのデータには”梶hが含まれており mysqldumpした後の
データをテキストエディタで確認したところちゃんと見えました。

MySQL 3.23.42が動いているマシンはコバルトでそのときにはeucjpms
なんてなかったと思います。
495NAME IS NULL:2006/04/11(火) 04:19:39 ID:???
>>494
古いMySQLの場合と最近のMySQLでは動作が違うよ。
古いのは定義外の範囲もスルーするので実質eucjpms。
最近のMySQLは一度Unicodeの変換テーブルを通る際に
定義外のは除外する"正しい"EUC-JP。
最近のでも変換しないでスルー(素通し)するサーバオプションもあるけど。
496NAME IS NULL:2006/04/11(火) 11:30:25 ID:???
>>490
SELECT時のは一時的なロックだ。
そして、LOCK TABLESは持続するロックだ。
ロケットで突き抜けろ。
497NAME IS NULL:2006/04/12(水) 16:59:34 ID:5DH5/gM3
limit句についての質問です。

limit -1という句を記述したSQLを実行した場合、
以下の結果でした。

MySQL 4.0.26 ○
MySQL 4.1.7 ×
MySQL 4.1.15-log ×

この、limit句に-1を指定する場合の動作について書かれているサイトなどご存じないですか?
498NAME IS NULL:2006/04/12(水) 18:36:54 ID:???
-1ってなんかキモイな、返る件数が-1?
499NAME IS NULL:2006/04/12(水) 18:45:48 ID:???
サブクエリを使用して返ってきた値+パターンでの検索って可能なのでしょうか?

SELECT field1 FROM table WHERE field2 = 'hoge'

でxxxが返ってきたとすると、'xxx%'で検索するようなことがしたいです。
例えば

SELECT * FROM table WHERE field1 = [(SELECT field1 FROM table WHERE field2 = 'hoge')+'%']

みたいな感じでやりたいんですが。
500499:2006/04/12(水) 18:50:38 ID:???
バージョンは4.1.14でした。
もし新しいバージョンで可能ならバージョン上げることも考えます。
お願いします。
501NAME IS NULL:2006/04/12(水) 22:16:46 ID:???
>>498
ケツから指定できたら便利だよな
502NAME IS NULL:2006/04/12(水) 22:42:32 ID:???
ちゃんとorder byで指定しろよ。
503NAME IS NULL:2006/04/12(水) 23:29:26 ID:???
ちゃんとちゃんとの味の素
504NAME IS NULL:2006/04/13(木) 00:13:55 ID:???
ケツから責めるのは変態。
普通は前から責める。
アブノーマルな嗜好は相手に嫌われるよ。

彼女にINSERT権限がありません
http://pc8.2ch.net/test/read.cgi/db/1057289721/l50
505499:2006/04/13(木) 05:09:27 ID:???
自己解決しました。どうもただのスペルミスだったようです…。
506NAME IS NULL:2006/04/13(木) 20:43:30 ID:???
通し番号が付いていないデータベースに対して
頭から一定数ごとにGROUP BYして集計したいとき
どうしたらよいでしょうか

SELECT AVG(hipsize) FROM chugaku ORDER BY name GROUP BY CAST(no/10 AS UNSIGNED);
実際のフィールドには出席番号noがないとき
10人ずつまとめたくてもまとめられないです

出席番号noを追加した仮テーブルをこしらえる
ことが出来れば、それで多分解決するのですが
もう少しスマートな方法はないものでしょうか
507NAME IS NULL:2006/04/13(木) 21:55:06 ID:???
>>506
中学生のヒップサイズの平均を出して何に使うのかkwsk
508NAME IS NULL:2006/04/13(木) 22:34:05 ID:???
アナル紳士としては興味を魅かれるところですね。
509NAME IS NULL:2006/04/14(金) 10:28:12 ID:???
>>506
通し番号がないんだとしたら「頭から」っていうのはどうやって決めるの?
510NAME IS NULL:2006/04/14(金) 19:31:13 ID:???
・データベースに複数のテストトピックがある。
・テストトピックは3つの質問から成っている。
・1つの質問には3つの答えがあり、そのうちの1つだけが正解である。

これを1つか2つのテーブルで作りたいんですけど、どう作ったらいいんでしょうか?
511NAME IS NULL:2006/04/14(金) 20:13:59 ID:???
とりあえず、どんな項目が必要そうか書き出してみたら?
512510:2006/04/14(金) 20:24:30 ID:???
>>511
そうですね。
とりあえずtestテーブルとしてtestNo、testType、questionテーブルとしてtestType、question、answerを項目として考えています。
それでtestTypeをつなげてと考えているんですが、そうすると例えばtestTypeが「音楽」でanswerを3つ表示する場合、questionテーブルからのquestionがDISTINCTで表示されないんです。
これで正しいんでしょうか?
どうしても階層型の図しかイメージできないのでちょっと混乱してます。
513NAME IS NULL:2006/04/14(金) 20:58:47 ID:???
どういうSQLでどういう結果が帰ってきたんだ?
つか、スレ違いじゃね?
514510:2006/04/14(金) 21:01:07 ID:???
>>513
あ、スレ違いですか!?
どうもすいませんでした。
515NAME IS NULL:2006/04/14(金) 21:06:46 ID:???
MySQLの話じゃないからな。

こっちかな?
【帰ってきた】SQL質疑応答スレ 2問目
http://pc8.2ch.net/test/read.cgi/db/1141622643/
516510:2006/04/14(金) 21:08:09 ID:???
>>515
どうもありがとうございます。
そちらの方で1度聞いてみます。
517506:2006/04/15(土) 00:40:24 ID:???
>>509
とりあえずname順でかまいません。

AVG(hipsize)はとりあえずの例で
実際にはさらにMAX(hipsize)-MIN(hipsize)
などで hipsizeのばらつき具合の観察なども
行いたいと考えています。
518NAME IS NULL:2006/04/15(土) 12:59:44 ID:???
最近 MySQL 4.19 を Windows XP の入っているマシンにインストール
してみたのですが、困っていることがあるので、質問させてください。

例えば、1.5 GB ぐらいある容量の大きな *.sql ファイルを MySQL
サーバーにロードしようとすると、相当な時間 (自分のマシンの場合一日以上)
がかかるのですが、この処理をなんとか早くする方法/設定はないでしょうか?
519518:2006/04/15(土) 13:01:05 ID:???
何度もすみません。ちなみにロードは
$ mysql -u root -p DBNAME < LOADFILE.sql
でコマンドラインからやるようにしています
520NAME IS NULL:2006/04/15(土) 18:52:40 ID:???
>>518-519
だーかーらー、Windowsなんて使っている時点でトロイと言う事に気づけよ。
521NAME IS NULL:2006/04/15(土) 21:22:58 ID:???
まともに管理できないUnixよりか遥かまし。
522NAME IS NULL:2006/04/15(土) 21:30:22 ID:???
UNIXをまともに管理出来ないのにWindowsなら管理出来るという事はありえない
>>521はトイレの紙も管理出来てない
523NAME IS NULL:2006/04/15(土) 21:41:06 ID:???
UNIXがまともに管理出来ない>>521は無能
524NAME IS NULL:2006/04/15(土) 21:41:49 ID:???
おう、そういえばトイレの紙を補充せねば
525NAME IS NULL:2006/04/15(土) 22:45:47 ID:???
トイレ紙の管理は幼稚園児にも可能だが、
脳が老化し始めている>>524には肛門の管理が難しくなってきている
526NAME IS NULL:2006/04/15(土) 23:16:58 ID:???
>>522
Windowsなんて使ったこともないし、使う気もないが、なぜUnixで管理できないと
Windowsで管理できるこということはありえないのかは知りたい
527NAME IS NULL:2006/04/16(日) 00:46:55 ID:???
だが教えない
528NAME IS NULL:2006/04/16(日) 07:14:40 ID:???
>>518 アドバイスにはならないが、試しに

$ mysql -u root -p でmysqlクライアントに入ってから、

mysql > use DBNAME
mysql > source LOADFILE.sql

で、やってみてくれ。
529NAME IS NULL:2006/04/16(日) 13:09:27 ID:???
レコードの値を「変更」ではなく「入れ替える」ことはできますか?

AレコードとBレコードの unique を定義しているフィールドで入れ替えを行いたいのですが、

まずAの値を取り出し変数に保存($A)
次にAに使用されていない値を UPDATE 〜 SET して

次にBの値を保存($B)
Bに$Aを UPDATE 〜 SET
最後にAに$B を UPDATE 〜 SET

かなり面倒(アホ)な処理をしていると思うのですが方法はありますでしょうか
530529:2006/04/16(日) 13:14:06 ID:8RWPZyZy
↑もし一度のクエリで不可能ならば、もっとスマートな処理法などを御教示お願いします。
531NAME IS NULL:2006/04/16(日) 15:26:59 ID:???
>>518
「サーバにロードする」の意味が分からないけど、
INSERT を速くしたいならauto_commitをoffにするとか
一時的にINDEXを無効にしてINSERTが終わった後にINDEXを付けるとか
すればいいんじゃね?
532518:2006/04/16(日) 19:38:42 ID:???
>>皆様
Windowsを消去して、Linuxで再構築中です。
なんか、よそさうです。お騒がせしました。
533NAME IS NULL:2006/04/16(日) 19:46:46 ID:???
         _,.r::'::::::::::::::-.、
       r::::_;:---、、;;::-'ー、ヽ
      /':::i'         ヾi
    ,,.r、:::::::i        .: ll
    rr;i:::,r:::::!  _,,,__,  _,,,..._ .l:i
   ヾ:r::;:-、:r  i'tテ;:. i:'tテ:r i::ヽ
    `ヾ::rt'    ´  '  l::. ´ !r'
        ヾ.ィ     -、ノ:.  l
        ./!、   ー-‐;':. /
        / ヾ ヽ、   '  /
      ∧   ヽ ` 7‐r_'/ヽ
     ,r  ヽ、   ` <ニrヽ 〉
   ,r'        -、     ヾ il l、
  r            ̄ t- ヾi: lヽ

    ホーソレデ[Edward Horsorde]
     (1765〜1822 ノルウェー)
534NAME IS NULL:2006/04/16(日) 21:05:03 ID:???
みなさんに質問ですが、MySQLのインストールで
linux:/usr/local/mysql # ./bin/safe_mysqld --with-mysql=usr/local/mysql
と入力しMySQLサーバーを起動させたいのですが、

Starting mysqld daemon with databases from /usr/local/mysql/data
STOPPING server from pid file /usr/local/mysql/data/linux.pid
060416 20:56:36 mysqld ended

となってしまいます。どうすればサーバーに接続できるでしょうか? バージョンは
PHP php-5.1.2
Apache 忘れてしまいました・・・
Mysql mysql-5.0.19  です。
535NAME IS NULL:2006/04/16(日) 21:45:47 ID:???
    , イ)ィ -─ ──- 、ミヽ
      ノ /,.-‐'"´ `ヾj ii /  Λ
    ,イ// ^ヽj(二フ'"´ ̄`ヾ、ノイ{
   ノ/,/ミ三ニヲ´        ゙、ノi!
  {V /ミ三二,イ ,  /,   ,\  Yソ
  レ'/三二彡イ  .:ィこラ   ;:こラ  j{
  V;;;::. ;ヲヾ!V    ー '′ i ー ' ソ
   Vニミ( 入 、      r  j  ,′  
   ヾミ、`ゝ  ` ー--‐'ゞニ<‐-イ
     ヽ ヽ     -''ニニ‐  /
        |  `、     ⌒  ,/
       |    >┻━┻'r‐'´
      ヽ_         |
         ヽ _ _ 」    

  ググレカス [ Gugurecus ]
  ( 2006 〜 没年不明 )
536534:2006/04/16(日) 21:50:00 ID:???
>>535
 ググってみて一通り試してみたのですが駄目でした・・・。
537NAME IS NULL:2006/04/17(月) 00:08:37 ID:???
>>534
ログ見れ
538NAME IS NULL:2006/04/17(月) 00:51:24 ID:???
>>534

060416 20:56:36 mysqld ended となっているので、
サーバーがmysqldの事だったら接続は無理でしょう。

MySQL5系の日本語マニュアルはまだないので、
下記のURLあたりを見ましょう。

2.4.2. MySQL サーバの起動に関する問題
http://dev.mysql.com/doc/refman/4.1/ja/starting-server.html
539NAME IS NULL:2006/04/17(月) 02:03:48 ID:???
auto_incrementってつかっても問題ないですか。
これ読むと危険そう。
http://blog.livedoor.jp/nipotan/archives/7100625.html

phpでmysql使用しているのですが、pear mdbのnextIdつかってます。
540NAME IS NULL:2006/04/17(月) 03:28:42 ID:tXWVnh6W
>>539
ネタ紹介乙
541NAME IS NULL:2006/04/17(月) 11:55:18 ID:???
MySQLのくだ質がないのでここで聞かせてください。

メモリ内のキャッシュを消して新たにHDDからDBを読み込みたい時に、
FLUSHではダメですか?
以下のURL読むとそれでいけそうな感じなのですが、、、
http://www.buena-idea.net/~hironobu/mysql/m-2-12.html
http://dev.mysql.com/doc/refman/4.1/ja/query-cache.html

実際にAとBのホストがNFSでデータを共有していて、
AとBどちらもログインした状態で「片方更新→FLUSH→もう片方FLUSH→select」
とやってみたのですが、古いデータを持ったままなのです。

どなたかMySQLの動きを知っている方いましたら問題点を教えてください。
542529:2006/04/17(月) 11:59:27 ID:???
>>529 の解決方法ありましたら宜しくお願いします。
543NAME IS NULL:2006/04/17(月) 12:42:51 ID:???
>>529
そのアホなやりかたしかねーんじゃねーの。
普通DBは並びなんてかんけーねーし。
並びは order by で作る物だから、並びの重みを定義する
フィールドでも作って、その値を変えたりするべき。
544NAME IS NULL:2006/04/17(月) 15:11:13 ID:bdLyXr1W
>>543
並び(ORDER)ではなく、AとBとで値を入れ替える方法です。
そのフィールドはユニークになっているので、今は下のような流れで変更しています(PHP)


SELECT test FROM table1 WHERE id = $a;
UPDATE table1 SET test='0' WHRER id = $a;

SELECT test FROM table1 WHERE id = $b;
UPDATE table1 SET test=$a_tmp WHRER id = $b;

UPDATE table1 SET test=$b_tmp WHRER id = $a;
545NAME IS NULL:2006/04/17(月) 15:24:24 ID:???
>>541
ホストAでMySQLが動いてて、ホストBでもMySQLが動いてて
両者はNFSで同じデータベースファイルを共有してるって?
そんな動作はMySQLは保証してないんと違う?
クエリキャッシュでテーブルが更新云々言ってるのは、
一つのMySQLサーバプログラムの中の話だと思うが。
546NAME IS NULL:2006/04/17(月) 15:53:25 ID:???
>>544
AとBってなんだよw 定義が絞れてないぞ。
レコード同士の特定フィールドの値を入れ替えるんっしょ?

2,3行目を一体化できる、とか細かいのは置いといて、
結局SQLではそういう処理手順でしょ。
547NAME IS NULL:2006/04/17(月) 15:59:14 ID:???
>>545
ぁ、DBを一度に見に行ったらマズイとは思いつつのことです。
Flushでキャッシュをクリアして、もう一度HDDを読みに行ってくれるなら
2台でアクセスしても問題ないのかなぁと思って。
そうするとやはり実際にクリアしてるってわけではないのか?
548NAME IS NULL:2006/04/17(月) 23:20:42 ID:???
>>537
>>538
どうもありがとうございました。エラーは別のところにありました。
549NAME IS NULL:2006/04/18(火) 16:57:57 ID:???
テキストファイル(日本語2バイト文字)を読み込み、
全ての異なる語を一個ずつmysqlデータベースに入れていく
(select .. where word like "word" で一致がなければinsert )という処理をやっているのですが、

Windows(mysql5.0.0-alpha-nt)とLinux環境(mysql4.1.12)で、
同じ文字コードで同じテキスト内容のファイルなのに
windowsでは目で見て正しい結果が得られるのに、
linuxの方では ほとんどの語が like演算で一致とみなされてしまうのですが、
これを何とか全ての語を完全に区別することはできないでしょうか?

550NAME IS NULL:2006/04/18(火) 19:52:01 ID:???
質問させてください。
最近データベースを扱いはじめ、こりゃいいとハマってるものです。
ただ、まだ通常のアプリケーションのクセが抜けず、DB的な思考ができていないようです。
(以下、相当低レベルな質問だと思いますが、ご容赦ください)

ブラウザゲームを作っており、シナリオがどれくらい進行しているかのデータをユーザーそれぞれに持たせています。
1人256個のフラグを持たせ、その何番目のbitが0だ、1だという状況を見てシナリオが進みます。
私は
・256bit分つまりintを8つ持たせ、それぞれ flg_0, flg_1 ... flg_7とする
という実装をしました。

36番目と128番目のフラグが立っているユーザーを検索〜といった時は、
$data[1] = 0x0000008;
$data[4] = 0x0000001; // その他のdata[x]は0だと思ってください
$data[0] = flg_0 & $data[0] AND $data[1] = flg_1 & $data[1] ... AND $data[7] = flg_7 & $data[7]
というような条件文で検索しています。

ですがこのやり方、印象的に「データベースっぽくない」と思っています。
そこで、いわゆるデータベースっぽいやり方はどういうやり方なのでしょうか?

■1
[account_id][on_flg_number] というフィールドで作られたテーブルをつくり、最大「ユーザー数×フラグの数」個データが入るつもりでやる。
account_idもon_flg_numberも整頓されているのだから検索は早い?

■2
[account_id][flg000][flg001][flg002]......[flg255]というフィールドで作られたテーブルをつくる。最大「ユーザー数」個のデータが入る
データ数がユーザー数分なので許容範囲? phpMyAdminなどを使った時、横に長くてやってられない…。

1がデータベースっぽい気がします。いかがでしょうか?
551NAME IS NULL:2006/04/18(火) 20:08:24 ID:???
>>550
プラグが256全て同列なら「2」で良いんじゃない?
phpMyAdminの表示なんか関係ない。

ってかビットフラグの延長で考えてると大変かも。
リレーショナルDBの利点を有効に使えるようなプレーヤー管理を考えるべき
552NAME IS NULL:2006/04/18(火) 20:18:31 ID:???
いや。流石に256こものカラムがあるテーブルは、保守時にわずらわしすぎるだろう
553NAME IS NULL:2006/04/18(火) 21:03:41 ID:???
>>550
SET型を使う、が正解では。
http://dev.mysql.com/doc/refman/4.1/ja/set.html

1カラムに 64のフラグがセットできるので 4カラムで済みますし、
各フラグには文字列が使えますので、可読性も高まります。
554NAME IS NULL:2006/04/18(火) 21:08:56 ID:???
>>550

データベースらしいといったら「2」だと思うけど、
ゲームらしさからなら、1フィールドに「復活の呪文」を格納。

最後はアプリ側の都合のほうで決めればいいんでね?
好きにしてくれ。
555NAME IS NULL:2006/04/18(火) 23:25:34 ID:???
>>554
え、RDBMSっぽいのは1でしょ。
onのトコだけinsertしとけばいいんじゃね。

556NAME IS NULL:2006/04/18(火) 23:36:04 ID:???
>>551-555
みなさん、アドバイスありがとうございます。
「これ!」というセオリーはないみたいですね。
もう少し考えてみます。
何か決め手を持っていらっしゃる方がいましたら、レスしていただけると幸いです。
557NAME IS NULL:2006/04/19(水) 05:11:28 ID:???
>>555
俺も1だと思うなぁ。 2は、拡張や保守の面で
問題出てくる様に思うんすけど。

>>553 のSET型を使えるならそれでいいし。
558NAME IS NULL:2006/04/19(水) 06:27:06 ID:???
>>555

少し違う話だけど、以前に売上集計のテーブルを作った時に
商品コード→月1売上→月2売上→月3売上→月4売上→月5売上→月6売上
というように定義しましたが、その後半期決算から年間決算に以降して大後悔

商品コード→年月→売上高 に苦労して直しました。
属性が変更になる可能性のある要素をフィールドで固定すると後で大変です。

従って「1」がおすすめ。
559NAME IS NULL:2006/04/19(水) 16:18:44 ID:???
>>550
2の方法は、どちらかというと自分でバイナリデータを
設計する様な場合によくやる方法ですね。
RDBMS では、1ですよ。
560NAME IS NULL:2006/04/20(木) 00:59:25 ID:???
皆様、本当にありがとうございます。
色々な意見がでてきて大変参考になっています。

そもそも全てのプレイヤーがフラグをONにできる(ゲームをやりこむ)わけではなし、
1で設計を検討してみようと思います。
ただ、SET値というものもおもしろそうです。こちらもちょっと試してみようかと思います。
561NAME IS NULL:2006/04/20(木) 01:42:43 ID:???
自然にできるこのファイルはなんですか?

/var/lib/mysql/ホスト名-bin.001
/var/lib/mysql/ホスト名-bin.002
/var/lib/mysql/ホスト名-bin.003
/var/lib/mysql/ホスト名-bin.004
562NAME IS NULL:2006/04/20(木) 07:57:22 ID:???
>>561
更新クエリのバイナリ形式ログ。
不要なら、my.cnfから log-bin をコメントアウト。
563NAME IS NULL:2006/04/20(木) 17:52:06 ID:???
mySQLのデータをメンテナンス出来る便利なツールってないですか?
QueryBrowserというものを使ってみたんですが日本語が扱えないし、
コマンドプロンプトは使い勝手が悪いし。。
なにかオススメがあったら教えてください。
564:2006/04/20(木) 17:52:41 ID:???
ちなみにWindowsです
565NAME IS NULL:2006/04/20(木) 18:22:44 ID:???
>>563
Navicat。
無償ならhttpdとPHP入れてphpMyAdmin
566NAME IS NULL:2006/04/20(木) 18:27:45 ID:???
>>565サンクスです。
httpdもphpも入ってます。試してみます。
567NAME IS NULL:2006/04/20(木) 23:05:11 ID:7lBM+aBO
mysql 4.1.xです。はまっています。ご教授ください。
----------------
犬 あか
犬 あお
犬 きいろ
犬 しろ
.
.

猫 あか
猫 あお
猫 きいろ
猫 しろ
.
.
----------------
といったデータだとします。
これを、生き物単位では最大3件までの queryを出したいのですが、
どのようなsqlにすれば良いでしょうか?(query速度が要求されています。)
つまり、以下のように出したのです。
----------------
犬 あか
犬 あお
犬 きいろ
猫 あか
猫 あお
猫 きいろ
猿 あか
猿 あお
猿 きいろ
----------------
よろしくおねがいします。
568NAME IS NULL:2006/04/21(金) 00:57:50 ID:???
>>567
エスパー募集スレへどうぞ
569NAME IS NULL:2006/04/21(金) 02:45:30 ID:pubMybd7
レコードの中の共通の単語を抽出したいんだけど

1,サンマの塩焼き
2,サンマの刺身
3,サバの味噌煮
4,おいしいサバ煮込み

たくさんあるレコードの中から共通する単語
この場合、サンマとサバを抽出したいんだけどできますか
570569:2006/04/21(金) 02:47:16 ID:pubMybd7
ごめん続き
抽出する単語はこっちは知らなくて、
あくまでも複数共通する単語を抽出する事はできるかって事です
571NAME IS NULL:2006/04/21(金) 06:35:26 ID:???
>>569-570
ドラえもんに頼め。
572NAME IS NULL:2006/04/21(金) 08:24:23 ID:???
>>569
抽出する単語をこっちがしらないんなら
データベース的に検索できるわけなかろうが
テキストから語を抽出したいなら茶筅でもつかっとけ
573NAME IS NULL:2006/04/21(金) 11:07:47 ID:???
>>570
それは データベースが受け持つ様な処理じゃないよ
574NAME IS NULL:2006/04/21(金) 12:20:20 ID:kfIKfq3C
初めまして。

LinuxにMySQLを入れてphpmyadminで管理したいと思っています。

MySQLをソースからコンパイルしてインストールした場合、
phpmyadminの「Language」の設定に「Japanese(ja-sjis)」が選択できるのですが、
ディストリビューション付属のRPMで入れると「Japanese(ja-sjis)」の選択肢が無くなってしまっています。

FedoraやCentOS等色々試したのですが、
どれもRPMで入れるとダメでした。

ソースからインストールしたときのconfigureのパラメータは
--prefix=/usr/local/mysql --with-charset=ujis --with-extra-charsets=all --with-mysqld-user=mysql
でした。本の受け売りなので詳しい意味は分かってません・・・(^^;

ディストリ付属のRPMからインストールしたときに
phpmyadminで「Japanese(ja-sjis)」する方法はあるのでしょうか?

どなたかご存知の方がいらっしゃいましたらよろしくお願いいたします。
575NAME IS NULL:2006/04/21(金) 14:51:27 ID:???
>>567
無理。どうしてもというなら
犬猫猿を抽出し、今度は
犬猫猿ごとにSELECTする
しかないです
576NAME IS NULL:2006/04/21(金) 15:01:17 ID:???
>>575
よく>>567の情報だけで無理と結論できるなw
577NAME IS NULL:2006/04/21(金) 19:45:51 ID:???
早めに止めを刺しておいたほうが良いんじゃ w
578NAME IS NULL:2006/04/21(金) 20:27:23 ID:???
Linux板のFedoraやCentOSスレで訊いたほうがいいよ。

フェッチしといてアプリケーション側で操作すべきだよな。
3つを選ぶための一意に決まる条件も示されてないし。
579NAME IS NULL:2006/04/21(金) 20:31:11 ID:???
ジョジョビジョバァ
580567:2006/04/21(金) 21:29:53 ID:6JOh7n4Q
ここには何度か助けられていてまさにエスパーやドラえもんです。はい。
無理っぽいです・かね。むちゃくちゃな量なのでフェッチは厳しいです。
3つを選ぶ条件は fulltext-search のスコアの上位順で、あるカテゴリ毎
(例では生き物)に出す個数を制限したいんです。
581NAME IS NULL:2006/04/21(金) 22:09:56 ID:???
phpmyadminて何故日本とかフランスとかIT並進国でだけ人気があるんだろう?
582NAME IS NULL:2006/04/21(金) 22:22:41 ID:???
並進国ってなんだ
米は?
583NAME IS NULL:2006/04/21(金) 22:31:37 ID:???
>>567
お前はLIMITも知らないのかと小一時間(ry

SELECT 生物名 FROM テーブル GROUP BY 生物名;
の結果を配列にしといて、その結果を使って

SELECT 生物名,色 FROM テーブル WHERE 生物名 = 配列[i] ORDER BY スコア LIMIT 3;

でおk

584567:2006/04/22(土) 12:46:17 ID:/mwJR2U/
>> 583
いや、速さが必要なので1度のqueryでできればなぁと。
575 さんと同じ見解ですね。どうもでした。
585NAME IS NULL:2006/04/22(土) 15:49:21 ID:???
>>584
UNION使えば1回のクエリで結果を得られるよ。
だからといって速いとは限らないが。

#クエリの数が少なければ速いなんて考えてるアホは減らないのね。。。
586NAME IS NULL:2006/04/22(土) 21:05:16 ID:???
MySQL 4.1.15 (XP)
text型の所に文字列を入れようとしているんですけど、教えてください。文字列はシングルクォーテーションで囲んで
入れるじゃないですか。その時にその文字列の中にシングルクォーテーションがある時はどうすればいいんですか?

587NAME IS NULL:2006/04/22(土) 21:27:28 ID:???
バックスラッシュでエスケープするんじゃなかったっけ?
\'
みたいに。
588NAME IS NULL:2006/04/22(土) 21:50:25 ID:???
>>587
Query Browserからやってみました。なるほど。有難うございます。
589NAME IS NULL:2006/04/23(日) 00:20:07 ID:???
Cでの接続が出来た。当たり前だけど、ちょっと感激。
590NAME IS NULL:2006/04/23(日) 14:49:16 ID:???
ちょっとした質問なんですが、tableのフィールドの順番って何か気をつかってますか?

今趣味でDBの設計をしているんですが、みなさん何かポリシーがあるのかなぁーと。
591NAME IS NULL:2006/04/23(日) 14:56:58 ID:???
>>590
ある。思いついた順番。
592NAME IS NULL:2006/04/23(日) 15:35:22 ID:???
>>591
マジっすか!

index系ははじめの方とかそういうのもなしですか?
593NAME IS NULL:2006/04/23(日) 16:12:51 ID:???
1番目がタイムスタムプ
2番目がauto incrementのなにか
3番目以降てきとう
594NAME IS NULL:2006/04/23(日) 16:16:46 ID:???
>>593
そういうのもないんじゃなかったっけな。
他社のDBによっては、PrimaryKeyは先頭からの連続する
項目に限る とか有ったりするけど。

適当に、名前の次にふりがな、とか後でメンテし易そうな
順番に並べときゃいんじゃない。
595NAME IS NULL:2006/04/23(日) 16:18:06 ID:???
>>594
1番目がタイムスタンプなんて珍しくねーか?!
596NAME IS NULL:2006/04/23(日) 16:25:13 ID:???
マジで適当なんですか!

1番目は、プライマリキーがあるなら、プライマリキーってのは標準かと思ってた…
あとは、適当か…
597NAME IS NULL:2006/04/23(日) 17:35:46 ID:14gddPqI
MySQL5.0なんですが
CentOSで
文字コードの変更を行いたいのですが
/etc/my.iniに設定ファイルが
ないのですが、MySQL5.0では違う場所に
iniファイルがあるのでしょうか?

教えてください。エロイ人たち
598NAME IS NULL:2006/04/23(日) 17:44:21 ID:???
>>597
locate my.ini
599NAME IS NULL:2006/04/23(日) 17:47:02 ID:???
CentOSのインストール方法に依存するから、リナ板のCentOSスレで訊いたら?
600591:2006/04/23(日) 17:48:55 ID:???
>>592 まじ

あっ、でもPrimaryKeyは先頭。
他は本当に徒然なるままに、、、

601NAME IS NULL:2006/04/23(日) 17:52:56 ID:???
掲示板のテーブルで 
table1 (post_id,post_date)
table2 (post_id,post_text)

同時にINSERTしたいのですが、どのようにすればいいでしょうか?

2回にわけてINSERTしようと考えましたが、post_idがauto_incrementであるため、
タイムラグが起きるとちぐはぐになる可能性があると思いました。

よろしくお願いします。
602NAME IS NULL:2006/04/23(日) 17:55:22 ID:???
>>597

もしかして、my.iniではなくてmy.cnfではない?
603NAME IS NULL:2006/04/23(日) 17:57:21 ID:???
>>601
auto_incrementやめたら?
604NAME IS NULL:2006/04/23(日) 18:03:30 ID:???
>>603
よ、予想外の答え…なるほど。

auto_incrementを使わない場合は、
INSERT table1 INTO VALUE( (SELECT post_id FROM table1) , ???)

あー、わかんないです…
605601:2006/04/23(日) 18:08:09 ID:???
auto_incrementを使わない場合のプライマリキーの整合性を取る方法って
どうやるのが一般的ですか?

思いついたのは、一旦LOCKしてから、SELECTで一番最新のprimary keyを取ってきて
+1 してINSERT, そして、UNLOCK

でいいんすかね。
それとも>>604みたいにSQL内だけで解決する方法があるのでしょうか?
606603:2006/04/23(日) 18:08:59 ID:???
>>604
SQLだけで解決しようとしないで、アプリ側でpost_idを生成して、

INSERT table1、、
INSERT table2、、

これが一番簡単でない?
607NAME IS NULL:2006/04/23(日) 18:11:50 ID:???
>>605

一般的かどーかしらないけど、
テーブルのカウントをとって、+1をしてINSERT というのをよく使う(俺は)。
608NAME IS NULL:2006/04/23(日) 18:12:16 ID:???
>>604
あらかじめ現在時刻とプロセスIDか何かで、ユニーク値を用意しておけばよい希ガス。
算出方法が思いつかないのなら、さいあく整理番号を記録したテーブルを用意するとか
方法はいくらでもある。
609NAME IS NULL:2006/04/23(日) 18:21:45 ID:???
>>606,>>607
これだと、多数のユーザによってほぼ同時に処理が発生した場合、同じpost_idが
生成される可能性があるとおもったんですけど、違います??
610601:2006/04/23(日) 18:24:35 ID:???
こんなのありましたけど、答えはでていないのかな…
http://question.excite.co.jp/kotaeru.php3?q=2084101
611NAME IS NULL:2006/04/23(日) 18:26:45 ID:???
>>601
table1 (post_id,post_date,post_text)
でテーブル一つにすればいいじゃん
612601:2006/04/23(日) 18:31:38 ID:???
多分これっぽい気がする

INSERT INTO foo (auto,text)
VALUES(NULL,'text'); # generate ID by inserting NULL
INSERT INTO foo2 (id,text)
VALUES(LAST_INSERT_ID(),'text'); # use ID in second table

>>611
一つから2つにしようとしているので…
613NAME IS NULL:2006/04/23(日) 19:15:17 ID:???
>>609 待たせとけ。つーか、そんなに待たないでしょ。
post_idの作り方だと思うけど。アプリ側は並列に走る訳ではないよね?
614NAME IS NULL:2006/04/23(日) 22:54:56 ID:???
LAST_INSERT_ID() は、他のテーブルへ参照キーとして登録するのは
いいと思うんだけど、+1して同じテーブルにユニークキーとして追加
ってのはどうかと思うんだなぁ。 その間に追加されてる可能性は十分あるし。

やっぱ、一意のID発行窓口となる様な プログラムかなんかを別途用意して、
そこからキーを受け取って来る様にするべきだと思うねぇ。
615NAME IS NULL:2006/04/23(日) 23:15:59 ID:???
>>612に正解が出ているのに何をいまさら?
616610:2006/04/23(日) 23:29:32 ID:???
>>613
待たせる = ロックということですよね?
アプリは、不特定多数が使うWebアプリなので下手するとデータに不整合が

>>614
ちょっとわからないです…

>>612
それでやっぱりいいんですね。
自信がなくて。
617NAME IS NULL:2006/04/24(月) 18:59:40 ID:???
MySQL5.0をFedoraCore5に入れて
文字コードを以下のように設定しました。

Server characterset: utf8
Db characterset: utf8
Client characterset: utf8
Conn. characterset: utf8

windowsクライアントからtelnetで操作するときに、
SJISとEUCとJISしか文字コード選択枠が無く、
utf8は文字化けしてしまいますが、
これを解決するにはどうすればいいでしょうか?

それとも
telnetで操作するにはDB側の文字コードがSJISとEUCとJIS
に限定されてしまうのでしょうか?
618NAME IS NULL:2006/04/24(月) 19:48:57 ID:???
>>617

結論:windowsを使うのが悪い。
619NAME IS NULL:2006/04/24(月) 20:36:03 ID:???
>>617
telnetなんて平和な時代の遺物のことはとっとと忘れて
utf8対応のsshクライアント使ってください。
620617 :2006/04/24(月) 20:55:23 ID:???
>>618
>>619

なるほど、そういうことかぁ〜。


ちまみに、

LOAD DATA LOCAL構文で、
クライアントPCからホストPCのMySQLへデータを追加する際に、
文字コードUTF-16で書かれたdata.txtファイルを
自動的に文字コードShift-JISに変換して格納したいのですが、
技術的に可能でしょうか?

もし可能でしたら
その方法を教えてください!
621NAME IS NULL:2006/04/24(月) 21:46:24 ID:???
csvファイルを保存するときに、
文字コードを指定する方法ってありますでしょうか?
マクロのが書けるので、方法あったらおせーてください!
622621:2006/04/24(月) 21:49:20 ID:???
>>621
板間違えました。。
623NAME IS NULL:2006/04/24(月) 21:52:29 ID:???
PHPからデータの追加更新に関してお尋ねします。

現在は、主キーで引っ掛けてSELECTして、
データが存在していればUPDATE
存在していなければINSERT  としています。
これをREPLACEで一発でやるのとでは、どちらが良いのでしょうか?

ちなみにデータは1レコードあたり5カラム程度です。
624NAME IS NULL:2006/04/24(月) 23:04:50 ID:???
>>617
utf-8 teraterm使えば?
625NAME IS NULL:2006/04/25(火) 01:01:00 ID:???
>>623
replace だと delete してから insert することになる。
myisamだと両方が排他ロックをかけるね。

select → update だと
select に関しては共有ロックだね。
update は排他ロックだね。
ただし、select が終わった直後に他が更新して、
その後更新することもありうる。

innodbだと両方ロックは同じ。
ただし、後者はトランザクション使えるので、
データの整合性は保てる。

カウンタなどのあまり厳密でなくていいデータなら、
後者のほうが速い感じはする。
厳密な整合性が必要なら、innodb でトランザクションかなー。

関係ないけどjavaだと、update したときに更新された件数を返すから、
それが0のときは insert とかできたりするけど、やってることは同じだねー。
626NAME IS NULL:2006/04/25(火) 16:42:24 ID:???
MySQL5.0 ですが、新たにWebアプリを立ち上げる場合、4.0から乗り換えても大丈夫でしょうか?
4.1のときは、日本語の問題がぼろぼろだった気がするので、不安です。
627NAME IS NULL:2006/04/25(火) 17:48:22 ID:???
MySQLは大丈夫ですが、あなたの脳がぼろぼろではないかと心配です
628NAME IS NULL:2006/04/25(火) 23:07:58 ID:???
>>615
LAST_INSERT_ID()ってスレッド変数で記憶してるの?
そんなわけないよね。
だったら>>614がいってるように>>612はアトミックにやらないと不整合が起きるのでは?
629601:2006/04/25(火) 23:14:05 ID:???
>>628
不勉強で申し訳ないのですが、アトミックにやるってどういう意味ですか?

マニュアルを見たところセッションごとに保存しているみたいなことが書いてあった
ような…
630NAME IS NULL:2006/04/25(火) 23:15:49 ID:???
テーブルのフィールドに途中からインデックスをつけることって問題になることって
ありますか?
631NAME IS NULL:2006/04/25(火) 23:37:50 ID:???
>>628
接続毎に記憶<LAST_INSERT_ID
632NAME IS NULL:2006/04/26(水) 19:17:37 ID:???
原子力的にやるんだよ。
633NAME IS NULL:2006/04/27(木) 02:44:53 ID:???
DBD::mysqlのインストールで詰まっています。

install_driver(mysql) failed: Can't load '/root/.cpan/build/DBD-mysql-3.0002/blib/arch/auto/DBD/mys
ql/mysql.so' for module DBD::mysql: /root/.cpan/build/DBD-mysql-3.0002/blib/arch/auto/DBD/mysql/mysql.so: undefined symb
ol: mysql_stmt_free_result at /usr/lib/perl5/5.8.0/i386-linux-thread-multi/DynaLoader.pm line 229.

CPANからのインストール時のコンパイルで、以上のようなエラーが出てしまい、失敗します。
/root/.cpan/build/DBD-mysql-3.0002/blib/arch/auto/DBD/mysql/mysql.soファイル自体は、この位置にちゃんとあります。

そこで、
ttp://perldoc.jp/docs/modules/DBD-mysql-2.1026/DBD/mysql/INSTALL.pod
上記の資料を見るなどして、libmysqlclient.aやlibmysqlclient.soを/usr/lib/mysql以下に置くなど
いろいろやってみているのですが、どうしてもうまくいきません。

どなたか、アドバイスを頂けないでしょうか?
よろしくお願いします。
634NAME IS NULL:2006/04/27(木) 09:05:21 ID:???
>>663
おくなら/usr/lib/mysqlじゃなくて/usr/libでそ。
というか、ちゃんと環境書けよ。そもそもどーやってMySQL入れたんよ?
ま、rpmとか使って入れたほうがいいんじゃね?

635NAME IS NULL:2006/04/27(木) 15:50:39 ID:???
MySQL4.0.25、MyODBC3.5.11-2、Access2000で
文字列の最後が次の文字のどれかだと更新できないって
のはもうなおってるんでしょうか?

― ソ Ы 噂 浬 欺 圭 構 蚕 十 申 曾 箪 貼 能 表 暴 予 禄 兔
喀 媾 彌 拿 杤 歃 濬 畚 秉 綵 臀 藹 觸 軆 鐔 饅 鷭

最後に全角スペース付け加えれば更新できるけど
根本的になおして欲しいなぁ
MySQL5.0.09でもダメだったし
636NAME IS NULL:2006/04/27(木) 15:59:19 ID:???
>>635
SQLインジェクションって知ってる?
637NAME IS NULL:2006/04/27(木) 16:15:56 ID:???
>>636
SQLが風邪引いた
638NAME IS NULL:2006/04/27(木) 16:21:03 ID:???
>>637
馬鹿は黙って炉
639NAME IS NULL:2006/04/27(木) 18:16:10 ID:mxyiUKqr
mysqlコマンドライン上から
mysql -u*** -p*** < ./sql.txt
で実行しても、
ERROR 1064: You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '<br />
<b>Fatal error</b>: Maximum execution time of 300 secon

と蹴られてしまいます。

実行時間を設定することはできないのでしょうか?

ちなみにsourceからやっても同じでした。
640NAME IS NULL:2006/04/27(木) 20:54:48 ID:pAqBPqZq
ここはひどいインターネッツですね
641NAME IS NULL:2006/04/28(金) 03:01:32 ID:???
>634
すみません。
環境は、RedHatLinux 9
MySQL自体は、MySQL ABから取ってきたtar.gz形式のパッケージを、/usr/local/に展開しています。

rpmでは、MySQL本体も含めて、うまく入らなかったので。
642NAME IS NULL:2006/04/28(金) 09:20:26 ID:???
>>641
頭悪いうえに師匠も友達も居ないから2chに質問したんですね?
いえ、いいんです。あなたを責めているわけではありません。
ただちょっと確認してみたかっただけなんです。
643NAME IS NULL:2006/04/28(金) 09:31:43 ID:???
./configure
make
make install
644NAME IS NULL:2006/04/28(金) 10:55:57 ID:???
mysql(5.0.19-nt)の言語をujis、接続照会順序をujis_japanese_ciにしてやってるんですが、
text型のフィールドに日本語を入れると
 #1406 - Data too long for column 'comment' at row 1
となってデータが入力できません。
なぜか照会順序を適当な他言語にしたりするとエラーがでなかったりします。
これはどうすれば解決できるでしょうか?
645NAME IS NULL:2006/04/28(金) 11:19:23 ID:???
投げている日本語がujis以外だったりして
646NAME IS NULL:2006/04/28(金) 11:28:38 ID:???
phpMyAdminとブラウザの文字コードもEUC-JPですし、
EUC-JPのスクリプトから入れた場合も同様なので、それはないのではと思いますが。
647NAME IS NULL:2006/04/28(金) 15:01:34 ID:???
5.0.20a-nt です。

double 型カラムで、そのカラムの値をWHERE句で指定してもヒットしません(floatでも同様でした)。
例えば次のようなテーブルを作り、

CREATE TABLE `test` (
`id` decimal(10,0) NOT NULL default '0',
`n` double default NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='InnoDB free: 9216 kB; InnoDB free: 9216 kB';

例えば以下のような値を入れてみます。

insert into test values
('1', '1.511'),
('2', '1.512'),
('3', '1.513'),
('4', '1.514'),
('5', '1.515'),
('6', '1.516'),
('7', '1.517'),
('8', '1.518'),
('9', '1.519'),
('10', '1.520');

SELECT * FROM test WHERE n = 1.513 OR n = 1.514ではヒットしますが、
SELECT * FROM test WHERE n = 1.515 OR n = 1.520 OR n = 1.511 OR n = 1.519ではヒットしません。

(小数第1位と最終桁の数字が同じ、または0で終わるとダメみたいです。 WHERE n = 1.52 とすると
ヒットします。)
何が悪いのでしょうか・・・。
648NAME IS NULL:2006/04/28(金) 15:22:12 ID:???
647 です。
うわ、小数点の比較はしてはならないのですね。もしかしてものすごく基本的なことだったのですね。

VS2003 C# WinForm の中でDobule型カラムを含む行の更新を行う処理を作っていて、Double型カラム
>>647みたいた値があるとエラーになったので気づいたのです。

疑問がなのは、更新を MySqlConnector/NET(1.0.7) のCommandBuilderのUpdateメソッドで行っているの
ですが、Double型カラムを持っている場合はCommandBuilderを使えないことになるということになるの
ですかね。もちろん、doubleのカラムは主キーではないカラムで、NullもOKです。

とりあえずは文字列型に変えるしかないのか。。。
649NAME IS NULL:2006/04/28(金) 16:17:33 ID:9zc79cpm
MySQLにSQL文で命令しようと思い、MySQL Administratorのツールから[MySQL Command Line Client]
を選択したんですが、コマンドプロントが一瞬見えて、すぐ消えてしまいます・・。どういう対応をすれば、コマンドプロントは消えないのでしょうか?
ご存知の方いらっしゃったら教えてください。ver4.0.24をしようしています。
超初心者で、今から勉強しようとして矢先のつまづきです。知ってたら教えてください!
650NAME IS NULL:2006/04/28(金) 17:28:15 ID:???
MySQL Administrator の 何処に [MySQL Command Line Client] があるか分からない俺は負け組
651NAME IS NULL:2006/04/28(金) 17:37:10 ID:???
644-646にどなたか回答いただけませんか?
652NAME IS NULL:2006/04/28(金) 17:57:19 ID:???
>>651
ていうかデータのタイプは何かかけよ、ボケ
653652:2006/04/28(金) 17:59:19 ID:???
>>652
ごめんね。書いてあった orz

正直わからない。バグ?


654NAME IS NULL:2006/04/28(金) 19:20:17 ID:???
>>651
日本語の問題は結構話題が出てるから、
自分で調べたほうが早いんじゃね?
655NAME IS NULL:2006/04/29(土) 00:01:40 ID:???
>>648
DOUBLEじゃなくてDECIMALだとどうなります?
656NAME IS NULL:2006/04/29(土) 00:11:04 ID:???
>>641
あー、
/etc/ld.so.conf に追加してldconfigとかする必要があるんじゃね?
ldconfig -v | grep mysql とかしても libmysqlclient.so がないでしょ。
657NAME IS NULL:2006/04/29(土) 01:35:06 ID:???
>>648

レスありがとうございます。
ただ、Decimalは小数点が入らない・・・です。
実際に扱えるのはnumericと同じく整数だけです。

SQLサーバーでfloat型の比較は(偶然かもしれませんが)大丈夫なんですけどねぇ。
658NAME IS NULL:2006/04/29(土) 02:14:47 ID:???
mysql4とmysql5を1つのサーバーで動作させたいのですが、設定ファイルを別にすれば大丈夫でしょうか?
659NAME IS NULL:2006/04/29(土) 09:29:11 ID:???
660NAME IS NULL:2006/04/29(土) 11:05:07 ID:tSZS4TN9
>>649です。誰かわかんないですか?
661NAME IS NULL:2006/04/29(土) 12:31:30 ID:???
>>660
Administratorのそのメニューって単にmysqlクライアントを起動しているだけなんだから
Administratorから起動せんでも普通にコマンドプロンプト
別に立ち上げてそこからログインすればよかろうに
662NAME IS NULL:2006/04/29(土) 14:41:00 ID:T5iX34h7
649です。単独でコマンドプロントも立ち上がらないんです すぐ消えてしまう
663NAME IS NULL:2006/04/29(土) 16:52:59 ID:???
>>657
へ? DECIMALに少数も入るよ。

>>647
のdoubleをdecimal(10,4)にしたら
でちゃんと表示されてますが。

664NAME IS NULL:2006/04/29(土) 19:07:45 ID:???
>>662
アクセサリのコマンドプロンプトも動かないってこと?
[ファイル名を指定して実行]で cmd か command って入力
これもすぐ消えるようならWinがどっかおかしいな
消えなきゃmysqlインストしたディレクトリに移動して(4.0で標準なら cd c:\mysql で移動できる)
で mysql って入力
665NAME IS NULL:2006/04/29(土) 19:17:04 ID:???
>>649

結論:windowsを使うのが悪い。
666NAME IS NULL:2006/04/30(日) 00:26:00 ID:EAQZc06b
ちょっと質問。(使用してるのはver5.0)
「’」をtableに入力する必要があって、
insert into table(fld1,fld2・・・) values('a','b','Don\'t');
なんて感じでデータを入力してた。
入力時には問題がなかったのですが、このデータを定期的にmysqldumpで保存してて、
いざこのファイルでリストアしようとしたところ、
ERROR at line 188: Unknown command '\''.
とのこと。

まあ\'で「’」を入力した事が悪いのかもしれないけれど・・・・

どなたか巧い方法ご存じないですかね??
667NAME IS NULL:2006/04/30(日) 01:18:22 ID:???
''
668NAME IS NULL:2006/04/30(日) 01:35:18 ID:???
>>666
""で囲む
669NAME IS NULL:2006/04/30(日) 01:44:56 ID:s3Y92xFQ
ごめん。質問の意図が正確に伝わらなかったみたい。
既に\'で入力しちゃってるデータたちを、なんとか巧い具合に取り込みたいんですけど。
670NAME IS NULL:2006/04/30(日) 02:14:31 ID:???
>>669
\'で検索して
そいつの '' を "" に置き換える
スクリプトを走らせる
671NAME IS NULL:2006/04/30(日) 04:34:53 ID:lbL354se
\'->''じゃねえ?
672NAME IS NULL:2006/04/30(日) 12:38:20 ID:???
www''''''''''www''''''''''www''''''''''www''''''''''www''''''''''www''''''''''www''''''''''www''''''''''www''''''''''
673NAME IS NULL:2006/04/30(日) 22:35:25 ID:???
>>663
大変ありがとうです。
Decimalは単にこちらのテーブル定義ミスでした。
この方法に修正します。


674NAME IS NULL:2006/05/01(月) 23:24:26 ID:R8Rvxd1r
FreeBSD5.4を使っています。

MySQLを再インストールしようとして、
(mysql-5.0.19、ソースからインストール)
(内部文字コードをEUCでなくUTF8にしようと思いまして)

rm /usr/local/libexec/mysqld MySQLサーバ
rm /usr/local/bin/mysql* コマンド類
rm -rf /usr/local/lib/mysql/ ライブラリ
rm -rf /usr/local/include/mysql/ includeファイル
rm -rf /usr/local/mysql/varデータベース保存先
rm -rf /usr/local/mysql

としてから、
./configure --with-charset=utf8 -with-extra-charsets=all --with-mysqld-user=mysql
make
make install
したあと、
/usr/local/bin/mysql_install_db --user=mysql
をすると、

www# /usr/local/bin/mysql_install_db --user=mysql
Didn't find /usr/local/mysql/libexec/mysqld
You should do a 'make install' before executing this script

と言われてしまいます。
何度もやったのですが、同様の状況です。(確実make installはしている)

どうすればこの状況を打開できるのでしょうか?

お助け願えれば幸いです。
675NAME IS NULL:2006/05/02(火) 01:08:59 ID:j0JIN+1N
4.0.26を使用しています。OSはwin2kです。
何ヶ月も普通に使用していたのですが、ある日を境に
突然サービスが停止できなくなってしまいました。
その後mysqlのみアンインストールし、同バージョンを
再インストールしたのですが、同様にサービス停止ができません。

何かご存知の方がいらっしゃいましたら教えてください。
676NAME IS NULL:2006/05/02(火) 01:15:07 ID:???
>>675
W2k使ってないのだが、Windows Update関連では?
677NAME IS NULL:2006/05/02(火) 01:33:51 ID:???
>>675
サービスを手動起動にしてOSごと再起動するとか。

ちなみにもなんかメッセージ出るの?エラーログのファイルは?
678675:2006/05/02(火) 01:50:29 ID:j0JIN+1N
>>676
最後にWindows Updateしたタイミングよりは何日も後に
発症したと思います。詳しくないので関連はわかりません。

>>677
OSごと再起動すると一応起動するんですが、直後に停止を試みると
やはり固まってしまいます。

エラーは「MySql: Sort aborted」が狂ったように出てます。
679NAME IS NULL:2006/05/02(火) 02:14:47 ID:???
>>678
インデックスファイル壊れてるんじゃないの?
myisamchk -rq --analyze --sort-index データフォルダ\テーブル名.myi

ちなみに、>>677 は停止させることが目的なら、自動起動にしないでOSを再起動すれば
Mysqlを止めたままOSが起動できるのではないか、という意味。
680674:2006/05/02(火) 05:05:44 ID:2Bowivw7
どなかた
>>674わからないでようか、、、
681NAME IS NULL:2006/05/02(火) 08:20:56 ID:???
>>680
Didn't find /usr/local/mysql/libexec/mysqld

これが本当にあるのかないのかぐらい書けや
682NAME IS NULL:2006/05/02(火) 08:32:59 ID:???
>>680,674
mysql_install_dbのスクリプトに--mysqlのオプションは不要では?
683NAME IS NULL:2006/05/02(火) 08:34:59 ID:???
>>678

結論:windowsを使うのが悪い。
684677 679:2006/05/02(火) 08:54:01 ID:???
まあwindowsでも使えてるけど、
趣味のシステムじゃないなら、
windowsはやめておいた方が良いかも。
685NAME IS NULL:2006/05/02(火) 08:57:59 ID:???
--opt無しで出力したと思われる2GBのダンプファイルがあるんだけど
(事情により再出力不可)5時間かけてもインポートが終わらん。

どんな形式のダンプファイルでも、最適化を施して(SET AUTOCOMMIT=0
の挿入、INSERT文の複数行結合等)高速にインポートしてくれるような
ツールってないのかな?
686NAME IS NULL:2006/05/02(火) 09:16:12 ID:???
>>685
Oracleでいうdirect importみたいなもの?
687NAME IS NULL:2006/05/02(火) 09:19:40 ID:???
>>674
make cleanはしてみた?
688685:2006/05/02(火) 10:00:56 ID:???
>>687
コンパイルの問題じゃないと思う。
INSERT毎にコミットが発生するのが原因だから、それを止めるように
適当なSQLを挟んでくれるようなツールを探してる。
小さいダンプファイルならエディタで直接開いて編集できるんだけど
2GBになるとそうもいかないでしょ。
689675:2006/05/02(火) 18:56:54 ID:???
>>683-684
結局OSごと再インストールしました。
Windows以外で鯖運用したことないんですが、
やはりLinuxとかの方がトラブル少なくて
運用が楽なのですかね。スレ違いスマソ。
690NAME IS NULL:2006/05/02(火) 19:37:26 ID:???
>>689
総数としては少なくはないけど、
・MySQLのユーザの数(WindowsはOSのユーザは多いけど)はLinuxが上
・開発、テストの多くはLinuxでしてる
だから、Windowsは不利な面は多い。

ま、でも自分はWinXPとかでも普通に使ってるけど。
691NAME IS NULL:2006/05/02(火) 19:38:16 ID:???
692NAME IS NULL:2006/05/03(水) 01:57:22 ID:???
MySQL以前に
俺はLinuxをまともに扱えんので
Windows使うのが糞とか言われてもどしよーもない
693NAME IS NULL:2006/05/03(水) 05:46:51 ID:???
そのスキルの低さが糞だな
694NAME IS NULL:2006/05/03(水) 11:47:49 ID:???
postgresの
\d table_name
に相当するような、テーブル構成を表示するコマンドは、MySQLではどうやればできますか?
695NAME IS NULL:2006/05/03(水) 11:53:02 ID:???
696NAME IS NULL:2006/05/03(水) 12:19:08 ID:???
psqlの\dだとdesc table_nameのほうが近いかも
697NAME IS NULL:2006/05/03(水) 12:43:17 ID:???
MySQLをインストールした直後は青信号となって正常に動作するのですが、
OSを再起動などすると、MySQL起動後にすぐ赤信号になってしまいます。

cmdからmysqlと打つと、
ERROR 2003: Can't connect to MySQL server on 'localhost' (10061)
とエラーが出てしまいます。

MySQLは、MySQL Server and Clients 4.0.13で、OSはWindowsXPです。
2台あるうちの1台はこんなことなかったのに、
同じように入れたつもりが動作しないので、困ってます。
698NAME IS NULL:2006/05/03(水) 12:47:48 ID:???
>>697

結論:windowsを使うのが悪い。
699NAME IS NULL:2006/05/03(水) 13:15:25 ID:???
mysqldが起動してないんじゃないの
700697:2006/05/03(水) 13:38:19 ID:???
>>699
サービスからMySQLを開始しても、すぐに停止状態になってしまいます…
起動のさせかたが間違っていますか?
701NAME IS NULL:2006/05/03(水) 13:48:08 ID:6p7Xh0jH
>>700
イベントログを見ろ
たいていはそこに理由のヒントが書いてある
702697:2006/05/03(水) 14:08:33 ID:???
>>701
MySQLは正常に開始コントロールを送信しました。
 →MySQLサービスは実行中状態に入りました。
  →(エラー)MySQLサービスは予期せず終了しました。

となってしまいます。
703NAME IS NULL:2006/05/03(水) 14:28:06 ID:???
>>702
じゃあエラーログは?
マシン名.err っていうファイルがあるでしょ
704697:2006/05/03(水) 14:30:36 ID:???
>>703
060503 14:05:29 InnoDB: Started
060503 14:05:29 Fatal error: Can't open privilege tables: Table 'mysql.host' doesn't exist
060503 14:05:29 Aborting

というログが残っています。
mysql.hostというテーブルがないということのように読み取れますが
Googleで検索したものの、どう対処したらいいのかわかりませんでした。
705NAME IS NULL:2006/05/03(水) 14:33:26 ID:???
>>704
どうせ空のDBなんだから再インストールしてみなよ。
706697:2006/05/03(水) 14:54:02 ID:???
>>705
再インストールしたら動きました!
よかったです、ありがとうございました。

また同じように起動しなくなったときは
再インストールをしなくちゃならないのでしょうか。
根本的に何が間違っていたのかがよくわかりません、、、
707NAME IS NULL:2006/05/03(水) 15:14:53 ID:???
>>706
ちゃんと理由がエラーログに書いてあるじゃん。読めよ。
まともにインストールできてなかったんでしょ、多分。
708NAME IS NULL:2006/05/03(水) 20:10:44 ID:???
>>698
オマエはまさに五月蠅というにふさわしい
失せろ
709NAME IS NULL:2006/05/03(水) 20:13:05 ID:???
>>706
db\mysqlの場所とmy.iniの設定は合ってんのか?
710NAME IS NULL:2006/05/03(水) 21:15:17 ID:???
>>708
五月蠅って何て読むのか知ってる?
711NAME IS NULL:2006/05/03(水) 22:51:27 ID:???
もちろんサツキバエだよ
712NAME IS NULL:2006/05/03(水) 23:30:26 ID:???
ふーーん
713NAME IS NULL:2006/05/03(水) 23:45:23 ID:???
サツキミドリだろ
714NAME IS NULL:2006/05/04(木) 01:08:51 ID:???
へぇーーー
715NAME IS NULL:2006/05/04(木) 07:52:41 ID:???
いや、コマツミドリさ
716NAME IS NULL:2006/05/04(木) 08:05:11 ID:???
結論:windowsを使う奴が鬱陶しい。
717NAME IS NULL:2006/05/04(木) 09:11:34 ID:???
>>716
おまえチョット五月蝿い
718NAME IS NULL:2006/05/04(木) 11:39:48 ID:???
>>715
おまえも蝿
719NAME IS NULL:2006/05/04(木) 13:35:32 ID:???
おまえも月
720NAME IS NULL:2006/05/04(木) 15:05:02 ID:???
('A`)
721NAME IS NULL:2006/05/04(木) 17:21:19 ID:???
>>717
おまえチョット互月縄い
722NAME IS NULL:2006/05/05(金) 02:40:56 ID:???
4択の変数を作ろうと思って

tinyint(1) ってやったらどうしてもbooleanになっちゃった。
調べてみたら mysql では bool って書くんじゃなくて tinyint(1)
って書くとboolと同じ扱いになるのねorz
723NAME IS NULL:2006/05/05(金) 02:43:04 ID:???
上のような変数がいっぱいあるからテーブル作り直そうと思ったら
外部キー張ってあってできない
さらにorz
724NAME IS NULL:2006/05/05(金) 07:57:17 ID:???
>>723
ちょっと待て。boolの外部キーってそう出てくるものじゃないぞ。
なんか特殊な用途なの?
725NAME IS NULL:2006/05/05(金) 12:07:25 ID:???
質問です。

insert した直後、auto_increment しているカラムの最新のシーケンス値(最大値)を取得する方法が不明です。
PostgreSQLだと、currval() で取得できるのですが、MySQLでは不明です。

現在は、インサートしてすぐ、 select max(id) の様にして取得しています。
MySQLではどのように取得すればいいのでしょうか?
726NAME IS NULL:2006/05/05(金) 12:08:30 ID:???
>>722
別に桁指定しなくてもええんじゃ? tinyintで。
どうしても桁指定したいなら、deciaml(1)とかすれば?
727NAME IS NULL:2006/05/05(金) 12:12:21 ID:???
728726:2006/05/05(金) 12:28:00 ID:???
http://dev.mysql.com/doc/refman/4.1/ja/odbc-and-last-insert-id.html

はじめに↑を見たのですが、

table cutomer {
id bigint,
}

table shopping_log {
id bigint.
cutomer_id bigint,
}

cutomer テーブルに insert ,
shopping_log テーブルに LAST_INSERT_ID() を使用して cutomer_id を insert

の場合、確実に cutomer_id が入るのかな?と
上のURLの説明だと、どこにも cutomer テーブル”だけ”とは書いてないので不安です。
729726:2006/05/05(金) 12:30:00 ID:???
説明不足かも。

insert into shopping_log (customer_id) values (LAST_INSERT_ID());

がうまくいくのでしょうか?
アクセスが殺到した場合に数字とかずれたりしないのでしょうか?
730NAME IS NULL:2006/05/05(金) 15:24:50 ID:???
いいから過去ログ読めよ
>>628,631
731726:2006/05/06(土) 02:46:55 ID:???
過去ログにありました。
すみません。
732NAME IS NULL:2006/05/06(土) 13:44:40 ID:???
ちなみにお前726なのか? >>725じゃないのか?
733NAME IS NULL:2006/05/07(日) 17:07:30 ID:???
クライアント側でmysqldumpを行い、
そのダンプしたファイルをネットワーク経由でサーバー側でSQL実行させるにはどうすればよいのでしょうか?

LOAD DATA LOCAL INFILEはSQLの実行ではないので、、
734NAME IS NULL:2006/05/07(日) 17:08:01 ID:zK4GO1Jf
あげさせていただきます。
よろしくお願いします。
735NAME IS NULL:2006/05/07(日) 17:28:41 ID:???
>>733
mysql(クライアント)に、そのSQLを食わせるので駄目なのか?
736NAME IS NULL:2006/05/07(日) 20:40:36 ID:zK4GO1Jf
MySQL4.0.24を使用しています。
query_cache_min_res_unitをmy.cnfに設定しても
unknown variable 'query_cache_min_res_unit=8096'
と蹴られてしまいます。

この指定方法は間違っているのでしょうか?
マニュアルの通りに指定したのですが。。
737NAME IS NULL:2006/05/07(日) 20:49:07 ID:???
>>736
なぜgoogle様を使わないィッッッ!!!
http://dev.mysql.com/doc/refman/4.1/ja/query-cache-configuration.html
738NAME IS NULL:2006/05/08(月) 00:04:26 ID:???
    , イ)ィ -─ ──- 、ミヽ
      ノ /,.-‐'"´ `ヾj ii /  Λ
    ,イ// ^ヽj(二フ'"´ ̄`ヾ、ノイ{
   ノ/,/ミ三ニヲ´        ゙、ノi!
  {V /ミ三二,イ ,  /,   ,\  Yソ
  レ'/三二彡イ  .:ィこラ   ;:こラ  j{
  V;;;::. ;ヲヾ!V    ー '′ i ー ' ソ
   Vニミ( 入 、      r  j  ,′  
   ヾミ、`ゝ  ` ー--‐'ゞニ<‐-イ
     ヽ ヽ     -''ニニ‐  /
        |  `、     ⌒  ,/
       |    >┻━┻'r‐'´
      ヽ_         |
         ヽ _ _ 」    

  ググレカス [ Gugurecus ]
  ( 2006 〜 没年不明 )
739NAME IS NULL:2006/05/08(月) 01:13:47 ID:???
>>738
もうテンプレに入れようぜw
740NAME IS NULL:2006/05/08(月) 06:48:14 ID:???
http://rating4.auctions.yahoo.co.jp/jp/show/rating?userID=G3DT400
http://rating3.auctions.yahoo.co.jp/jp/show/rating?userID=domesutotaizou
http://rating6.auctions.yahoo.co.jp/jp/show/rating?userID=toshiyukigotou

整備品を購入しては転売を繰り返す、愛知県のキチガイ、ゴトウ君。
G3DT400 =domesutotaizou =toshiyukigotou
今度出品したら落札して住所晒したるから、気をつけろよ。
さっさとかかって来いよ、自称、妹のダンナはどうしたんだよキチガイが。
次の出品が楽しみだよ。さっさと新IDとって、逃げろよチキン野郎が。
741NAME IS NULL:2006/05/08(月) 12:44:37 ID:???
mysql-5.0.21を使用しています。
OSはRedHat 9.0。

Net-MySQL-0.09のインターフェースを使用して、PerlのスクリプトからMySQLデータベースへの
接続を行っているのですが、SELECT文でWHERE節を指定したときだけ、うまくクエリーが動きません。

$mysql->query(qq{ SELECT * FROM TABLE_A WHERE key1='001' AND keyb='002' });
if ($mysql->is_error) {
      # データベース接続を切断
      $mysql->close();
} else {
      if ($mysql->has_selected_record) {
      ・
      ・
      ・

のようなソースです。
$mysql->queryの実行結果が返らず、そのまま固まってしまう状況です。

WHERE節以下を指定しなければ正常に動くので、私の記述法が間違っているのだと思うのですが。

どなたか、クエリーを正常に動かす方法について、ご教授いただけないでしょうか。
よろしくお願いします。
742NAME IS NULL:2006/05/08(月) 15:10:47 ID:???
keyb='002'
keyb='002'

これが原因かは分からんけど、
エディタによっては小文字のKは全角or半角の区別が難しいね
743741:2006/05/08(月) 15:34:44 ID:???
>742
ありがとうございます。

ただ、上記の項目名は例として書いたものなので、大文字小文字のせいではないような気がします。

クォートの処理が問題なのかと思い、SQL文を別途文字列として組み立てて、

$sql_string = "SELECT ……";
$mysql->query(qq{ $sql_string });

のように動かしてもみましたが、うまくいきませんでした。;
744NAME IS NULL:2006/05/08(月) 19:25:54 ID:???
半角全角と大文字小文字は違うとおも。
バッククォートで括ってみたら?
745NAME IS NULL:2006/05/08(月) 23:53:44 ID:/rnI4SMZ
mysql4.0.xで検索系のスクリプトを作っています。
検索結果の総数と10件づつの表示をしたいので、現在は

 検索結果の総数を取得:select count(*) from テーブル名 where 条件
 表示レコードを取得 :select * from テーブル名 where 条件 limit x,10

↑のようにSQLを二回発行しているのですが、一回で済ませる方法は無いでしょうか?
レコード数が多いのでlimitは使いたいと思っています。
746NAME IS NULL:2006/05/09(火) 00:42:52 ID:???
>>745
select FOUND_ROWS()
747NAME IS NULL:2006/05/09(火) 01:11:56 ID:oeQAxwVZ
MySQL 4.0.25を使用しています。
INSERT DELAYEDを常に受け付けているテーブルを1日1回ログ保存用に移すため、
INSERT INTO SELECT構文でデータを移動後
TRUNCATEを発行しています。

この時、INSERT INTO SELECTとTRUNCATEの間でINSERT DELAYEDスレッドがINSERTを行ってしまうと
その間のレコードは全てなくなってしまうため、どうすればいいか解らなくなっています。

LOCK TABLES `table` WRITE
INSERT INTO SELECT...
TRUNCATE
UNLOCK TABLES

を考えたのですが、
INSERT DELAYEDを使用しているテーブルに使用すべきではないとマニュアルに記述があるので別の方法を考えています。
748NAME IS NULL:2006/05/09(火) 06:08:55 ID:???
>>746
ありがとうございます。
749NAME IS NULL:2006/05/09(火) 18:33:42 ID:kz7gQaDW
MySQLのレプリケーション説明で、

http://dev.mysql.com/doc/refman/4.1/ja/replication-implementation.html
>例外として、MySQL 4.0.2 はレプリケーション目的には適しません。

とあるのですが、4.0.2でレプリケーションはよくないのでしょうか?
Debianで普通にインストールすると、MySQL4.0.24が入っているのですが・・・
750NAME IS NULL:2006/05/09(火) 18:42:21 ID:???
そもそもDebianがよくない。
751NAME IS NULL:2006/05/09(火) 18:56:49 ID:???
>>750
質問者ではありませんが…
不用意な否定は宗教論争になるから、ちゃんと理由書いてくださいな。
752NAME IS NULL:2006/05/09(火) 19:52:59 ID:???
>>749

Debianでは4.1.11がstableであがっているのでapt-getしてみれば?

ただし日本語の取り扱いが変わるので、要注意だけど。
753NAME IS NULL:2006/05/09(火) 20:45:04 ID:???
宗派というよりも派閥。
数の論理が横行する。
754NAME IS NULL:2006/05/09(火) 21:21:55 ID:???
Deb厨とVine厨は日本のLinuxコミュニティを滅ぼした元凶
755NAME IS NULL:2006/05/09(火) 22:16:26 ID:???
>>749

4.0.2がダメなんだから、4.0.24は大丈夫でしょ。
a.b.cであって、a.b.cdじゃないから。

4.0.3でレプリケーション周りを大幅に書き換えたらしいから、4.0.2にはなんかバグがあるんじゃないの?
ttp://dev.mysql.com/doc/refman/4.1/ja/news-4-0-3.html
756NAME IS NULL:2006/05/09(火) 22:19:03 ID:kz7gQaDW
>>755
しかし、http://dev.mysql.com/doc/refman/4.1/ja/replication-implementation.htmlの表では
>4.0.1
>4.0.3 以降
とあって、4.0.2がまるごと飛ばされてるんですよね。
757NAME IS NULL:2006/05/09(火) 22:57:58 ID:???
MSSQLからmdfとldfファイル持ってきたけど、
これだけじゃ移行できないんですね・・・。

また会社行ってaccessで吐き出さないといけないのでしょうか。
758NAME IS NULL:2006/05/09(火) 23:04:42 ID:???
>>756
だから4.0.2はダメなんだろ。
4.0.24は4.0.3以降じゃないとでも?
759NAME IS NULL:2006/05/09(火) 23:10:11 ID:kz7gQaDW
あ、そうですね、うっかりバージョンを読み違えてました。
失礼しました。
760NAME IS NULL:2006/05/09(火) 23:19:41 ID:7cyBWZws
テーブルに登録されたデータの件数を得たいのですが、
SELECT COUNT * FROM hoge
でぬぁずぇかSyntax Errorが出ますorz
SELECT * FROM hoge
であれば、普通にデータ一覧が得られます。

MySQLのバージョンは3.23.53で、phpMyAdmin及び
自前CGI(Perl+DBI)でも同様でした。タシケテ…。
761NAME IS NULL:2006/05/09(火) 23:25:46 ID:???
>>760
かっこつけなよ
762NAME IS NULL:2006/05/10(水) 01:39:50 ID:gnAI/feC
こんばんは。初めまして。
今までC言語しか使った事の無かった人間が
MysqlとJavaを用いてデータ管理用のHPを作れと言われました。
なんとか形にはなって、データも保存できるようには
なったのですが、それを表示させる際に改行が反映されません。
多分保存の時に改行が破棄されているのだろうということは
わかったのですが、具体的にどうやって改行まで保存して
表示した時に意図した通りの文章になるのかがわかりません。
申し訳ないですが、御教示お願いできませんでしょうか?
763NAME IS NULL:2006/05/10(水) 03:28:45 ID:???
>>762
あまりにも漠然としすぎて誰も答えられないぞ。
表示って何を使って表示したときなのか??
改行コードはちゃんと保存されてる??
表示ってブラウザに表示したときかな??
そうすると、HTMLのスレがいいんじゃないか??
764NAME IS NULL:2006/05/10(水) 08:25:20 ID:???
>>762
改行云々と言っていることから判断して
おそらくデータベースから読み戻したデータを
テキストエリアに表示する際に改行が
反映されない、という問題なの?
765NAME IS NULL:2006/05/10(水) 09:17:12 ID:???
>>764
いや、おそらく改行がブラウザに反映されないだけかと
Web問題と思われ
766NAME IS NULL:2006/05/10(水) 09:52:03 ID:???
まさかとは思うが、brタグの代わりに改行コードをブラウザに送っているとか
767NAME IS NULL:2006/05/10(水) 10:01:46 ID:???
C++言語で常駐するプログラムで利用しているのですが、
起動時にMySQLへつなげて、後はずっと繋げっ放しという方法は何か問題はありますでしょうか?
過去ログを見ると、一画面分のデータを読みきるまで切断しない・・みたいな話を見かけたのですが。
768NAME IS NULL:2006/05/10(水) 13:04:34 ID:???
>>767
特に問題ないかと。コネクションプーリングなんかだと何本もはりっぱなしだし。
トランザクションの範囲を明確にするのを忘れずに。

コネクションにまつわるメモリリークとかのバグがあったら問題だけど、聞かないしね。
769NAME IS NULL:2006/05/10(水) 15:09:14 ID:???
>>767
繋げたままでスリープしたような状態だと
タイムアウトで切断されると思う。
770NAME IS NULL:2006/05/10(水) 17:45:17 ID:???
>>764
db内のデータが改行コードのままなら
1.<pre></pre>でくくって出力
2.改行コードを<br>に変換する

phpならnl2br関数があるけど、javaでもある?
771770:2006/05/10(水) 17:47:04 ID:???
>>762だった...
間違えた、スマソ
772NAME IS NULL:2006/05/10(水) 22:26:59 ID:???
質問です。

mysql クライアントを使って日本語を入力しようとすると入力する事が出来ません。

INSERT INTO tb_user (name) VALUES ('タモリ'); << タモリが入らないのです…

OS: CentOS 4.2
MySQL: 4.1.19

ソースからインストールしていて、文字コードも全て utf8 に統一する設定を my.cnf にしています。
./configure --prefix=/usr/local/mysql --with-charset=utf8 --with-extra-charsets=ujis,sjis

rpm パッケージからインストールすれば問題無いので、このまま進んでしまっても良いのですが、
原因がわからないのが非常に気持ち悪いです…

似たような現象に陥り、解決方法知っている方いらっしゃいましたら教えて下さい。
よろしくお願いします。
773NAME IS NULL:2006/05/10(水) 22:46:19 ID:???
>>772
set names ’クライアントの文字コード’;
とかしてからSQL発行してもだめかね?

CentOSってよく知らないが、Linuxにおいてクライアントの
デフォルト文字コードはたいていeuc-jpかutf-8だよね

あと、エラーメッセージはどんな感じ?
774NAME IS NULL:2006/05/10(水) 23:02:48 ID:???
>>773
>set names ’クライアントの文字コード’;
実はこれも試してみたのですがダメでした…

それで、上記サンプル SQL を試すとエラーメッセージなども特に出ず、
INSERT INTO tb_user (name) VALUES ('');

と上のような空の表示になってしまいます。

ターミナル(putty)の文字コードだとかサーバのロケールを疑ってみたのですが、
現在ターミナルで日本語入力を試すと入力 & 表示 は出来ます。

【現在の状態】
 ターミナル: 日本語表示 ○
 rpm インストール での mysql: 日本語表示 ○
 >>772 のソースインストール mysql: 日本語表示 ×

という状態です。うーん…
775NAME IS NULL:2006/05/10(水) 23:11:47 ID:???
>>774
772だが
選択中のデータベースにおける

show variables like 'character%';
show variables like 'collation%';


の値はどうなってる?
776772:2006/05/10(水) 23:35:50 ID:???
>>775
mysql> show variables like 'character%';
+--------------------------+----------------------------------------+
| Variable_name | Value |
+--------------------------+----------------------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/local/mysql/share/mysql/charsets/ |
+--------------------------+----------------------------------------+

mysql> show variables like 'collation%';
+----------------------+-----------------+
| Variable_name | Value |
+----------------------+-----------------+
| collation_connection | utf8_general_ci |
| collation_database | utf8_general_ci |
| collation_server | utf8_general_ci |
+----------------------+-----------------+

になっていますが、いかがでしょう…
777NAME IS NULL:2006/05/10(水) 23:43:56 ID:3R+JdFxj
tableA
---------------
aaa
bbb
ccc
ddd

tableB
---------------
aaa
ccc

という2つのテーブルがあって、tableAの中からtableBに登録されていない
レコードを表示したい場合、どのようにするのがスマートでしょうか?
この場合は「bbb」と「ddd」を表示させたいです。
778NAME IS NULL:2006/05/10(水) 23:48:07 ID:???
from tableA left join tableB on tableA.ID=tableB.ID where tableB.ID is NULL
で簡単に出来ました orz
tableB.ID = NULL とか tableB.ID = '' じゃ駄目なんだね。
779NAME IS NULL:2006/05/11(木) 00:40:30 ID:???
ターミナルの言語がutf8じゃないとおもう。
ターミナルの言語とmysqlのutf8が合ってないと、入力や表示は出来てもSQLでは使えないよ。

常駐プログラムは、何らかの原因でコネクションが落ちても、自前で再コネクション張れる様にしとかないと運用で泣くよ。
繋がなく成ったら鯖ごと再起動はアフォ。

まず、 MysqlとCを用いてデータ管理用のHPを作って、CをJavaに置き換えたほうがいいと思う。
本当はCで出来るなら、Javaに置き換えないほうが実行速度が速いけどね。

嫁と言わんばかりに、リファレンスマニュアルのChanges in releaseを張る香具師が居るけど、英語だよね。
日本語訳持ってる香具師は居ないの?


ところで、どういうconfigureオプション渡したか忘れたけど、インストールされた後で確認する方法有る?
mysql_configでは、コンパイルオプションだから似てるようで意味無し。orz
780NAME IS NULL:2006/05/11(木) 00:58:07 ID:???
>>772
$HOME/.inputrcに
set convert-meta off
set meta-flag on
set output-meta on
と書いてみる。
781NAME IS NULL:2006/05/11(木) 01:21:43 ID:???
phpAdminからデータをエクスポートする際、
画像データはどのようにして取り出したらいいのでしょうか。
画像のデータをバックアップしたくても方法が分からずに
非常に苦労しております。
どなたか是非 ご教授ください。
782762:2006/05/11(木) 01:44:40 ID:L8ejZay5
あぁ、すいませんヽ(;´д`)ノ
>>764さんの言う通り一度DBに保存したデータを再度引っ張って
HP上に表示させたいのです。
データベースの中をテキストで開いてみたら改行に該当するような
ものが無く、書き込んだ文章がそのままダラダラ格納されてる
状態になってるみたいなのです(´・ω・`)

>>770
phpと言うのを使えば改行コードをそのまま保存⇔呼び出しと言うのが
出来るのでしょうか?
783772:2006/05/11(木) 01:54:24 ID:???
>>780
レスありがとうございます!
でも、ダメでした… 同じ現象になります。

お教えいただいた方法を調べたら、MySQL ML に、結構前のバージョンで同様の現象で
悩んでいる方いらっしゃいましたね…

あと、インストール時のロケールが、en_US.UTF-8 だったので、ja_JP.UTF-8に変更しましたが、
なにか関係あるのでしょうか。うーん…
(/etc/sysconfig/i18n を書き換えて再ログイン)
784:2006/05/11(木) 10:46:04 ID:???
mysqldumpで、クオートを `` で囲みたくないんだけど
どうしたらいいでしょうか。

/etc/my.confに quote-names が書いてあるので
自動的についてしまいます。
それをコマンドラインオプションか または ~/.my.cnf内
で無効化したいんだけど 方法がわからないです。
785NAME IS NULL:2006/05/11(木) 16:14:30 ID:eL1kTo6l
質問です。
Webアプリケーションで、ユーザーがレコードを任意の順番に並び替えることができるようにするには、どのようなスキーマにして、更新時にはどのようにするのがよいでしょうか?
並べ替えの時にプライマリキー以外の全部のフィールドを書き換えるのではちょっとパフォーマンスが悪すぎると思います。
よろしくお願いします。
786NAME IS NULL:2006/05/11(木) 16:26:14 ID:???
~/.my.cnfでquote-namesの上書きできないの?
力ずくならソース弄って好みにハックするとか。


具体例を示さないと何とも言えない。
どういうレコードを扱うの?
スレ的にはこちら。MySQLとは全く関係ない。
頼むから正規化しろよ 第二正規形
http://pc8.2ch.net/test/read.cgi/db/1116097001/l50
姉歯DB設計
http://pc8.2ch.net/test/read.cgi/db/1133798099/l50
【恐怖】主キーがないテーブルみたことありますか?
http://pc8.2ch.net/test/read.cgi/db/1069324950/l50
ストアドよりインデックスのほうが速いよ
http://pc8.2ch.net/test/read.cgi/db/1094134263/l50

どういう設計にするかが一番の肝なので、SIベンダからコンサル受けるならかなりの対価を取られる事を覚悟してくれ。
787785:2006/05/11(木) 16:42:17 ID:???
>>786
レスありがとうございます。
わかりにくくてすみませんorz。
ユーザーがお気に入りのエントリーを作れるようにしています。
普通にエントリーを追加をしていくとauto_incrementさせとけばプライマリキーのidが増えていきますが、後からユーザーが表示する順番を並び替えられるようにしたいのです。

id favorite       url
1 今日のお気に入り http://
2 昨日のお気に入り http://
3 明日のお気に入り http://

こんな感じに並んでいるものを、ユーザーが好きな順番で表示させることができるようにしたいです。
(順番を並び替えるためのフォーム用ページも作ります)

やっぱりスレ違いでしょうか?
788784:2006/05/11(木) 16:43:28 ID:???
>>786
有効にする方向には上書きできるけど
無効にする方法がわからないのですにょ

あんまりほいほい/etc/my.cnfをいじりたくないし
無効化手段を知っとけば他にも役に立ちそうだし
789NAME IS NULL:2006/05/11(木) 16:56:47 ID:???
>>787
favoriteの項目名に<A href="hoge.htm?order=favorite">のリンク作って、
受信側ページ(hoge.htm:この場合同じページになるかな?)でsqlに「order by favorite」付けれ
790770:2006/05/11(木) 17:07:44 ID:???
>>782
テキストエディタで開いて改行されていない状態なら
改行コードが入っていないと思われる。
入力とDBへの挿入ページでどんな処理をしているのかわからんが


> phpと言うのを使えば改行コードをそのまま保存⇔呼び出しと言うのが
> 出来るのでしょうか?

phpには改行コードを<br>に変換してくる
nl2brという関数が用意されているということ。
javaでそんな関数がないならユーザー関数を作ってください。
791785:2006/05/11(木) 18:30:54 ID:???
>>789
すみません。言葉足らずでした。
やりたいことは、ユーザーが
1 昨日のお気に入り
2 今日のお気に入り
3 明日のお気に入り
とか
1 明日のお気に入り
2 昨日のお気に入り
3 今日のお気に入り
とかいう風に色々な順番に並べ替えられるようにしたいのです。
792NAME IS NULL:2006/05/11(木) 18:35:09 ID:???
YOU!ソート用のフィールド作っちゃいなYO!
793785:2006/05/11(木) 18:57:25 ID:???
>>792
なるほど。新たにフィールドを加えるということですね。
そうすると、どのような値を格納しておけばよいのでしょうか?
また、更新するとき(つまりユーザーが何らかの並び替えを行ったとき)にはどのようなSQL文を書けばよいのでしょうか?
おそらく最悪全てのレコードの値を書き換えないといけない気がしてしまいます。
794NAME IS NULL:2006/05/11(木) 19:29:27 ID:???
>793
すいません。ユーザーが一発で全てのレコードを書き換えるという
操作をするというのがよく分かりません。

ふつう、インターフェースから一個ずつ順番変えない?
スクリプトでも一個ずつ命令発行しないですか?
795794:2006/05/11(木) 19:37:46 ID:???
あ…、ひょっとしてリスト構造をDBでやりたいって話か。
796NAME IS NULL:2006/05/11(木) 20:14:10 ID:???
>>794
エスパーな俺が判断するに

1.xxx
2.yyy
3.zzz

という order から zzzを先頭にもって来た場合、
zzz→1
xxx→2
yyy→3

と変更しないといけないんじゃないかと >>793 は言っている
797NAME IS NULL:2006/05/11(木) 21:49:03 ID:???
エスパー魔美 出現
798NAME IS NULL:2006/05/11(木) 22:49:35 ID:???
まったくMySQLに関係ないな。
表示順番のフォールドでも作ればいいじゃんって、データベース設計レベルの話。
blogとかの解析でもすればいいのに。
ヒント:Movable TypeはMySQL使ってる。
799NAME IS NULL:2006/05/11(木) 23:52:20 ID:???
フォールドって?
800NAME IS NULL:2006/05/11(木) 23:58:38 ID:???
すみません、質問スレでは無いようなので恐縮ですが、
私の頭では分かりません...ご教授お願い致します。

tableA
------------------------------------------------
id  name
------------------------------------------------
1   taro
2   jiro
3   hanako


tableB
------------------------------------------------
id  mark
------------------------------------------------
1   ○
1   ×
1   △
2   ○
2   ×
3   ○
3   ×
3   □

tableAのidは主キーでtableBのidと共通の意味を持ちます。

上のようなテーブルからmarkが○かつ×かつ△のnameを求める時、
(taroが返ってきて欲しい)
どう結合してSELECTをすれば良いのか分かりません。

GROUP?でもなさそうですし、単純に結合すればよいわけでもなさそうで...
こんな時どのようにすればよいのでしょうか?
よろしくお願い致します。
801NAME IS NULL:2006/05/12(金) 00:49:16 ID:???
SELECT a.id, a.name
FROM tableA a, tableB b1, tableB b2, tableB b3
WHERE a.id=b1.id AND a.id=b2.id AND a.id=b3.id
AND b1.mark='○' AND b2.mark='×' AND b3.mark='△'


……面倒なので自動生成させような。
802NAME IS NULL:2006/05/12(金) 01:18:58 ID:YOIFlMIp
サブクエリとろいですか?4.1と5.0で違いあります?
803800:2006/05/12(金) 01:55:53 ID:???
>>801
レス有難うございました。
○かつ×だけの場合などもあるのですがORDER BYで絞込みできるようなので、
ひとまず解決しました。
ただ、本当はtableBような感じでtableCも存在していて、
ANDが数十回繰り返されています...

でもコレしかないのでしょうから、仕方ないですね。
助かりました。
804800:2006/05/12(金) 02:02:17 ID:???
ORDER BY ×
GROUP BY ○ でした....
805NAME IS NULL:2006/05/12(金) 03:07:07 ID:???
SQLネタに成ってるな。
スレ違い。

【帰ってきた】SQL質疑応答スレ 2問目
http://pc8.2ch.net/test/read.cgi/db/1141622643/l50
806NAME IS NULL:2006/05/12(金) 03:54:22 ID:???
気持ちは分かるがサブクエリできない感じがあるんでココでもイんじゃね
807NAME IS NULL:2006/05/12(金) 08:35:36 ID:???
table A ( key1 text , time timestamp , .... )    レコード数の上限は 10000程度
table B ( key1 text , key2 text ,.... )     レコード数はtableAと同程度
table C ( key2 text , key3 text ,.... ) レコード数の上限は 1000程度

というテーブルがあって

select B.key2, max(A.time) as check from A,B,C where C.key2= B.key2 and B.key1=A.key1 and C.key3 like "...." group by C.key3, C.key2 order by check desc limit 10 ← 数は適宜変わる

を実行すると結果が返ってくるまで数分以上かかり、実行中はCPUの使用率が100%を超えることもあるのですが、
計算量を減らして同様の結果を取得するためにはどんな
クエリーにすればよいでしょうか

>mysql --version
mysql Ver 14.7 Distrib 4.1.12, for redhat-linux-gnu (i686) using readline 4.3

808NAME IS NULL:2006/05/12(金) 09:26:37 ID:???
>>807
A,B,Cに適当にインデックスをはる
809NAME IS NULL:2006/05/12(金) 11:37:22 ID:???
mysql辞めてボラクルにする。
mysqlは無料だしな。変な期待しても無駄。

10000 x 10000 x 1000を操作してる訳だし遅いのは当然。
全部で10000以下に収めたら?
810NAME IS NULL:2006/05/12(金) 12:06:08 ID:???
>>807
key にテキストなんて使ってるのがそもそもダメ。
整数にしてインデックス付ければ、
今の時間からは想像も出来ないような時間で終わるよ。
テーブル設計し直しや。
811NAME IS NULL:2006/05/12(金) 12:14:08 ID:???
うん。売り上げ明細の様な形式だし
1万程度なら恐らく一瞬で終わるのでは。
812NAME IS NULL:2006/05/12(金) 16:46:37 ID:42cO6rDs
すみません。理由があって、Windows2000とWindowsXPを入れました。Windows2000の方はOracle用です。
WindowsXPHomeにはOracleが入れられないので・・

デュアルブートにする際、Windows2000からインストールしないといけないので、
先にWin2000を入れた後、WinXPHomeを入れました。Windows2000には、空き容量があまりないのでMySQLをインストールしたくありません。

で、WinXPHOMEはデュアルブートにしたところ、ドライブがD:\になってしまいました。

確か、MySQLはC:\にしかインストールできないと思ったのですが・・

D:\でもシステム本体がインストールされているならば、MySQLはインストールできるのでしょうか?

よろしくお願いします。
813NAME IS NULL:2006/05/12(金) 17:53:33 ID:???
テーブル作り直します。
どうもありがとうございました。

>>808-811

814NAME IS NULL:2006/05/12(金) 18:28:46 ID:???
>>812
システムドライブがC:以外だと、
この先MySQL以外の問題でハマりそう。
815NAME IS NULL:2006/05/12(金) 18:37:51 ID:???
ドライブレターぐらい変えられないのかと。
PC二台買うか、HD繋ぎ換えられる様にしとくほうが便利。
XPProならVirtualPCServerって技も有ったけどねえ。
816NAME IS NULL:2006/05/12(金) 19:16:29 ID:???
システムボリュームのドライブなんて変えられないだろ
817NAME IS NULL:2006/05/12(金) 19:34:19 ID:???
システムD:\だけど何の問題も無いよ?
818812:2006/05/12(金) 20:23:43 ID:???
>>814
確かに僕もそれを危惧しています(;-- Win98入れてからWin2000入れて
その後98のところにXPを入れれば何の問題もなかったんですがね・・後の祭りです。

>>815
PC二台とか無理です・・貧乏なので。。VMWareとか考えたんですが、なんか
全然知らないので止めました

>>816
無理でした(;^^

>>817
ありがとうございます。これからインストールしてみます。
大変励みになりました。
819NAME IS NULL:2006/05/13(土) 11:10:29 ID:???
>>807
> 実行中はCPUの使用率が100%を超えることもあるのですが、

俺は無知なので知らないのだが、100%超えることなんて理論的にあるの?
820NAME IS NULL:2006/05/13(土) 16:45:07 ID:???
パーマンでも手をつないだら飛行速度が速くなるわけで
パソコンも繋げたら100%超えるんじゃね?
もしかしたら赤く塗って3倍の性n (ry
821NAME IS NULL:2006/05/13(土) 18:09:27 ID:???
>>807
このクエリは、where の条件順が逆じゃない?
C.key3 like ".." を最初に判定すれば計算量減るんじゃまいか。
822NAME IS NULL:2006/05/13(土) 18:34:33 ID:???
>>821
クエリわざわざ読んだとは。。。
アンタ偉い。
823NAME IS NULL:2006/05/14(日) 00:44:55 ID:flto9HXq
mysqlをはじめてインストしたものですが、

設定環境の
MYODBCに

NOT found
driver 3.51 not foundって表示されてcan't found
って出るんです。どなたか原因わかりませんでしょうか?

ちなみにCには2000が入っているのでXPの入ったDにインストしました。
パスはわかるところは変えたんですが。


31 :名無しさん@お腹いっぱい。:2006/05/14(日) 00:29:29
ドライバーは入れられたようですが、
コマンドプロンプトからcan't connectです。

startを選択しても青ランプに2秒くらい点灯するんですが、すぐ赤に戻ります。
なぜなんでしょうか?
824NAME IS NULL:2006/05/14(日) 01:29:28 ID:???
mysqlってsubversionなんだっけ?
cvswebみたいにソースの履歴見れる所有る?

scripts 以下の mysql_create_system_tables っていつ無くなったのか知りたいだけだが。
古いのメンテ疲れたよう。orz
新しいのにしたいけど、動作チェック全部やり直しは避けたいと言う大人の事情が発生中。ソフト屋は氏ねる。
825NAME IS NULL:2006/05/14(日) 01:58:54 ID:OkVhDshA
レプリケーションした時の、スレーブへの更新データ反映タイミングは、
どのようになりますか?

マスターに更新クエリーを送った時に、まとめてフェッチしてくるのかな?
と思ってるのですが、合ってるでしょうか?

更新タイミングの設定とかありますか?
826NAME IS NULL:2006/05/14(日) 03:45:26 ID:9n193Jxj
2006-04-01
2006-04-30
2006-05-01
2006-05-31
2006-06-01
2006-06-30
こんな感じのDATE型のリストから
2006-04
2006-05
2006-06
と重複しない月までのリストを得るにはどんなクエリを送れば良いでしょうか?
DATE_FORMAT()とDISTINCTあたりを使うんだと思うんですがよくわかりません。
827NAME IS NULL:2006/05/14(日) 04:16:19 ID:???
>>824
MySQL Serverは、BitKeeper
http://mysql.bkbits.net/
828NAME IS NULL:2006/05/14(日) 06:44:49 ID:???
mysql_create_system_tables って 4.1 から増えてたんだな。サンクス。
829NAME IS NULL:2006/05/14(日) 07:39:37 ID:???
date_formatで年月を取り出すのは date_format (日付型カラム,'%Y-%m')と第2引数に,'%Y-%m'を指定
830826:2006/05/14(日) 08:45:15 ID:9n193Jxj
>>829
ありがとうございます。
ちょっと複雑に考えすぎていたみたいです。
select distinct date_format(date, '%Y-%m') from table;
で出来ました。
831NAME IS NULL:2006/05/14(日) 18:16:04 ID:???
VB.NETのプログラムからmySQLのテーブルに ' (アポストロフィ)を含んだ
文字列を入れたいのですが、エラーが出てしまいます。
色々ネットで探して mysql_real_escape_string を使うみたい
なことを見つけたのですが、使い方がよくわかりません。

 QueryString = "insert into table set Title='" & Session("Title") & ";"

こんな感じのクエリなのですが、アドバイスできる方がいましたら
よろしくお願いします。
       
832NAME IS NULL:2006/05/14(日) 19:45:36 ID:???
>>831
\'
833NAME IS NULL:2006/05/15(月) 04:35:43 ID:???
最近このスレでテキストのカラムに張ったインデックスが遅いというので
どれくらい遅いか実験してみました。

CREATE TABLE `int_index` (
`id` int(11) NOT NULL auto_increment,
`content` varchar(100) NOT NULL default '',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp932;

CREATE TABLE `text_index` (
`id` varchar(100) NOT NULL default '',
`content` varchar(100) NOT NULL default '',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp932;

これらのテーブルに、1000万行突っ込みました。
text_index での id には10文字のランダムな英数を入れました。

これらに対し、20スレッドで各スレッドごと1000クエリ実行した結果、
整数インデックスは約 2200 ミリ秒
テキストインデックスは約 23000 ミリ秒
と10倍程度の差が出ました。

結構ちがうもんですね。
834NAME IS NULL:2006/05/15(月) 04:37:17 ID:???
訂正
これらに対し、20スレッドで各スレッドごと1000クエリ実行した結果

これらに対し、20スレッドで各スレッドごと100クエリ実行した結果
835NAME IS NULL:2006/05/15(月) 04:37:52 ID:X1TNH0dp
>>833
>1000クエリ実行した
どんなクエリーですか?単純なselect
836NAME IS NULL:2006/05/15(月) 04:56:53 ID:???
java で実行したんですが
PreparedStatement で select SQL_NO_CACHE * from int_index where id=?
の ? の部分を1-1000のランダムな数です
text_indexの方は、データに実際に存在するidを1000個の配列にして、
0-999のランダムな数で同様に入れてみました。

上の実験を100万行でやると、
text_indexのほうが、速かったのが不思議な点です。
837NAME IS NULL:2006/05/15(月) 05:02:50 ID:???
へぇ〜。とすると、単純に比較できないのかな。
参考になりましたよ。
838NAME IS NULL:2006/05/15(月) 05:11:37 ID:???
数が膨大な数になると整数インデックスが速いという感じですかね。

補足ですが、乱数は Random#nextInt(int seed) で発生させたのですが、
text_index と int_index で呼び出す回数を同じにしてあります。

key_buffer_size は両方の MYI ファイルを足した数より多く取ってあります。
仮想ページ(swap)をOFF(0M)にした状態で実験してあります。

100万行の時は
整数インデックス 平均約 1880ms
テキストインデックス 平均約 840ms

てな感じです。
どのあたりから整数インデックスが逆転するかなどの、
境界は実験していません。
839NAME IS NULL:2006/05/15(月) 05:18:01 ID:???
ちょっと違うことだが、インデックスの有無が混ざってるときのパフォーマンスってどうなんだろう?
逆に遅くなったりすることもあるのかな?
840NAME IS NULL:2006/05/15(月) 08:11:17 ID:???
んー何とも言えないなあ。
たまたま、その環境やそのデータでは、そう言う結果かも知れないし。

詳細なテスト手順や環境や、他のDBとの違いとかも欲しい所。

int_indexのほうは、いきなりランダム生成だろうけど、
text_indexの方は、データに実際に存在するidを配列にするのにselectして時間かけてみたりキャッシュに入ったりしてない?
841NAME IS NULL:2006/05/15(月) 11:35:11 ID:???
>>840
もう一度色々と実験してみたところ、
100万件スレッド100クエリ1000において
整数インデックスがテキストインデックスより
16%速いことがわかりました。

テスト方法が正しいのか私としても気になるので、
どこかにソースを置いて見ていただきたいのですが・・・・
842NAME IS NULL:2006/05/15(月) 21:42:20 ID:???
すません、ちょっと質問させてください。

MySQL 5.0.20.aにて、
+--------------------------+
| Variable_name | Value
+--------------------------+
| character_set_client | utf8
| character_set_connection | utf8
| character_set_database | utf8
| character_set_filesystem | binary
| character_set_results | utf8
| character_set_server | utf8
| character_set_system | utf8
+--------------------------+
こんな感じのキャラコードにして、中にハングルを入れました。
で、これを、MYODBCの3.51.2 で、Aceess2003(日本語版)から接続すると、
UTF8をSJISと解釈して、化けてしまうんですが、これを、UTF8をUTF8のままに扱うことってできます?

やってみたのは、
Initial Statementに、以下の値を順番にセット
 ・無記入            datebase/client/connection/results すべてUTF8指定
 ・SET NAMES "UTF8";   datebase/client/connection/results すべてUTF8指定
                     → UTF8で送られてくるものを、表示の時にSJISに変換してしまう
 ・SET NAMES "SJIS";   datebaseはUTF8 /client/connection/results は SJIS 指定
                     → 当たり前ながら、???に文字化け
 ・SET NAMES "EUCKR";   datebaseはUTF8 /client/connection/results は EUCKR 指定
                     → 当たり前ながら、よくわからない文字の羅列に文字化け

フォントは、それぞれ、MSゴシックと、ArialUnicodeMS(ユニコード)/Batang(EUCKR韓国語用) を試しました → 変化なしです
なんか、これ以外に試してみるとよさそうなものはありますでしょうか?
843NAME IS NULL:2006/05/15(月) 21:47:24 ID:???
OpenOfficeのBaseを使え
844NAME IS NULL:2006/05/15(月) 22:06:01 ID:JL6/1d73
複数のMODIFYを1回のmysql_queryでやるための書式を教えて下さい。
これらは全て失敗したものです。

mysql_query('ALTER TABLE mytable MODIFY myid varchar(10) NOT NULL default \'\' MODIFY mypass varchar(50) NOT NULL default \'\'');

mysql_query('ALTER TABLE mytable MODIFY myid varchar(10) NOT NULL default \'\', mypass varchar(50) NOT NULL default \'\'');

mysql_query('ALTER TABLE mytable MODIFY myid varchar(10) NOT NULL default \'\' AND mypass varchar(50) NOT NULL default \'\'');
845NAME IS NULL:2006/05/15(月) 22:21:26 ID:???
>>844
直接クエリ打ってみればいいじゃん。
そうすればどの辺がおかしいかわかるじゃん
846NAME IS NULL:2006/05/15(月) 22:26:48 ID:JL6/1d73
1つなら成功しているので1つずつのMODIFYを
2回のmysql_queryで実行することならできています。
2つを同時にする書式をご存知内でしょうか?
847NAME IS NULL:2006/05/15(月) 22:42:02 ID:???
>>845
即座に回答できない845みたいな奴がアホなレスを付けると
こっちもいちいちレスを書かないといけなくなるから疲れる。
もう分かった。灰終了。
848NAME IS NULL:2006/05/15(月) 23:58:55 ID:???
アフォな質問しそうなマカが増えそうだな。
ttp://developer.apple.com/business/macmarket/mysql.html
MySQL on Mac OS X: An Ideal Development Combination

なんでKR?
在日チョンですか?
849NAME IS NULL:2006/05/16(火) 08:16:16 ID:???
MySQLはNOT NULLを指定すると、デフォルト値が強制自動設定されてしまう仕様なんですか?
(バージョンは4.0で確認しています)
850NAME IS NULL:2006/05/16(火) 08:25:08 ID:???
KR=在日チョンってのも、おそろしい短絡だな
851NAME IS NULL:2006/05/16(火) 11:09:59 ID:???
MSのソフトって、ユニコードだけど、UTF2とかじゃなかったっけ?
UTF8はそのまま受け付けない気がする。
ただ、そうするとPostgreSQLのベータunicodeODBCはUTF8そのままつかえるんだが、
あれはどーなってんのかって話にはなる。
852NAME IS NULL:2006/05/16(火) 20:46:15 ID:BMzd4DOE
DATE_SUB() ではなく TIME_SUB() みたいなの無いでしょうか?
またはそういう処理方法ありますでしょうか?

TIME型のカラムが2つ( t_start, t_end )あり、経過時間を取得したいのですが
DATE_SUB( t_end, INTERVAL t_start HOUR_MINUTE )
上記では NULL になってしまいます。
853NAME IS NULL:2006/05/16(火) 20:50:31 ID:???
今や日本人のフリした在日チョンがあちこちに居るんだよ。
やがて亜米利加の移民問題のようなことが日本で起きても不思議は無い。

一億2000万人の日本人に対して、在日チョンは200万も居るし。
854NAME IS NULL:2006/05/16(火) 22:02:51 ID:???
>>849
なんでドキュメント読まないの? ひょっとして日本語が読めない?

ttp://dev.mysql.com/doc/refman/4.1/ja/create-table.html

DEFAULT 値は定数でなければならず、関数や式を使用することはできない。
DEFAULT 値が指定されていない場合、そのカラムには、次の方法で、
MySQL によって DEFAULT 値が自動的に割り当てられる。
値として NULL を取れるカラムの場合、デフォルト値は NULL になる。
NOT NULL として宣言されているカラムの場合、デフォルト値はそれぞれのカラム型によって決まる。
855NAME IS NULL:2006/05/16(火) 22:21:10 ID:???
>>854
それってつまり、NOT NULLのカラムに値がない場合は、
はじくということができないことになる?仕様としてよくないなぁ。
856NAME IS NULL:2006/05/16(火) 22:26:51 ID:???
NOT NULLにしているのに、どうして値をセットしないの?
値が入らないこともあるならNULLを許可すればいいのに。
857NAME IS NULL:2006/05/16(火) 22:32:38 ID:???
>>856
未定義の変数エラーのような意味で、
必ずはじくようにできて欲しいわけ。わかる?
858NAME IS NULL:2006/05/16(火) 23:28:25 ID:???
>>855
いや、NULLを突っこめばエラーになるよ。
859NAME IS NULL:2006/05/17(水) 01:57:20 ID:???
何か変な仕様のヲレRDBを求めてる悪寒。
mysqlには無いから巣に帰れ。

ボラクルでも買って、クレーム入れて機能付けさせろ。
860NAME IS NULL:2006/05/17(水) 05:36:50 ID:???
oracle買わなくてもpostgresにはあるって・・・
861NAME IS NULL:2006/05/17(水) 05:48:07 ID:???
>>858
それは明示的にnullを入れた場合ですよね?
そうでなくて、insert時に指定が抜けている場合は、
エラーにして欲しいわけです。

できないならまあしょうがないんですけど、これを変な仕様と思う人は、
プログラマとして設計の適正がないんじゃないですか。
862NAME IS NULL:2006/05/17(水) 06:25:17 ID:???
>>861
insert用のストアドを作ってチェック、とか思いつかないお前のほうが応用力が低い。
プログラマとして適正がないとしか言いようが無いな。
863NAME IS NULL:2006/05/17(水) 07:09:36 ID:???
>>862
ストアド作ってまでチェックするほでもなく、
デフォルトでそういうのがあったほうが安全ということですよ。

おそらく速度を優先して今の仕様になってるとか、
何か理由はあるんだとは思いますが。

MySQLの仕様にいまいちなところがあれば、
それはそれで認めるのが改善の一歩ではないでしょうか。
実際に改善するわけではなくとも、姿勢として。

なんで変にむきになるんでしょう。あるソフトのいまいちな点に触れると、
その指摘した相手を攻撃する人って2chによくいますけど、
こういう人って困りますね。
864NAME IS NULL:2006/05/17(水) 07:12:41 ID:???
>>863
何作ってるんだか知らないけど(卒論?)
MySQL以外のRDB使えばいいんじゃねーの?

>なんで変にむきになるんでしょう。あるソフトのいまいちな点に触れると、
>その指摘した相手を攻撃する人って2chによくいますけど、
>こういう人って困りますね。

自己紹介ご苦労さんw
865NAME IS NULL:2006/05/17(水) 07:15:42 ID:???
>>864
>何作ってるんだか知らないけど(卒論?)
全然見当違いです。推測力もないんですね。
866NAME IS NULL:2006/05/17(水) 07:18:43 ID:???
なんで変にむきになるんでしょう。あるソフトのいまいちな点に触れると、
その指摘した相手を攻撃する人って2chによくいますけど、
こういう人って困りますね。
867NAME IS NULL:2006/05/17(水) 08:31:36 ID:???
人格攻撃まざってる時点でどーかと思うよ
もうソフト関係なく、ののしりあいの世界に突入してんじゃん
868NAME IS NULL:2006/05/17(水) 08:50:11 ID:???
>>861
>そうでなくて、insert時に指定が抜けている場合は、
>エラーにして欲しいわけです。

プログラム側でチェックしとけよ。
869NAME IS NULL:2006/05/17(水) 08:56:23 ID:???
>>861
なんで? NULL突っこんでおけば済む話でしょ。
あー、ひょっとしてO/Rマッパーとか使ってない?
870852:2006/05/17(水) 12:04:07 ID:dx29ESON
>>852
SEC_TO_TIME( TIME_TO_SEC( t_end ) - TIME_TO_SEC( t_start ) )

今はこういう感じで、秒にして演算してから時刻に戻してます。
もっと良い方法ありましたら御教示おねがい致します。
871NAME IS NULL:2006/05/17(水) 12:57:22 ID:???
強制IDになれば、>>866にnullを突っ込んでやるんだが。
872NAME IS NULL:2006/05/17(水) 15:14:06 ID:???
スクリプト側じゃなくてMySQL自体でSQLインジェクション対策できますか?
例えば予め数種類のクエリパターンを定義しておいて、それ以外のクエリは無条件に破棄するようなフィルタ機能みたいなのです。
873NAME IS NULL:2006/05/17(水) 16:39:23 ID:???
>>872
サーバサイド Prepared ステートメントってのがあるらしいけど、
使ったことない
874NAME IS NULL:2006/05/17(水) 18:35:02 ID:???
ぬるぽ
875NAME IS NULL:2006/05/17(水) 22:53:04 ID:???
「質問しておいて何返されても自分の価値観を一切曲げようとせず、
自分に同意しない者に対しては即答で見下すような態度」
な奴が一番困ったもんだっつーの!

「自分は『頑固な馬鹿』かもしれない」と心の隅にでも置いておいたほうがいいぞー。
876NAME IS NULL:2006/05/17(水) 22:56:00 ID:???
>>875
まあまあ、春なんだし。

ふしぎな人は生暖かく見守ってあげましょう。
877NAME IS NULL:2006/05/17(水) 23:13:04 ID:???
>>875
もう別にいいんだけど、そんなにいうなら、
NOT NULLでデフォルト値を自動設定する仕様の理由と利点を教えてください。

878NAME IS NULL:2006/05/17(水) 23:20:53 ID:???
>>877
キモー
879NAME IS NULL:2006/05/17(水) 23:44:28 ID:???
はいはい、ポスグレに有る機能なら、ポスぐれ使ってくれ。
マイエスキューエルをこっそり使ってもいいけど、このスレには二度と来るな。
プログラマって空気読めないから嫌われるんだよ。

このスレに来たならこのスレの空気読めよ。
880NAME IS NULL:2006/05/17(水) 23:47:42 ID:???
はぁ、説明できなくなるときもい、出ていけですか。レベル低すぎ・・・。
881NAME IS NULL:2006/05/17(水) 23:50:26 ID:???
>>877
たとえば

CREATE TABLE foo (
hoge int not null,
fuga int not null default 10
);

のときに

INSERT INTO foo (hoge) VALUES (1);

とかしたいとき。

あー、まさかカラム指定が出来るのをしらないとかっていう話じゃないよね?
882NAME IS NULL:2006/05/17(水) 23:57:28 ID:???
>>881
質問の意味を取り違えてませんか?
テーブルの作成(変更)時に、デフォルト値自体を自動設定する
必要があるか?ということを聞いたのですが・・・。
例えば>>881の場合、hogeのdefaultとして0が自動設定されてしまうということです。
883NAME IS NULL:2006/05/18(木) 00:03:12 ID:???
意味と利点があれば納得するし、
よくないけれど、仕様というのであれば、しようがないと思うだけです。
884NAME IS NULL:2006/05/18(木) 00:55:01 ID:???
ぶっちゃけあれがないこれがないって文句のあるやつは使うなってのがMySQL
のぽにしーだと思うんだ。トランザクションだって最近までなかったんだから。
885NAME IS NULL:2006/05/18(木) 01:00:49 ID:???
ttp://dev.mysql.com/doc/refman/4.1/ja/insert.html

>MySQL では、常にすべてのフィールドにデフォルト値がある。
>デフォルト値の存在は、MySQL がトランザクションテーブルと非トランザクションテーブルの
>どちらも処理できるようにするための必要条件となっている。

>MySQL では、フィールド内容のチェックはデータベースサーバではなくアプリケーション側で行う、
>という見解に立っている。

――だそうです。

だから NOT NULL 制約があるカラムの DEFAULT は非 NULL なんでしょう。

これでよろしい?>粘着してる人

886NAME IS NULL:2006/05/18(木) 01:32:26 ID:???
ソースhackして自前で改造してください。
以上。
887NAME IS NULL:2006/05/18(木) 01:41:42 ID:fNZ39rqr
MySQL Command Line Clientを実行して
パスワード入力、show database;を入力したところ

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that
corresponds to your MySQL server version for the right syntax to use near 'datab
ase' at line 1

というエラーが返ってきました。
testというデータベースが表示されるはずなのですが、
これはどういうことでしょうか?

初歩的な質問ですみません、

ちなみにバージョンは4.1.19です。
888887:2006/05/18(木) 01:45:14 ID:fNZ39rqr
すみません。databasesでした。
本の記載が間違っているだけでした。
889NAME IS NULL:2006/05/18(木) 03:24:55 ID:???
>>888
因みに何ていう本のどのページの記述間違い?
890NAME IS NULL:2006/05/18(木) 06:09:08 ID:???
そろそろ5系の日本語訳に取り掛かって貰いたいのだが。
891NAME IS NULL:2006/05/18(木) 06:46:07 ID:???
>>885
なるほど、わかりました。
892NAME IS NULL:2006/05/18(木) 11:22:37 ID:+dYtd0v2
MYSQLとアクセスについて教えてください

MYSQL+PHP でデータベースのデータだけはアクセスのmdbから拾いたいと
おもっているのですがやり方がわかりません。

PHPからはMysqlからデータを拾っているようにしたいのですが。
893NAME IS NULL:2006/05/18(木) 11:29:37 ID:???
アクセスからちょくでPHPじゃだめなのか?
それか、アクセスとPHPの関係を逆にしたほうがいい気もする
894NAME IS NULL:2006/05/18(木) 11:29:51 ID:???
まちがい
アクセスとMYSQLの関係を逆に
895NAME IS NULL:2006/05/18(木) 13:38:18 ID:+dYtd0v2
>893

MYSQL+PHP からaccessのデータベースを見たいのです。
MYSQL+PHPでページができていまして、これをあんまり変更せずに
accessのデータを利用したいと思っているのですが。

ODBCを介してMYSQLのデータをアクセスで見る方法はホームページで
発見できたのですが・・・

ご存知でしたらお願いします
896NAME IS NULL:2006/05/18(木) 14:01:32 ID:???
>>895
MYSQLにアクセスを参照するリンクテーブルつくろうって話だよね
すいません、わかりません。

が、
アクセスのデータを全部MYSQLに移植して、
アクセスにMYSQLのリンクテーブル(ODBC利用)つくったほうが早いとおもうよ・・。
897NAME IS NULL:2006/05/18(木) 14:20:05 ID:+dYtd0v2
>896
そうなんですよ。MYSQLにアクセスを参照するリンクを作りたいんですけど。
だれもやろうとする人がいないのかなー?

調べてもでてこないんですよー。
898NAME IS NULL:2006/05/18(木) 14:23:32 ID:???
必要ないもの。。。
とゆうか、データベースのデータ部分を、二箇所に分散させる利点がないもの
弊害はいっぱいでてくるだろうけど

(MySQL等に「アクセス」からリンクさせることが多いのは、アクセスのデータベース部分じゃなくて
 インターフェイスとか、印刷部分を使うって理由からがほとんど)
899NAME IS NULL:2006/05/18(木) 17:34:05 ID:???
mysqldを127.0.0.1で動作させたい場合はどうしたらいいですか?
my.cnfの[mysqld]セクションになんと書けばいいのでしょう。
くだ質かもしれませんが、よろしくお願いします。
900899:2006/05/18(木) 17:48:02 ID:???
自己解決しました
[mysqld]
bind-address = 127.0.0.1
ですね。失礼しました。
901NAME IS NULL:2006/05/18(木) 20:05:28 ID:???
prepare age
902NAME IS NULL:2006/05/19(金) 00:00:34 ID:???
すみません、MySQL4.0でテーブル名が2バイトのテーブルを作っても文字化けしなかったのに
MySQL5.0にしたら文字化けしてしまいました。
やはり、内部文字コードがUTF-8になったことが原因なのでしょうか?
また、解決方法をご存知の方がおられましたらお教えください。
903NAME IS NULL:2006/05/19(金) 00:07:18 ID:???
>>902

Q.データベース名、テーブル名、フィールド名に日本語は使えますか?
A.使うな。使えるけど。
904NAME IS NULL:2006/05/19(金) 00:25:26 ID:???
>>903
えぇっぇ!日本語の掲示板とか作るときどうしたら良いんですか?
905NAME IS NULL:2006/05/19(金) 00:40:02 ID:???
>>904
データベース"名"、テーブル"名"、フィールド"名"だ。
フィールドに日本語を格納すればいいだけだろ。

でも>>902なのはそれぞれの定義名がUTF-8で
書き込まれるようになったせいじゃなくて、
機能追加されたクライアントとサーバ間の
エンコード変換の辺りの設定だと思うぞ。
日本語でフィールドに格納してる値があれば
そこも似たように"文字化け"してないか?
906NAME IS NULL:2006/05/19(金) 00:49:01 ID:???
>>905
つ「>>904のメ欄」
907NAME IS NULL:2006/05/19(金) 01:17:13 ID:???
テーブル名なんて英数でいいじゃん。
別途internationarizationテーブルでも持って、
select ja for internationarization WHERE "te-burumei"
とか引ける様にしとけば、国際化もばっちり。
908NAME IS NULL:2006/05/19(金) 01:30:06 ID:???
マニュアルにはっきり書かれている事すら理解できないほど字が読めないんだから化けててもいいじゃん。
909NAME IS NULL:2006/05/20(土) 17:29:18 ID:BuO/P63m
MySQL Connector Net 1.0.7 ってWINDOWS S-JIS(CP932)
って使えないの?

チェンジテキストに
Does not support Code Page 932
って書いてあるが。。。

910NAME IS NULL:2006/05/20(土) 18:26:44 ID:???
サポートしないでくださいってことだからな
911NAME IS NULL:2006/05/21(日) 10:58:51 ID:7ZSaUI4U
お助け下さい。

table a
id,name
1,tanaka
2,sato
3,suzuki

table b
id,fl
1,1
1.2
1.3
2.2

select * from a left join b on a.id=b.id where b.fl=1;

このクエリで想定した結果は、

id,name,fl
1,tanaka,1
2,sato,null
3,suzuki,null

だと思ったのですが、

id,name,fl
1,tanaka,1

となります。
求める結果を出すのは、
どのようなクエリとなりますでしょうか。
お願いします。

912NAME IS NULL:2006/05/21(日) 11:05:10 ID:???
>>911
 where b.fl=1 or b.fl is null かな。確認はしていない。
913911:2006/05/21(日) 11:29:43 ID:???
>>912
レスありがとうございます。
> where b.fl=1 or b.fl is null
なるほど。いけそうですね。ためしていないのですが。

perlでコード書いてるのですが、全体的な処理からいえば、
一旦、table a の一覧を呼び出しちゃった方がよさそうなので、
フロー変更しました。



914NAME IS NULL:2006/05/21(日) 11:39:56 ID:Kp7fgyj6
>>911
LEFT OUTER JOIN
915NAME IS NULL:2006/05/21(日) 11:43:14 ID:???
>>911
table bにid=2のエントリが有る以上、想定した結果はあり得ない。
916NAME IS NULL:2006/05/21(日) 13:26:42 ID:???
>>911-913
where b.fl=1
ってやってるのにb.fl=1以外のモノが出てくると想定してる時点でSQL理解してないでしょ。

b.flに何が出てくるのを想定してるかわかんないけど、
多分1が欲しいんじゃなくてMIN(fl)が欲しいとかじゃないのか?




917NAME IS NULL:2006/05/21(日) 15:11:02 ID:???
>>911
where以下が余計なんじゃね?
918NAME IS NULL:2006/05/21(日) 15:30:55 ID:???
ファンタジービキニアーマー総合研究所。
919NAME IS NULL:2006/05/21(日) 16:59:05 ID:???
なんだこのスレ
外部結合すら知らん奴がでかい面してんのか
920NAME IS NULL:2006/05/21(日) 18:58:42 ID:???
mysqlだぜ?外部結合が使えないと考えるのが正常な反応だぜ
921NAME IS NULL:2006/05/21(日) 20:17:41 ID:???
またスゴイ奴が登場したな。w
922NAME IS NULL:2006/05/21(日) 21:55:01 ID:???
そういえばいつの間にか使えるようになってたな
あれはいつごろからだろうか
923NAME IS NULL:2006/05/21(日) 22:36:45 ID:???
>>922
これじゃまいか。
http://dev.mysql.com/doc/refman/4.1/ja/news-3-21-17.html
Added ODBC and SQL-99 style LEFT OUTER JOIN.
1997-12-20

たしかにFULL OUTER JOINは未サポートだが、>>920は何時から
MySQLを使っているのだろう?w
924NAME IS NULL:2006/05/21(日) 23:30:15 ID:???
多分昨日の夜から
925NAME IS NULL:2006/05/21(日) 23:46:32 ID:???
明日って今さ!
926NAME IS NULL:2006/05/22(月) 01:54:08 ID:???
>>925
ポコ!!
927NAME IS NULL:2006/05/22(月) 15:09:30 ID:???
1つのIDで一意に決まるデータが大量にあるのですが、
ある程度グループに分けたほうが可用性は高いのでしょうか?
928NAME IS NULL:2006/05/22(月) 21:59:19 ID:???
>>927
なんで?
929NAME IS NULL:2006/05/22(月) 22:13:34 ID:???
>>927
自分の例だと、資料管理システムで
「保存期間が終了したら資料そのものは捨ててしまうが資料が存在した事は残す」
という仕様だったときに、
保存期間内のものは普段から検索対象とする事が多いが
期間を過ぎたものはほとんど検索する事はない、という事で
普段使いのパフォーマンスを上げるために
期限を過ぎたものを別なテーブルに移動させるようにした事はあるね。

そういう意味的なグループがあるのなら分ける手もあり。
930927:2006/05/22(月) 22:48:38 ID:???
>>928
特に根拠はないのですが、雑誌などを読むと、大抵書籍在庫管理などの
簡単なデータを元に設計をし、「正規化」って作業をした結果、テーブルが
複数できて、1つのテーブルは10個以下にまとまります。

一方、自分はRPGのキャラデータ管理で使おうと思っているのですが、
筋力や知性、覚えた魔法、持っているアイテム、経験値なんかはキャラ毎に
固有の情報なので、キャラID1つで100個近い種別の値と対応付けれます。

設計の仕方のルールにのっとるとこれ以上分解できないので、
100個くらい要素があるけど完了してしまっていいのか、
それとも「ステータス」「アイテム」などに1つのテーブルが10個程度にまとまった
ほうがいいのか、そんな感じで悩みだしてしまい、ご相談させていただいた次第です。

>>929
なるほどー、そういう意味はないです。
今後拡張などが入って、ステータスの要素が増えたり魔法が増えたりは
考えておきたいと思ってます。
931NAME IS NULL:2006/05/22(月) 23:41:19 ID:???
このスレ見るのやめとこう
932NAME IS NULL:2006/05/23(火) 05:41:05 ID:???
とりあえず分けて作ってみることにしました。
933NAME IS NULL:2006/05/23(火) 08:41:30 ID:???
>>930
それ、ちゃんと正規化されてない予感。
少なくともアイテムや魔法は分解できるだろ。
934NAME IS NULL:2006/05/23(火) 12:45:40 ID:EfawsPRW
エラーが発生していてわかる方がいらっしゃいましたらご教授ください。
PHP−MySQLを使ってWinXPのローカル環境にてテスト開発を行っています。
ブラウザ上で入力された文字を受け取り、PHP上でSQL文を作成し
以下のような単純なselect文を発行すると
select count(field1) from test_table
where field1 = 'テスト' and field2 = '2ちゃん'
を発行すると
『 Illegal mix of collations (sjis_japanese_ci,IMPLICIT) and (latin1_swedish_ci,COERCIBLE) for operation '='』
というエラーが発生し、止まってしまいます。

sjisとlatinを比較できないと言っていると思うのですが、
PHPソースはSJIS、
MysqlもSJISで作成しており、
statusコマンドを発行すると
Server characterset: sjis
Db characterset: sjis
Client characterset: sjis
Conn. characterset: sjis
と表示されております。

このエラーの回避方法がわかる方がいらっしゃいましたら
ご教授お願いできませんでしょうか。
よろしくお願いいたします。
935NAME IS NULL:2006/05/23(火) 15:51:23 ID:???
>>934
その確認したstatusコマンドは、PHPのクエリ関数から発行してる?
プロンプトからmysqlコマンドを使ってるなら、それはPHPからの操作とは
異なったClientを利用してるわけで、PHPからの操作でのstatusは表示されないよ。
936NAME IS NULL:2006/05/23(火) 18:59:06 ID:???
>>933

もう少し勉強します、ありがとうございました。
937NAME IS NULL:2006/05/24(水) 02:29:27 ID:???
2つのテーブルのを内部結合を
テキストファイルにリダイレクトすると、
全行の2列目のデータの後に改行が入って困ってます。

下記が実際のテーブル構成です。

mysql> desc o_cm;
+-------+---------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------------------+------+-----+---------+-------+
| id | bigint(20) unsigned | NO | PRI | NULL | |
| name | varchar(100) | NO | | NULL | |
+-------+---------------------+------+-----+---------+-------+
2 rows in set (0.00 sec)

mysql> desc o_cost;
+--------+-----------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------+-----------------------+------+-----+---------+-------+
| hiduke | date | NO | | NULL | |
| id | bigint(20) unsigned | NO | | NULL | |
| cost | mediumint(8) unsigned | NO | | NULL | |
+--------+-----------------------+------+-----+---------+-------+
3 rows in set (0.00 sec)

SQL文
mysql> select o.hiduke,cm.name,o.cost from o_cost o join o_cm cm
-> on o.id = cm.id into outfile 'aa.txt';

テキストファイルを開くと・・・
2006-05-01nameの値1
1414
2006-05-01nameの値2
12156
2006-05-01nameの値3
0




みたいな感じになってしまいます。
どうすれば解決できるでしょう???

938NAME IS NULL:2006/05/24(水) 02:57:51 ID:???
>>937
(1) insert 時に nameに改行が入らないようにする。
(2) select 文の name を trim("\n" from name) as name とかする。
939NAME IS NULL:2006/05/24(水) 03:20:44 ID:???
select hoge,fuga from table_name where no=? order by (hoge+fuga)
みたいな、結果を取得してそれを計算したもので order する場合、
using filesort は避けられないのでしょうか?
940NAME IS NULL:2006/05/24(水) 08:37:47 ID:???
>>939
そらそーだろ。
計算してるのにINDEXが使える実装を思いついたら教えてちょ
941NAME IS NULL:2006/05/24(水) 09:06:03 ID:???
>>940
ですよね。
となるとデータ設計がよろしくなかった感じがしますねorz
942NAME IS NULL:2006/05/24(水) 22:05:28 ID:???
計算結果を保持するテーブル作るとかかなぁ。
別にカラムを追加してもいいけど。

あとはストアド使うとかトリガ使うとかでフォロー。
もちろんアプリ側でフォローするのもあり。
943NAME IS NULL:2006/05/24(水) 22:41:39 ID:???
>>942
計算結果保持カラムや、テーブルまであると、
なんか管理が面倒な感じがするので、
where no=? の部分をもっと細かく no=? && period>?
みたいに範囲を細かくして、行数減らして
適切なインデックス張って filesort することによるコストを減らすことで逃げるとかどうでしょう?
944NAME IS NULL:2006/05/25(木) 02:35:05 ID:???
テストで自己参照外部キーを持つテーブルを作ったのですが、
削除できなくなりました。。

ALTER・・で外部制約を削除して
ALTER・・で列を削除して
DELETE・・でデータを削除して
DROP TABLE ・・・ でテーブルを削除しようとすると

ERROR 1217 (23000): Cannot delete or update a parent row: a foreign key constraint fails

というように、まだ外部制約があるかのようなエラーがでます。。。
SHOW CREATE TABLEで制約がきちんと削除されてるのは確認してます。

こういうときってどう対処すればいいんでしょう??
強制的に削除することって可能なんでしょうか?
それとも削除の方法が間違ってるんでしょうか?

ちなみに、
CREATE TABLE・・は下のとおりです。

CREATE TABLE test_table(
id TINYINT UNSIGNED NOT NULL,
name VARCHAR(100) NOT NULL,
mgrid TINYINT UNSIGNED,
FOREIGN KEY (mgrid) REFERENCES cas_m (id) ON DELETE CASCADE ON UPDATE CASCADE,
PRIMARY KEY (id )
) ENGINE=InnoDB DEFAULT CHARSET=sjis;
945NAME IS NULL:2006/05/25(木) 15:14:15 ID:iIuI8ioE
板違いかもですがご容赦を。
FC4へ mysql 4.1.15 をソースからインストールし、SSH経由でmysqlの
コンソールから日本語が入力できず困ってます。漢字だけはじかれます。
character_set_xx と SSHの文字コードは合っています。
mysql < query.txt のようにパイプを経由すればOK。
redhat9では出来ていた気が。(でもrpm)
回避方法があれば教えてください。
946NAME IS NULL:2006/05/25(木) 17:08:32 ID:???
mysqlのドキュメント見てれば内部コードはutfって理解できるはずだが。
rh9のときはmysqlが古かったのでは?

頼むから正規化しろよ 第二正規形
http://pc8.2ch.net/test/read.cgi/db/1116097001/l50
947NAME IS NULL:2006/05/25(木) 21:53:06 ID:???
半角カタカナだとlike文がうまく機能しません。
文字コードはSJISです。
select * from table where name like '%ア%';
アを含むものをとってきたいのですが何もヒットしません。
select * from table where name like 'ア%';
だと、ちゃんとアで始まる物がヒットします。

あと基本的には大文字小文字区別したいので、
VARCHAR BINARI属性にしてるんですが、
オプションで大文字小文字区別無しで検索したいとき
どうやってやればいいのかわかりません。
948947:2006/05/25(木) 22:02:02 ID:???
自己レス、likeを使わずに
INSTR(name, 'ア')
でうまくいきました。
あとは大文字小文字チェックなし・・・
949NAME IS NULL:2006/05/25(木) 22:04:50 ID:???
>>947
定義は 非binaryにしてselectする際に
アプリケーション側でbinary演算子を使う、使わないの
場合わけすればいいんでないの?
950NAME IS NULL:2006/05/25(木) 22:10:19 ID:???
>>947
>あと基本的には大文字小文字区別したいので、
>VARCHAR BINARI属性にしてる
が間違い。"ちゃんと"SJISにしとけ。
951947:2006/05/25(木) 22:16:38 ID:???
>"ちゃんと"SJISにしとけ。
すんません、この意味がわかりません。
カラムごとに文字コード設定できるんですか?
あともうbinary属性で進んでしまって戻れなさそう・・・
たしかに区別したいときだけbinary(name)すればいいんだけど。
952NAME IS NULL:2006/05/25(木) 22:29:44 ID:???
>>951
俺は949だが、MySQLのバージョンは何?
4.1以上ならばテーブルの文字コードをutf8にして
クライアントの文字コードをcp932にして
select * from table where name like '%ア%';
を実行したらちゃんと選択できたぞ
当方WindowsXP MySQL5.0.16
953947:2006/05/25(木) 22:41:26 ID:???
バージョンは5.0.20a
テーブルはSJIS。これはもう決定事項なので変更不可です。
954949:2006/05/25(木) 23:02:35 ID:???
>>953
テーブルの文字コードsjisにして再度実験したが
select * from table where name like '%ア%';は
こちらの環境ではうまくいったぞ

本当にクライアントとサーバの文字コード一致してる?
955NAME IS NULL:2006/05/25(木) 23:04:03 ID:???
>>947
COLLATEで指定すればいいんじゃまいか。

ttp://dev.mysql.com/doc/refman/4.1/en/charset-collate.html
ttp://dev.mysql.com/doc/refman/4.1/en/charset-binary-op.html

例えばこんな感じ:

SELECT * FROM table_name WHERE colname = 'foo' COLLATE utf8_general_ci

COLLATEで指定できるcollation名はSHOW collationで確認できます。
956NAME IS NULL:2006/05/25(木) 23:15:26 ID:???
>>954
[mysql]、[mysqld]ともにdefault-character-setはsjisですね。
文字コードの問題ならlike 'ア%'もうまくいかないと思うんですが、
こっちはうまくいくんですね。
って、今やったらうまくいってる!
試しにBINARY属性消したからだな・・・
957NAME IS NULL:2006/05/25(木) 23:18:12 ID:???
>>956
なるほど、当方nameフィールドをbinary指定したら
確かに現象再現したわ

やっぱnameフィールドはbinary属性にしないようにすれば
幸せになれそうだと思うんだがどうだろうか
958NAME IS NULL:2006/05/25(木) 23:30:42 ID:???
>>956-957
へー。utf8だとbinry属性付けても大丈夫だったよ。
959NAME IS NULL:2006/05/26(金) 00:27:44 ID:???
たぶんmysql設定のミスだと思うのですが、mysql+PHPで抜けれなくなってます。

test.phpというファイルで、初めに

mysql_connect("localhost","root","root") or die(mysql_error());
mysql_select_db("test");

としてmysqlデータベースへ接続しようとすると、

Warning: mysql_connect(): Access denied for user '●●'@'localhost' (using password: NO) in 「phpファイルのディレクトリ」on line 2

とエラーが表示されます。
●●は、このtest.phpファイルを設置している、homeディレクトリの名前です。
(これは同時にFTPのログインアカウント名です)


mysql_connect でユーザ名やパスをいろいろ変えて設定してみても、
「FTPのアカウント名@localhost」で接続を試みているようで、接続できない状態です。

ちなみに、初期からあるtestデータベースには接続できました。
また、別の共用レンタルサーバ等でも、データベース接続は何度も行なっています。
今回、自分でインストして設定してみたら、この謎のエラーがでてきました。


いろいろ調べたり書籍を読み漁ってみたのですが、
「●●がFTPアカウント名」というものは無くて困っています。

環境はFreeBSD/Apache2/PHP4/MySQL5/です。


何かヒントでも頂けますと本当に助かります。
960956:2006/05/26(金) 09:15:52 ID:???
>>957-958
どうもです。BINARY属性消しの件は交渉してみます。
ずっとpostgesでmysql使うの初めてなんでハマりまくりです・・・
961NAME IS NULL:2006/05/26(金) 10:35:54 ID:???
下記のようなテーブルがあったとして、
+------------+--------+--------+
|  Date  | name | cost |
+------------+--------+--------+
| 2005/04/01| maru | 1000 |
+------------+--------+--------+
| 2005/04/02| koba | 1000 |
+------------+--------+--------+
| 2005/04/01| seki | 1000 |
+------------+--------+--------+
| 2005/04/03| maru | 1000 |
+------------+--------+--------+
| 2005/04/04| maru | 1000 |
+------------+--------+--------+
| 2005/04/04| seki | 1000 |
+------------+--------+--------+
| 2005/04/05| maru | 1000 |
+------------+--------+--------+
| 2005/04/01| maru | 1000 |
+------------+--------+--------+
これを

+--------+------------+------------+------------+------------+------------+
| name | 2005/04/01| 2005/04/02| 2005/04/03| 2005/04/04| 2005/04/05|
+--------+------------+------------+------------+------------+------------+
| maru |   2000 |     0 |   1000 |   1000 |   1000 |
| koba |     0 |   1000 |     0 |     0 |     0 |
| seki |   1000 |     0 |     0 |   1000 |     0 |
+--------+------------+------------+------------+------------+------------+

のように抽出する場合は
どんなSQLになるでしょうか??
962NAME IS NULL:2006/05/26(金) 12:31:07 ID:???
最近出たこの脆弱性はリモートから使わせなければ大丈夫ですよね?

ttp://www.kb.cert.org/vuls/id/602457
963NAME IS NULL:2006/05/26(金) 13:35:04 ID:???
【帰ってきた】SQL質疑応答スレ 2問目
http://pc8.2ch.net/test/read.cgi/db/1141622643/l50
SQLについて語るスレ
http://pc8.2ch.net/test/read.cgi/db/1056938879/l50


SJISから変更不可なら、utf8のMySQLはダメだね。
ボラクルにでもしといたら?
元々ボラクル前提の案件じゃ無いの?
964NAME IS NULL:2006/05/26(金) 16:37:18 ID:???
>>961
アプリ側でやるほうが遥かに簡単だけど、俺は優しいから SQLの方法も教えたろ。

ただし、
(1) SQLでは列は動的に増減できないので、あらかじめ Date の内容を知っていること
(2) 下記の例は 3.23.x くらいの話なので、サブクエリとかは使ってない
(3) 巨大なテーブルだと、えらく遅いと思う
という前提でよろしく。

select name
, sum(if(date="2005-04-01",cost,0)) as "2005/04/01"
, sum(if(date="2005-04-02",cost,0)) as "2005/04/02"
, sum(if(date="2005-04-03",cost,0)) as "2005/04/03"
, sum(if(date="2005-04-04",cost,0)) as "2005/04/04"
, sum(if(date="2005-04-05",cost,0)) as "2005/04/05"
from sample_table
group by name
order by name;
965NAME IS NULL:2006/05/26(金) 22:32:51 ID:???
>>960
sjis(cp932も)のBINARYで半角カナがLIKEでマッチしないのは単にバグだと思うんで、
レポート出しておくといいかもね。

#ちなみにujisでもマッチしましたんで、ピンポイントな問題かと。

966NAME IS NULL:2006/05/26(金) 23:13:45 ID:???
半角カナなんてレガシーな文字コードは捨てていいよ。
967NAME IS NULL:2006/05/26(金) 23:38:57 ID:???
>>966
似たような感覚で、ざっくりとCP932もCP51932も
eucJP-msも切り捨てて欲しいものよ。SJISもEUC-JPもいっそ。
968NAME IS NULL:2006/05/26(金) 23:44:58 ID:???
確かに文字コードで悩むのはもう終わりにしたいな
unicodeの趨勢が決定的になれば実装者はどれほどラクか
969NAME IS NULL:2006/05/26(金) 23:48:10 ID:???
文字コードの問題による日本IT業界の経済損失って、
実は相当大きいと思う。
意味不明なことに労働時間を浪費してるんだもん。
970NAME IS NULL:2006/05/27(土) 01:08:07 ID:???
>>969
ばっかだな
その文字コードごときのおかげでおれは儲かってるんだから
それでいいんだよ
971NAME IS NULL:2006/05/27(土) 01:10:24 ID:???
「後ろから何文字」で検索するとインデックスって効いてくれないよね?
これって、検索前に仮テーブルでもこさえてやったほうが
速度は劇的にアップしたりするんかね

って聞く前に自分で試すから。 お前らオレに教えたりすんなよ
972NAME IS NULL:2006/05/27(土) 08:51:55 ID:???
linux のマシンに mysql Ver 14.7 Distrib 4.1.12, for redhat-linux-gnu (i686) using readline 4.3
windowsのマシンに mysql.exe Ver 14.3 Distrib 5.0.0-alpha, for Win95/Win98 (i32)

をそれぞれ入れて、それぞれstandaloneでちゃんと動いていることを確認しました。
windowsの方からlinuxのmysqlデータベースに(まずはコマンドラインで)アクセスしたいのですが、

linux側で  
GRANT ALL PRIVILEGES ON db.* TO ..
hosts.allow にwindowsホストのアドレスを追加して

windows側から
mysql.exe -u user -h hostname  とやっても
ERROR 2003 (HY000): Can't connect to MySQL server on 'hostname' (10065)
です。

そもそもこのやり方が正しいのかどうかが自信ないのですが
他に設定で見ておくべきところはどんなところでしょうか?

あるいは誘導お願いします。
973NAME IS NULL:2006/05/27(土) 11:54:49 ID:???
ツッコミ所満載な訳だがどうしたものか・・・・・・

有料サポート購入するのがいいんじゃね?
974NAME IS NULL:2006/05/27(土) 13:24:20 ID:???
>>972
hosts.allowは関係ない。というか、何故hosts.allowを設定しようと思ったのか...
windows側から ping hostname が通るかとか、telnet hostname 3306 がどうなるかとか。
975NAME IS NULL:2006/05/27(土) 14:38:20 ID:???
tcpdをリンクしてある可能性はあるかもよ(w

馬鹿はutf8で統一しとけばいいじゃん。
sjisで使おうなんて考えるな。
漏れはソース弄ってjisで使える様にしてるけどな。
976NAME IS NULL:2006/05/27(土) 14:42:37 ID:bNSDh8D4
+---------------------+----+--------+
| time | rw | name |
+---------------------+----+--------+
| 2006-05-27 14:01:07 | w | apple |
| 2006-05-27 14:01:00 | w | orange |
| 2006-05-27 14:04:17 | r | apple |
| 2006-05-27 14:04:14 | r | orange |
| 2006-05-27 14:04:13 | r | apple |
| 2006-05-27 14:04:12 | r | banana |
+---------------------+----+--------+

というテーブルがあり、rwのrのnameを抽出し、rwがwの項目のnameを除外したいのですが、
(上記の場合、bananaを抽出したい)
現在、
SELECT name FROM table WHERE rw =
977NAME IS NULL:2006/05/27(土) 14:44:38 ID:bNSDh8D4
+---------------------+----+--------+
| time | rw | name |
+---------------------+----+--------+
| 2006-05-27 14:01:07 | w | apple |
| 2006-05-27 14:01:00 | w | orange |
| 2006-05-27 14:04:17 | r | apple |
| 2006-05-27 14:04:14 | r | orange |
| 2006-05-27 14:04:13 | r | apple |
| 2006-05-27 14:04:12 | r | banana |
+---------------------+----+--------+

というテーブルがあり、rwのrのnameを抽出し、rwがwの項目のnameを除外したいのですが、
(上記の場合、bananaを抽出したい)
現在、
SELECT name FROM table WHERE rw = "w" GROUP BY name
SELECT name FROM table WHERE rw = "r" GROUP BY name
でそれぞれ取得し、perlで配列比較しています。

これをSQLのみでやる方法はあるのでしょうか?
978NAME IS NULL:2006/05/27(土) 15:12:43 ID:???
>973
そもそもこのやり方が正しいのかどうかわかんないです。

>974
ping host は通ります。 sshでログインもできます。

>telnet host 3306
接続中: ホストへ接続できませんでした。 ポート番号 3306: 接続に失敗しました

979sage:2006/05/27(土) 16:00:00 ID:73zfxdQu BE:108341273-
>>977
SELECT name FROM table WHERE rw =
980sage:2006/05/27(土) 16:02:10 ID:73zfxdQu BE:77387235-
>>977
SELECT name FROM table WHERE rw = 'w'
 AND name NOT IN (
  SELECT name FROM table WHERE rw = 'r'
 )
GROUP BY name

試してないけど、こんな感じじゃない?(MySQLでてきたっけ…)

:書き込み時に、ダブルクォーテーションが通らなすなぁ…
981NAME IS NULL:2006/05/27(土) 16:34:53 ID:bNSDh8D4
>>980
できました^^
ありがとうございます。

ダブルクォーテーション切られますね。。
982NAME IS NULL:2006/05/27(土) 17:55:11 ID:???
>>978
linux側で telnet localhost 3306 してみたらどうなる?
これができないようなら、my.cnf で skip-networking とか bind-address を調べてみる。
localhostから3306につなぐことができたら、windowsかlinuxのファイアウォールとか。
983NAME IS NULL:2006/05/27(土) 22:04:06 ID:???
Q: Windows ソフトのことで困っています。助けてもらえますか?

A: はい。DOS プロンプトにいって、「format c:」とタイプしましょう。
  ものの数分で、困っておいでの各種問題は消滅することでしょう。
984NAME IS NULL:2006/05/28(日) 01:21:04 ID:???
redhatはデフォルトでファイヤーウォール入れようとしてたはず。
漏れは面倒だから無効にしてインスコしたけど。
985NAME IS NULL:2006/05/28(日) 15:50:53 ID:???
mysql.sock って /tmp だとなんか不安なんですが、
皆さんデフォルトのままですか?
986NAME IS NULL:2006/05/28(日) 20:55:54 ID:???
またスゴイ人が現れたな。もー、たまらん。
987NAME IS NULL:2006/05/28(日) 22:30:52 ID:???
何で不安なんだ?
他人から消されたり編集されたりできると思ってる理由は?
988NAME IS NULL
ttp://www.tomshardware.com/2003/04/22/duel_of_the_titans/page18.html
ここ↑見ると、Linuxでは明らかに64bit(AMD64 / Intel EM64T)の方が速そう
ですが、、、Windowsではどうなんでしょうか???
WinXP x64 Edition買おうかどうか迷ってます。