MySQL 総合 Part12

このエントリーをはてなブックマークに追加
1だよもん!!!
快速 RDBMS、MySQL の総合スレです。
前スレ[MySQL 総合 Part11] http://pc11.2ch.net/test/read.cgi/db/1178154390/
[関連スレと過去ログ]
http://find.2ch.net/index.php?STR=MySQL
http://makimo.to/cgi-bin/search/search.cgi?D=db&q=MySQL&sf=0&link2ch=on

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

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

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

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

2NAME IS NULL:2007/09/23(日) 10:58:56 ID:???
【関連ツール及びユーティリティ】

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

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

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

【関連書籍】

[MySQL Books]
http://dev.mysql.com/books/
http://www.amazon.co.jp/exec/obidos/search-handle-url/ix=books-jp&fqp=keywords%01MySQL
http://www.amazon.co.jp/exec/obidos/search-handle-url/ix=books-us&fqp=keywords%01MySQL

2ch風偉人伝 AA はこちら
http://www.aadayo.com/aa/02_13.html
3NAME IS NULL:2007/09/24(月) 21:17:06 ID:pceZ+XvF
連続のUPDATEの際、INSERTのように1文で書くことはできますでしょうか?
以下のように書いてみましたができませんでした。

UPDATE hoge SET title='HOGE1' WHERE seq=1, hoge SET title='hoge2' WHERE seq=2;
4NAME IS NULL:2007/09/24(月) 22:06:40 ID:???
更新データを蓄えるための作業用のテーブルを作ってよければ、こんな感じで。

update test1
set col2 = (select test2.col2 from test2 where test1.col1 = test2.col1)
where col1 in (select col1 from test2);

普通はこんなことしないと思うけど…
5NAME IS NULL:2007/09/25(火) 03:54:31 ID:QTKb0E3V
>>4さん
レスありがとうございます。
普通は一回一回UPDATEするということでしょうか?
連続で4回ほどUPDATEすることが確実なのでINSERTのように連続でINSERTすることで負荷を軽減したいと思ったのですが・・・
6NAME IS NULL:2007/09/25(火) 04:34:44 ID:???
UPDATEはB-TREE索引をたどって該当行をつかむ→書き換える、
って流れだから、もし1つのSQLで複数まとめて書く文法があったとしても
内部動作的はこれを1回ずつ繰り返すしかない。
だから効率的にはならないんだよ。
INSERTは表の末尾に一度に書き込めばいいから効率的にできるけどね。

というわけでUPDATE4回投げましょう。

同じUPDATE文でパラメータが違うだけなら
PreparedStatement(JDBCの場合)をつかってSQLの解析コストを減らしましょう。

あとは、4回というのが確定ならそのための専用のストアドプロシージャを
書けばクライアント⇔サーバ間の通信量とかは減らせるね。
(ストアドの中では結局UPDATEを4回やるわけだけど)
7NAME IS NULL:2007/09/25(火) 13:13:39 ID:I2co02Wi
MySQL4.1でsortの基準をExcelと同じようにする方法はありますでしょうか?

以下のような場合でselect時にsortすると
---------------
insert into test(str) values('5'),('a'),('ア'),('イ'),('あ'),('い');
MySQLでは あ->い->ア->イ->5->a
Excelでは 5->a->ア->あ->イ->い
---------------

になります。MySQLでExcelのようなsort方法は可能でしょうか?
8NAME IS NULL:2007/09/26(水) 00:29:32 ID:???
おまえら、まだ前スレが残っていますよ。
9NAME IS NULL:2007/09/26(水) 08:02:13 ID:???
ほっとけば落ちるから問題なし
10NAME IS NULL:2007/09/28(金) 04:44:53 ID:e5bj6BJY
あげ
11NAME IS NULL:2007/09/30(日) 22:18:21 ID:kM0xx8Ko
こんにちわ表をCRETE TABLeでつくってるのですがレコードの名前と型の名前のかきかたと 型の数字だけ表示するやり方がわかりません ちなみに名前はCO CO COUNTRY_NAMEで型がREGION_IDです よろしくおねがいします

ちなみに表の名前はcountriesで 
表をだすときは SELECT * FROM COUNTRIES: です教えてください
12NAME IS NULL:2007/10/01(月) 01:08:52 ID:k3mU4g8h
質問させて下さい。
以下のようなテーブルがあります。(他の情報は省略してます。)
tableAにidを4つまで登録することができます。1つのみ登録することもあります。
tableBにidの名称を持っています。

tableA
| id1 | id2 | id3 | id4 |
+-----+-----+-----+-----+
| 001 | 002 | 003 | 005 |
| 002 |   |   |   |

tableB
| id | id_name |
+-----+---------+
| 001 | name1 |
| 002 | name2 |
| 003 | name3 |
| 004 | name4 |
| 005 | name5 |
| 006 | name6 |


この時、↓のような結果を求めるsqlを教えてください。

| id1 | id_name1 | id2 | id_name2 | id3 | id_name3 | id4 | id_name4 |
+-----+----------+-----+----------+-----+----------+-----+----------+
| 001 | name1 | 002 | name2 | 003 | name3 | 005 | name5 |
| 002 | name2 |   |      |   |     |   |     |


よろしくお願いします。
13NAME IS NULL:2007/10/01(月) 01:37:19 ID:???
select
 A.id1, B1.id_name,
 A.id2, B2.id_name,
 A.id3, B3.id_name,
 A.id4, B4.id_name
from
 tableA A,
 tableB B1,
 tableB B2,
 tableB B3,
 tableB B4
where
 A.id1 = B1.id
 and A.id2 = B2.id
 and A.id3 = B3.id
 and A.id4 = B4.id
;

わりとFAQ?
14NAME IS NULL:2007/10/01(月) 07:09:32 ID:???
TableAの設計が間違ってると思うのは漏れだけ?
15NAME IS NULL:2007/10/01(月) 09:30:42 ID:???
>>14
おばあちゃんが言っていた
なんでも正規化すればいいわけじゃない ってな
16NAME IS NULL:2007/10/01(月) 10:48:20 ID:???
以下のようなテーブルがあります。(他の情報は省略してます。)
17NAME IS NULL:2007/10/01(月) 20:14:38 ID:???
馬鹿には見えないテーブルか
18NAME IS NULL:2007/10/01(月) 21:59:42 ID:???
>>17
裏2chじゃないの?
19NAME IS NULL:2007/10/03(水) 14:50:47 ID:L9QuLInZ
ORDER BYで近い数値順に並べ替えとかできませんかね?

2500に近い順

var
1945
4278
5362
4896
3542
1457
1234

 ↓

var
1945
1457
3542
1234
4278
4896
5362


20NAME IS NULL:2007/10/03(水) 16:09:54 ID:???
>18
鮫島に関する投稿は消されるんだよ素人
21NAME IS NULL:2007/10/03(水) 19:06:01 ID:???
select hoge from fuga order by abs(hoge - 2000)
22NAME IS NULL:2007/10/03(水) 19:28:21 ID:???
掲示板に3分以内に投稿されたレスの数を取得するSQL文を書こうと思っています。

http://dev.mysql.com/doc/refman/4.1/ja/date-and-time-functions.html を見たのですが、比較部分をどうすれば良いのかが分かりません。

SELECT COUNT(*) FROM `res_t` WHERE dateTime_c >= SUBTIME(NOW(), '00:03:00');

みたいに書いたら一応エラーにはならないのですが、正しく比較できているか (日時が数値変換されて変に比較されていないか) が不安でしょうがありません。

上のSQL文で正しいかどうか、間違っていればどこを修正すれば良いのかを、ご教示お願いします。
23NAME IS NULL:2007/10/04(木) 17:32:35 ID:Iv269TDK
質問します
会員管理システムで、ログイン後ユーザ情報編集画面に移るようにしたいんですが、
ログイン用のIDとPassは名前や電話番号などのユーザ情報テーブルの
中に入れてもいいんでしょうか?
それとも、ログイン確認用の専用のテーブルを持たせるべきでしょうか
みなさんはどのようにしていますか?
また、各情報の編集のために複数の編集ページを行き来するたびに、
セッションでID/Passを随時確認した方がいいんでしょうか?
だいたいこんな感じでやっているというのを教えてください。 よろしくお願いします

--------------
webプログラム板で質問したんですが、板違いといわれてこちらで再質問させてもらいました
24NAME IS NULL:2007/10/04(木) 21:22:46 ID:???
俺にはweb板が正しくここが板違いにみえるが。。。
25NAME IS NULL:2007/10/04(木) 23:53:10 ID:???
>>23
MySQLなんて大げさなやつじゃなくて
PHPのAPIのSQLite使ったセッション管理使えばいいんじゃね?

PHPスレかSQLiteスレに行くといいと思うよ。
26NAME IS NULL:2007/10/04(木) 23:58:36 ID:???
PHPスレで拒否られてるんだよ、>>23は。
PHPスレでDBの作りの質問をし、MySQLスレでWEBセッション管理の質問
も追加してくれば、どちらでも違和感感じる罠。
PHPとMySQL固有の話じゃ無いんだから、もっと一般的な話題のスレで
聞くべき。
で、要求されるセキュリティのレベルが分からない以上、お好きなように
としか言いようが無い。
27NAME IS NULL:2007/10/05(金) 00:00:10 ID:???
>>26
一度や二度のアタックであきらめるような恋なら最初からするな。
28NAME IS NULL:2007/10/05(金) 00:04:46 ID:???
はあ?
29NAME IS NULL:2007/10/05(金) 00:39:42 ID:???
規模にもよるけど悩むぐらいなら作れって
あ、ねぇきいてきいていますっごいいっぱいうんこでてるよ
すっごいいっぱい

   うんこが


  でてるんだよ
   俺の体内しか知らなかったうんこたちが
 噴流となって体外へと

    このタイムスタンプが俺とうんこたちとの生きた証、メモリー

トイレからカキコ
30NAME IS NULL:2007/10/05(金) 11:27:29 ID:+u0dyj/F
すみませんが質問させてください。

MySQL5.0

LIKE演算において[0-9]や[A-C]などの構文ってサポートされていないのでしょうか?
自分で調べたらAccessではできるみたいなのですが・・・。
できないのであれば、同じことを実現する方法ってありますか?

具体的には・・・
<<data>>
CF47
AD27
EZ12

から先頭のアルファベットがA-C、二番目のアルファベットがC-Gを
SELECTしたいのですが、俺がアホなのか何回やっても構文エラーが
帰ってきます・・・。
31NAME IS NULL:2007/10/05(金) 11:35:42 ID:???
like 'AC%' or like 'AD%' or like 'AE%' or .... or like 'AG%' or
like 'BC%' or ...
like 'CC%' or ...
3230:2007/10/05(金) 11:43:36 ID:+u0dyj/F
>31
ありがとうございます。
まじっすか!?
力技しかないのか〜。
33NAME IS NULL:2007/10/05(金) 13:35:11 ID:???
where data between 'A' and 'C'
and substr(data, 2, 1) between 'C' and 'G'
3430:2007/10/05(金) 14:10:13 ID:+u0dyj/F
おぅおぅ!感動っす♪
ありがとうございました。
35NAME IS NULL:2007/10/05(金) 21:27:23 ID:ywDCVcNs
>>30
正規表現使えよ・・・
36NAME IS NULL:2007/10/05(金) 22:41:19 ID:???
>>30
RLIKE でおk
37NAME IS NULL:2007/10/06(土) 05:59:29 ID:???
38NAME IS NULL:2007/10/06(土) 09:02:35 ID:ALRD9ApN
"GROUP BY column"となっているときcolumnがNULLの時は纏めたくないのですが、
どのようにしたら良いでしょうか?
3938:2007/10/06(土) 09:04:18 ID:???
すみません、Ver 3.23です。
40NAME IS NULL:2007/10/06(土) 11:57:40 ID:???
WHERE column is not null GROUP BY column
4138:2007/10/06(土) 12:06:44 ID:???
>>40
ありがとうございます。
ですが、それだとcolumnがNULLのものは、纏める纏めない関係無しに
全て表示されなくなってしまうのですが。。
42NAME IS NULL:2007/10/06(土) 12:11:34 ID:???
mysqldumpでDBのフルバックアップを二回取ったんですが、
一回目取った分と二回目に取った分の差分を埋めることってできませんかね?
43NAME IS NULL:2007/10/06(土) 12:14:04 ID:???
これでどう

select ... from ... where column is not null group by column
union all
select ... from ... where column is null;
4438:2007/10/06(土) 12:36:43 ID:???
>>43
ありがとうございます。
うーん、それしかないですかね。。二つクエリ発行するのは負荷の都合から避けたいのですが。
45NAME IS NULL:2007/10/06(土) 15:30:16 ID:???
>>24-26
ごめんよ 自分でどうにかしてみるよ
46NAME IS NULL:2007/10/06(土) 15:37:05 ID:???
じゃあ
NULLはまとめない⇒NULLにダミー値を差し込む
という方針で

select col2, col3 from test;
+------+------+
| col2 | col3 |
+------+------+
| 1  | 1  |
| 1  | 2  |
| 2  | 1  |
| 2  | 2  |
| NULL | 1  |
| NULL | 2  |
+------+------+

select max(col2) into @r from test;
select case
    when col2 is null then @r := @r + 1  
    else col2
    end dummy1,
    count(*)
from test
group by dummy1
;

+--------+----------+
| dummy1 | count(*) |
+--------+----------+
| 1   |    2 |
| 2   |    2 |
| 4   |    1 |
| 6   |    1 |
+--------+----------+

@rが2ずつ増えるのが謎…
47NAME IS NULL:2007/10/06(土) 20:23:41 ID:???
ワロス
3から始まらないのも謎...
48NAME IS NULL:2007/10/07(日) 09:03:47 ID:QwQK+lic
A,B,Cというカラムがありまして、
A,Bの項目が重複しているレコードを全て取得したいのですが、どのようなSQLを発行すれば宜しいでしょうか?

A,B,C
"男","東京","新宿"
"男","東京","池袋"
"男","東京","渋谷"
"女","神奈川","横浜"
"女","東京","新宿"

↓↓↓↓↓↓↓↓↓↓↓↓(■"男","東京"が重複しているレコードを取得したいです)

"男","東京","新宿"
"男","東京","池袋"
"男","東京","渋谷"

A項目B項目とも内容が不定なので、WHERE文が作れなくて挫折してしましました。
宜しくお願いします。
49NAME IS NULL:2007/10/07(日) 09:12:10 ID:???
group by dummy1
の中でも @r := @r + 1 が評価されてしまっている

select max(col2) into @r from test;
set @s := 0;
select case
   when col2 is null then @r := @r + 1
   else col2
   end dummy1,
   @s := @s + 1,
   count(*)
   from test
   group by dummy1
;
50NAME IS NULL:2007/10/07(日) 09:24:17 ID:???
>>48
SELECT a, b, c FROM test WHERE a In (SELECT a FROM test GROUP BY a, b HAVING Count(*) > 1) ORDER BY a, b;
51NAME IS NULL:2007/10/07(日) 13:33:39 ID:???
>>50
ありがとうございました。
出来ました!!
色々四苦八苦していたので助かりました。
52NAME IS NULL:2007/10/07(日) 15:00:28 ID:???
すみません、テーブルを作っていたら以下のようなエラーが出ました
本の通りしたつもりなんですが、どういう問題なのでしょう?

mysql> create table 'saloon_kihon'(
-> 'sId' int(10) NOT NULL auto_increment,
-> 'loginId' varchar(32)
-> );
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 ''salo
on_kihon'(
'sId' int(10) NOT NULL auto_increment,
'loginId' varchar(32)
)' at line 1
53NAME IS NULL:2007/10/07(日) 15:10:48 ID:???
>>52
single quoteではなくてback slashだろw
54NAME IS NULL:2007/10/07(日) 15:19:31 ID:???
>>53
本当にすみません どこの部分でしょう?
ドシロウトなので、自分なりに慎重にやってるつもりなんですが、、
もう少し詳しくお願いします。
55NAME IS NULL:2007/10/07(日) 15:53:06 ID:???
「'」と「`」は違う文字
56NAME IS NULL:2007/10/07(日) 15:57:59 ID:???
DBにデータをinsertしまくってるんだけど、

/var/run/mysqld/mysqld-bin.000001
/var/run/mysqld/mysqld-bin.000002
…以降,1GB超えると次の番号へ

というバイナリが異常なペースで肥大化しているんだが、このファイルは何?
ログだとは思うんだけど、サイズ指定とか場所変更する方法はないかな
/varのパーティションサイズがさしてでかくないから困ってる

/etc/mysql/my.cnfにそれらしき設定項目も無い
だれかヘルプ
57NAME IS NULL:2007/10/07(日) 16:13:07 ID:???
log-binっていうそれらしき設定項目があるはずなんだが
58NAME IS NULL:2007/10/07(日) 16:27:57 ID:???
>>57
確かにあった、これだったのか。
 log-bin
とだけしかなかったら何かわからずスルーしていたんだけど、
 log-bin=/hoge/log
とかすれば場所変更できるみたいだね!
dクス
59NAME IS NULL:2007/10/07(日) 17:34:27 ID:???
>>53
back quote な。
60NAME IS NULL:2007/10/07(日) 17:35:32 ID:???
61NAME IS NULL:2007/10/07(日) 17:41:42 ID:???
>>60
ありがとう。
あとは有効期限(expire_logs_days じゃ無理かな?)を指定できればいいんだけど、
検索すべきキーワードもわかったから、あとはなんとか自分で調べるよ。
62NAME IS NULL:2007/10/07(日) 21:56:39 ID:???
hogeフィールドのデータが
「yama,kawa,tani」のデータに対して、
yama か kawa か tani であれば一致するようにしたい場合、
WHERE hoge REGEXP (yama|kawa|tani)
でいけるかと思いますが、
他にもっとスマートな関数や演算子とかないでしょうか。

説明へたくそでスマソ。伝わるかな(汗


63NAME IS NULL:2007/10/07(日) 23:41:29 ID:???
hoge in ('yama','kawa','tani')

これ?
64NAME IS NULL:2007/10/08(月) 12:11:37 ID:???
MySQL Command Line Client で何か select 文を発行すると

mysql> select count(*) from hogehoge;
+----------+
| count(*)   |
+----------+
| 999999    |
+----------+

のように - や | や + で整形して表示されますが、これらを自由に設定するには
どうしたらいいですか? ORACLE でいう SET COLSEP=hemohemo という感じです。
65NAME IS NULL:2007/10/08(月) 12:22:48 ID:???
>>64
できない
6664:2007/10/08(月) 12:30:42 ID:???
>>65
ガ━━(゚Д゚;)━━━ン!!!!!


ありがとうございましたorz
67NAME IS NULL:2007/10/08(月) 13:47:43 ID:???
現在InnoDBのサイズが60G超えてるんだけど
mysqldを起動するだけで激しいI/Oが発生する
止めれば発生しない
ディスク使用量に変化は無く、ただCPU3〜4%を食いながらメモリ量が上下しているだけ

8時間たった今もかわらずHDDが絶えずカリカリ
mysqldは何してるの?
6867:2007/10/08(月) 16:43:34 ID:???
↑の質問はスルーでお願い。
そもそもプログラムミスでコミットの粒度が大きすぎたのが原因かも。
直してもなるようだったら、また質問させてもらうよ
69NAME IS NULL:2007/10/08(月) 18:18:51 ID:???
InnoDBは大量にINSERTしたデータをいったんInsert Bufferというところに
ためて、あとから非同期にテーブルに差し込む。
この処理のことをInsert BufferをMergeするって言う。

だからトランザクションをいっぱい流すと、
その後mysqld再起動してなんも触ってないのにカリカリいうことはある。

show engine innodb statusでINSERT BUFFER AND ADAPTIVE HASH INDEX
のセクションを眺めてなんだか忙しそうなら当たり。

innodb_fast_shutdown = 0にするとmysqldは停止時にInsert Buffer Mergeを
完了させる。でもマニュアルには「これらの操作には数分間、または極端な
場合には数時間かかる事があります。」と書いてある。
70NAME IS NULL:2007/10/08(月) 19:19:13 ID:???
パスワード無しでテーブルの有無を確認するだけのユーザーを作りたいのですが、
どのような権限を与えればいいのでしょうか?
71NAME IS NULL:2007/10/09(火) 00:26:59 ID:???
>>55
ありがとうございました
フィールド名って「'」でくくらなくてもOKなんですね
なんで自分の本はくくってるんだろう、、  ともかくありがとう
72NAME IS NULL:2007/10/09(火) 01:26:00 ID:???
>>71
いやフィールド名で使うのは「'」ではなく「`」。
73NAME IS NULL:2007/10/09(火) 06:24:57 ID:???
>>72
おお、出来ました
というか、パソコン買って8年目にして初めて「`」の存在に気づきましたw
ありがとうございました!
74NAME IS NULL:2007/10/09(火) 09:09:42 ID:???
数字を含むカラムがあって
その中からある範囲の数字を含むレコードが
存在するかしないかだけを調べるにはどうすればよいですか
75NAME IS NULL:2007/10/09(火) 09:19:05 ID:???
>>74
簡単にサンプルを示してくれ
76NAME IS NULL:2007/10/09(火) 09:19:10 ID:NjjCqEdh
SELCT COUNT(*) TOTAL FROM SAMPLE WHERE COLUMN > 0 AND COLUMN < 100;
77NAME IS NULL:2007/10/09(火) 17:35:33 ID:/I5hC7wb
合計で数百万行で1.5GB相当のデータを47分割してテーブルに格納しています。
検索するときに、全てを結合させて検索していますが、
結合させずにひとつのテーブルに全てのデータを格納しているときと、
処理速度は変わらないのでしょうか?
ためしてみようと思ったのですが、1.5GBほどのデータ量のため、とても時間がかかってしまいます。
78NAME IS NULL:2007/10/09(火) 18:12:16 ID:???
>>77
全てを結合ってどういうこと?
79NAME IS NULL:2007/10/09(火) 18:22:46 ID:???
>全てを結合ってどういうこと?
つまりSEXってこと。
80NAME IS NULL:2007/10/09(火) 19:47:45 ID:v9b6pzkg
なんでスケールを小さくして試してみようとは思わないのかしら?
81NAME IS NULL:2007/10/09(火) 20:05:59 ID:???
1テーブルに数百万行の状態で検索した場合の速度が知りたいからじゃね?
8259:2007/10/09(火) 21:55:34 ID:???
>>73
なんで俺のヒントはスルーなんだよ!!
83NAME IS NULL:2007/10/09(火) 21:56:09 ID:???
>>74
RANGE か BETWEEN てなかったっけ?
84NAME IS NULL:2007/10/10(水) 00:47:20 ID:???
CREATE TABLE `users` (
`username` char(30) NOT NULL default '',
`userpasswd` char(20) NOT NULL default '',
);

INSERT INTO `users` (`username`, `userpasswd`) VALUES
('wildcard', '%');

上記のようなテーブル・データを作成して
下記のようにSELECTしてみましたが、username wildcard は
セレクトされませんでした。
どこがだめでしょうか?

SELECT *
FROM `users`
WHERE `userpasswd` = 'abc';

85NAME IS NULL:2007/10/10(水) 02:45:47 ID:???
フィールドの値をベースに正規表現で比較するのって可能でしょうか?

SELECT field
FROM `table`
WHERE 'keyword' REGEXP field;
で一応うまく検索かけれるんだけど、これって正式にサポートされてるんでしょうか?

また、
WHERE 'keyword' REGEXP ^field$;
みたいに記述したい場合はどうすればいいんでしょうか。
ちなみにこれでは文法エラーがでます。
86NAME IS NULL:2007/10/10(水) 03:27:08 ID:???
>>84
そりゃ username = 'wildcard' のレコードの userpasswd カラムの値は
'abc' じゃないからだろ
87NAME IS NULL:2007/10/10(水) 08:40:52 ID:???
>>85
1番目 REGEXPの演算子の問題だから、フィールド値を左右どっちに使っても問題ない。

2番目 WHERE 'keyword' REGEXP CONCAT("^",field,"$") でいけるかな。

1 にしても 2 にしても遅そうだけど。
88NAME IS NULL:2007/10/10(水) 12:10:03 ID:???
データベースに保存されているデータを
丸々そのまま別のところで使用したい場合、
どうすればいいのかな?
容量は3GB近くなんだが・・・
89NAME IS NULL:2007/10/10(水) 13:28:55 ID:???
DB止めれるならtar玉で圧縮したら?
90NAME IS NULL:2007/10/10(水) 13:35:08 ID:???
>>89
鯖にもよるんですね
さくらのプロ借りてますが、/db/ってとこに入れればいいのかな・・・?
9184:2007/10/10(水) 13:36:35 ID:???
どんな条件でもヒットするような
フィールド値って存在しないんでしょうか?
%にすれば何でもヒットしてくれるかな、というあふぉな考えをしてました。
9284:2007/10/10(水) 13:39:47 ID:???
そういえば、
mysqlデータベースのuserテーブルって、Hostフィールドが%で機能してますよね。

あれは、MySQLのユーザ処理部分がそういう風に作られてるだけで
一般的な使用方法は無理なのでしょうか。
9384:2007/10/10(水) 13:40:50 ID:???
>>90
さくらならphpmyadminでエクスポートすればよいのでは。
94NAME IS NULL:2007/10/10(水) 13:41:37 ID:???
>>93
インポートかな・・・?
流石に3GBもあるのを一度にインポートするのは大変な気も・・・
たとえ分割してても
95NAME IS NULL:2007/10/10(水) 13:58:24 ID:???
>>91
存在しない 意味がないから

>>92
このカラムを読み込んだプログラムが
% の場合は任意のホストとして扱う、という処理なんだろう   きっと、、、
96NAME IS NULL:2007/10/10(水) 15:04:23 ID:???
>>90 さん、レンタルサーバーを借りているなら、仕様書なりありませんか?
また、サポートなどで聞くことはできませんか?

Linux(など)の場合、サービスディレクトリはサーバーの設計を行った人にしかわからない
かと思います。

また、DBが共有サービスであれば、DBを止めることもできないかと思われます。
サーバーへログイン可能であれば、
http://www.nilab.info/zurazure2/000659.html

こういったものを参考にできませんでしょうか?
97NAME IS NULL:2007/10/10(水) 15:16:04 ID:???
>>91
確かにそういう特殊な値はほしいときがあるね
98NAME IS NULL:2007/10/10(水) 15:43:32 ID:???
>>84
SELECT * FROM `users` WHERE 'abc' like `userpasswd`;
で絞り込んだ後、フロントエンドで処理するんじゃだめ?
99NAME IS NULL:2007/10/10(水) 15:44:38 ID:g44V9bOq
>>98
もしくは素直にNULLを入れといて
SELECT * FROM `users` WHERE `userpasswd` = 'abc' or `userpasswd` is null;
する方が素直かな。
100NAME IS NULL:2007/10/10(水) 16:39:07 ID:???
>>96 は?何か?

>>90
show variables like "datadir";
でDBのデータディレクトリを特定
FLUSH TABLES WITH READ LOCK;
でDBのカキコ禁止
データディレクトリを丸ごと tar zcvf
終わったらカキコ許可
UNLOCK TABLES;
でsftpとか lftp で tarしたDBファイルを引越し先にput
後はわかるだろう。
101NAME IS NULL:2007/10/10(水) 19:47:56 ID:???
もしかしてさんざん既出かと思うのですが、ざっとググった限りでは解決しなかったので
質問させてください。

今サーバで動いているMySQLはrpmでいれた5.0.22なのですが、コンパイルオプションとして
dont_use_default_fieldsを指定した動作になっているようです。開発環境のWindows版とで
insert時の挙動が異なり、大変不便な思いをしています。

これを解決するにはソースからコンパイルするほかないんでしょうか?
なお現在手に入る最新のrpmは以前のstandardではなくcommunity版となっており、
コンフリクトのためインストールできませんでした。
102NAME IS NULL:2007/10/10(水) 21:25:21 ID:???
そのとおり
103NAME IS NULL:2007/10/10(水) 21:44:38 ID:???
104NAME IS NULL:2007/10/10(水) 21:45:24 ID:???
ごめん
こっちだった
http://web.arena.ne.jp/suite2/
105NAME IS NULL:2007/10/10(水) 21:51:45 ID:???
106NAME IS NULL:2007/10/10(水) 22:05:08 ID:???
mysql> show global status;
で出てくる送信バイト数Bytes_sentの値が、32bit(4GB)で桁あふれして
ゼロに戻っちゃうんですが、仕様ですか?

いまどき、4Gとかで桁あふれされても困るんですが。
何回桁あふれたかperlスクリプトか何かでチェックしてバイト数だすのとか面倒くさす
どうにかなりません?
107NAME IS NULL:2007/10/10(水) 22:15:27 ID:???
>>106
いまどき32bit環境かよ!
108NAME IS NULL:2007/10/10(水) 22:15:57 ID:???
すまんかった、今すぐOpteron買ってくる!
109NAME IS NULL:2007/10/10(水) 22:36:50 ID:???
>>106
ttp://bugs.mysql.com/bug.php?id=28149
5.0.44 及び 5.1.20-beta で修正した、とのこと
110NAME IS NULL:2007/10/10(水) 23:07:16 ID:???
アルェー(・3・)うち5.0.45なんだけドー

と思ったら

The Bytes_received and Bytes_sent status variables could hold only
32-bit values (not 64-bit values) on some platforms.

some platformsっすか・・・
111NAME IS NULL:2007/10/11(木) 00:46:49 ID:+sOrpx9+
すまんが、データベース内で、文字列の中から2つ以上並んだスペースを1つのスペースに置き換えることって出来ないかなあ?

「あ_い___うえ____お」→「あ_い_うえ_お」
こんな感じで。
一回、スペースで切り分けて、スペースを除去してからスペースを一つつけてつなぎ合わせるしかないのかな???
112NAME IS NULL:2007/10/11(木) 00:58:35 ID:???
スペース3個をスペース2個に置換をできるかぎりやる

1個→1個
2個→2個
3個→2個
4個→3個→2個
5個→4個→3個→2個

となって、必ずスペース1個か2個になる。
スペース3個がなくなったら、スペース2個を1個に置換すればおk
113NAME IS NULL:2007/10/11(木) 01:10:57 ID:dt5N6A3I
>>112
やっぱりデータベース内では限界なのかなあ???
114NAME IS NULL:2007/10/11(木) 01:15:34 ID:???
いや、データベース内で置換できるだろ、replaceで
115NAME IS NULL:2007/10/11(木) 01:47:43 ID:D7bY0G8T
datetimeのカラムにインデックス付けて、
年とか、年月とか、年月日で集計したいのですが
like 'year-month%'で検索するとインデックスが使用されません
インデックスが使われるようにするにはどうすればいいですか?
116むこうの246:2007/10/11(木) 04:08:30 ID:???
どなたか、こちらの件わかる人おりませんか??
http://pc11.2ch.net/test/read.cgi/db/1081818145/246-247

ちなみに今日は、本家から5.0.45.tar.gzとってきて、同様にmake(prefixのみ別dirで./configure)してみたんですが、
やっぱりmake testで一発目(alias)からFailedでて先に進めません。

昨日と同じく、testとばしてmake installして起動させてみると一応ちゃんと動いている模様。
./mysql-test/mysql-test-runはやっぱり通らないけど、./sql-bench/run-all-testだと(5.0.48、5.0.45とも)止まらずに最後まで行きます。
出力見た限りではどこかでエラーとかにはなってないと思う(前にWin版でsql-benchした時、エラーの時それらしい出力があった)

もともとrpmで入った/etc/my.cnfをrenameしたり、/usr/local/mysql仕様に書き換えたりしたけどtest通らず。

distri達はrpm作った時にどうやってtest通したんだ?
(specのなかにmake testがあるってことは、ちゃんと通ったはずなんですが・・)
117NAME IS NULL:2007/10/11(木) 10:55:56 ID:???
>>115
範囲指定する。
118NAME IS NULL:2007/10/11(木) 11:53:28 ID:???
文字列の中から2つ以上並んだスペースを1つのスペースに置き換えることって

1個→1個
2個→1個
3個→2個→1個
4個→3個→2個→1個
5個→4個→3個→2個→1個
119むこうの246:2007/10/12(金) 04:33:11 ID:???
問題解決しました。どうもすいません。
120NAME IS NULL:2007/10/12(金) 07:15:11 ID:???
s/\s+/ /g
121NAME IS NULL:2007/10/13(土) 15:35:09 ID:???
>>120
マルチバイトで正規表現ってちゃんと使えるようになったの?
まだ鬼車パッチ当てなきゃだめ?
122NAME IS NULL:2007/10/14(日) 00:44:56 ID:???
なってないような気がする。
123NAME IS NULL:2007/10/16(火) 17:22:51 ID:19Z+CTul
曖昧検索のやり方を教えてください。

検索用語「手伝う」

「おなかが減りました」
「手が痛いです」
「今日、母親の手伝いをしました」
「仕事を手伝う」

とあると、一番「手伝う」に近いものから出したいのです。
上記の場合だと

「仕事を手伝う」
「今日、母親の手伝いをしました」
「手が痛いです」
「おなかが減りました」

このように出したいのですが、そういった検索方法はありますでしょうか?
124NAME IS NULL:2007/10/16(火) 21:41:18 ID:???
DBに曖昧検索機能など無い
125NAME IS NULL:2007/10/16(火) 21:44:19 ID:???
つオントロジ
126NAME IS NULL:2007/10/16(火) 23:35:24 ID:wl91U+ML
類義語辞書DB作ってFullTextSearch回すとか
127NAME IS NULL:2007/10/16(火) 23:41:50 ID:JuRjnLqb
マッチ条件がだんだん短くなるような検索があればいいんだな、多分
128NAME IS NULL:2007/10/17(水) 01:17:33 ID:hXE7fedj
「手伝う」でマッチする文章を高いスコアとし、
「手伝」「伝う」でマッチするのはそれより低いスコア、
「手」「伝」「う」でマッチするのはもっと低いスコアとして

さらに出現頻度で合計して総合スコアをだせばいいのでは

どれくらいのスコアにすればいいのかは統計をとって最適値を求めればいいのでは
129NAME IS NULL:2007/10/17(水) 01:21:04 ID:???
「てつだう」はスコア低くていいのかな
130NAME IS NULL:2007/10/17(水) 03:11:56 ID:???
>>133
ないので自分で作ってください
131NAME IS NULL:2007/10/17(水) 16:27:20 ID:???
かなりアクセスのあるデータベース(MySQL)を使用する際、

[構成A]
CPU:Core2Duo
メモリ:8GB
HDD:SATA
台数:4台

で行くのが良いのかそれとも

[構成B]
CPU:Core2Quad
メモリ:8GB
HDD:SAS 15000回転
台数:2台

で行くのが良いのかどちらでしょう。
読み込み中心ならメモリでキャッシュ処理できるから
構成Aのほうが圧倒的に優位な気はしますが。

参考コメントきぼんぬ
132NAME IS NULL:2007/10/17(水) 17:35:21 ID:???
データの総量が8GB未満ならB。
ディスクにアクセスしないのでCPU性能が出るから。

データの総容量が8GB以上ならB。
ディスクが速いから。

構成書き間違ってない?
133NAME IS NULL:2007/10/17(水) 17:46:22 ID:???
MySQLクラスタって参照のみでもそんなに速度がでないって言うし、それもプロ中のプロが限界まで調整した結果なんだろうし・・・・
相当単純なことしかさせない場合は別として、Bの方が安全かなあ?
134NAME IS NULL:2007/10/17(水) 18:49:45 ID:???
会費制の会員システムをphp+mysqlで組もうと思うのですが、
料金部分のテーブル構成に非常に悩んでます。
どこか参考になるところないでしょうか。

ここの決定でほぼ決まるような気がします。
135NAME IS NULL:2007/10/17(水) 19:03:22 ID:???
>>134
恐らくデータ型を悩んでいるんだと思いますが、
DECIMAL型で作成すれば、あとは特に問題は生じないと思います。
理由はお分かりだと思いますが、まるめ誤差を防ぐためです。
136132:2007/10/17(水) 19:36:19 ID:???
>>133
台数ってHDDの数じゃなくてサーバの台数?
勘違いしてた。前言撤回。
Aでレプリケーション組むのがいいと思う。
更新用が1台、参照用が3台。
MySQLは2コア→4コアの性能向上があまり良くないから。

ストレージエンジンはMyISAMかInnoDBで。
MySQL Clusterは忘れていいよ。あれは特定用途向けの単機能製品。
エンジンの機能実装がしょぼいのでちょっと凝ったSQL投げると性能劣化する。
137133:2007/10/17(水) 20:41:11 ID:???
>>136
すまんが俺は131じゃないんだ。
参照のみっていっても、必ずしもレプリケーションで対応できるわけでもないんじゃないかなっていう意味で>>133を捕らえて欲しい。
138NAME IS NULL:2007/10/18(木) 18:12:39 ID:k4W9Nk/e
タギングを実装しようと考えているのですがDB構成がどうもしっくりきません。
皆さんならどんな風に実装しますか?

僕が考えたものだと汎用性が皆無です。。。

■案1
CREATE TABLE t_bookmark (
seq INT,
name VARCHAR(128),
tag1 VARCHAR(32),
tag2 VARCHAR(32),
tag3 VARCHAR(32)


■案2
CREATE TABLE t_bookmark (
seq INT,
name VARCHAR(128),

CREATE TABLE t_bookmark_tagging (
bookmark_seq INT, -- t_bookmark.seq
tag VARCHAR(32)


案1だと3つまでと最大数が決まっているが管理が簡単
案2だと汎用性は1以上だが膨大なデータ量になるかも

できればタグ同士をフォルダーのように関連付けたりもしたいのですが皆さんならどんなテーブルにしますか?
139NAME IS NULL:2007/10/18(木) 18:15:31 ID:???
少なくとも案2はねえな。
140NAME IS NULL:2007/10/18(木) 20:24:54 ID:???
案2にタグテーブルを追加して、
t_bookmark_taggingテーブルのtagをタグテーブルのプライマリキーに置き換える。
141NAME IS NULL:2007/10/18(木) 23:11:15 ID:???
>できればタグ同士をフォルダーのように関連付けたりもしたい

って具体的にどういうことがしたいん?
142NAME IS NULL:2007/10/19(金) 03:37:41 ID:H+ebEc3A
>>140
ありがとうございます!
汎用性高そうですね
勉強になります!
>>141
簡単にいうとgoogleみたいなことです
143NAME IS NULL:2007/10/19(金) 10:45:44 ID:???
>>142
「googleみたいなこと」って全然意味が分からないのですが。
全文検索?
144NAME IS NULL:2007/10/19(金) 12:11:34 ID:???
gmailのラベルのことを言ってるのかな
145NAME IS NULL:2007/10/19(金) 12:47:16 ID:???
YouTube のタグみたいなのじゃなくて?
146NAME IS NULL:2007/10/19(金) 13:08:52 ID:vJ6ps9vK
>>143
キーワード「サル」の類義語として「ゴリラ」、「チンパンジー」などを階層的に保持したいのです。
サルで検索したらゴリラにカテゴライズされるものも表示したいのです。

自分なりに考えてみたのですが、ムズかしい!
147NAME IS NULL:2007/10/19(金) 13:46:45 ID:???
そういうのはスマートにやろうとするより、ベタにやったほうがかえってうまくいったりする
148NAME IS NULL:2007/10/19(金) 14:21:48 ID:???
>>146
そういうのは >>140 のタグテーブルにツリー構造を作るのがよかんべ。
ただ、ちゃんと考えないとパフォーマンス悪くなりそうだけど。
149NAME IS NULL:2007/10/19(金) 18:07:04 ID:???
>>142
まずしっかり正規化してみる。おのずと答えが出るものだ。
150NAME IS NULL:2007/10/19(金) 18:09:44 ID:???
google の 関連検索 見たいな事をTAGでやりたいのではないかと。
というか質問しておいて言葉足りな杉。
151NAME IS NULL:2007/10/19(金) 18:16:44 ID:???
>>150
そういうことか。てっきりYouTubeのタグみたいなのかと思ったぜ。
152NAME IS NULL:2007/10/19(金) 18:32:36 ID:a+9wl6Y6
DBで一部の文字列が検索できなくなりました。
文字コードはUTF-8です。

「和風居酒屋」という文字列に対し、LIKE '%居酒屋%'でヒットしません。
LIKE '%酒屋%' または LIKE '%屋%' などではヒットします。
LIKE '%居%' ではヒットしません。

「居酒屋」に対しては、
LIKE '%居酒屋%' でも LIKE '%居%' でもヒットします。

「和風 居酒屋」と、半角スペースを空けてみても
LIKE '%居酒屋%' でも LIKE '%居%' でもヒットします。

「風居」で何か特殊なことでも起きているのでしょうか?
153NAME IS NULL:2007/10/19(金) 18:43:18 ID:a+9wl6Y6
追記です。
型はTEXTです。
154NAME IS NULL:2007/10/19(金) 18:53:40 ID:???
揚げ足とりみたいなことを聞いてすまんが、前まではできてたって意味なの?
155NAME IS NULL:2007/10/19(金) 18:54:39 ID:a+9wl6Y6
>>154
いえ、今回初めてやりました。
検索できなくなりました。 →検索できません。

に訂正します、すみません。
156NAME IS NULL:2007/10/19(金) 19:06:45 ID:a+9wl6Y6
SHOW VARIABLES
で文字コードをチェックしたところ、「ujis」になっていました。

手順的にこんな感じです。

SET NAMES utf8
SELECT * FROM tbl WHERE keyword LIKE '%居%'

「居」の文字コードはUTF-8です。
157NAME IS NULL:2007/10/19(金) 20:34:35 ID:???
「風居」とう文字列に対しての検索はしたの?
158NAME IS NULL:2007/10/19(金) 21:14:17 ID:fKi8KFKE
>>157
ID変わります。

「風居」に関してヒットしました。
159NAME IS NULL:2007/10/19(金) 21:41:14 ID:???
>>152
バージョンは?
160NAME IS NULL:2007/10/19(金) 21:46:53 ID:fKi8KFKE
肝心なバージョン忘れていました
さくらレンタルサーバーの4.0.2xです。
161NAME IS NULL:2007/10/19(金) 22:57:15 ID:???
あと大事なこと書いていませんでした。
現在、彼女募集中です。
162NAME IS NULL:2007/10/19(金) 23:16:15 ID:???
>>161
彼女の仕様は?
レンタルでもいいの?
163NAME IS NULL:2007/10/19(金) 23:20:42 ID:???
>>162
INSERTどころかSELECTも無理だよ。
164NAME IS NULL:2007/10/19(金) 23:38:11 ID:???
>>162
できれば居酒屋で働いてる様な娘がいいです
165NAME IS NULL:2007/10/19(金) 23:38:33 ID:fKi8KFKE
>>161
今日好きな子に彼氏ができたとこだ
だからその辺りは突っ込まないでくれ・・・
166NAME IS NULL:2007/10/19(金) 23:43:57 ID:fKi8KFKE
って大阪支部は大阪かwww把握wwww
3人いるみたいだから俺も参加していい?
何か参加資格とかあるのかな?
167NAME IS NULL:2007/10/19(金) 23:45:46 ID:fKi8KFKE
誤爆orz
168NAME IS NULL:2007/10/19(金) 23:55:10 ID:???
VIPなんぞ覗いてるから
彼女ができないんだよ
169NAME IS NULL:2007/10/19(金) 23:55:54 ID:fKi8KFKE
>>168
元カノなんだけどね・・・
ずるずる引きずってるのよ・・・
だからこんなレベルなんだ・・・
170NAME IS NULL:2007/10/19(金) 23:58:03 ID:???
もう drop して
新しいテーブルを create しろよ
171NAME IS NULL:2007/10/20(土) 00:01:32 ID:fUFTSHBK
新しいテーブルが作成できないみたい
心のパーミッションエラーだって・・・
172NAME IS NULL:2007/10/20(土) 03:13:49 ID:???
そもそも4.0はutf8サポートしてないんだけどそのへんどうなの
173NAME IS NULL:2007/10/20(土) 04:55:33 ID:???
案の定WebProg板から移動してましたね>>152
174NAME IS NULL:2007/10/20(土) 05:13:56 ID:2AwTGoKZ
すいません初心者でよく分からないのですが
ログインページであるIDでログイン後、そのIDの列にセッションIDを登録したいと考えています。
テーブルにはIDがすでに登録されていてSessionidにはNULLが入っている状態です。
教授宜しくお願い致します。
175NAME IS NULL:2007/10/20(土) 06:15:04 ID:???
すいません意味がわかりません・・・
176NAME IS NULL:2007/10/20(土) 06:27:02 ID:???
教授は土日休みです
177NAME IS NULL:2007/10/20(土) 06:57:25 ID:???
update USERTABLE set Sessionid='hogehoge' where id='hemohemo';
178NAME IS NULL:2007/10/20(土) 07:16:24 ID:fUFTSHBK
>>172
それは初耳です・・・

>>173
そのとおりです。
179NAME IS NULL:2007/10/20(土) 09:07:33 ID:???
>>178
これか。

9.5. Unicode のサポート

MySQL バージョン 4.1 以降、Unicode データを保存するために次の新しいキャラクタセットが用意されています: ucs2 (UCS-2 Unicode キャラクタセット)および utf8 (Unicode キャラクタセットの UTF-8 エンコード)。
180NAME IS NULL:2007/10/20(土) 09:44:58 ID:mSjzHsRr
すみません質問します。
今、テーブル作ってるんですが、フィールドの数が90個くらいになりそうです。
これは異常でしょうか。初心者なので、判断に迷っています。
181NAME IS NULL:2007/10/20(土) 10:31:40 ID:???
>>180
どんなテーブルかわからんと判断も出来ん。

それと、こちらで聞いた方がいいでしょう。

頼むから正規化しろよ 第二正規形
http://pc11.2ch.net/test/read.cgi/db/1116097001/
182NAME IS NULL:2007/10/20(土) 10:33:50 ID:???
>>180
設計間違ってるで九分九厘間違いないです。

(それ判断できない人が、ガチで90必要な大規模案件やってるわけないのでね)
183NAME IS NULL:2007/10/20(土) 12:23:24 ID:???
>>180
正規化やってその数なら問題ない
1000のカラム抱えたテーブル扱ってるけど普通に動くし
184NAME IS NULL:2007/10/20(土) 13:00:19 ID:???
180です  回答ありがとうございます。
テーブルは、ライブの情報を扱うものです。なので、
開催日、開始時間、料金、イベント情報etcの基本情報と
出演者名、出演者のURL、演奏楽器 の出演者情報etcの2種類に分かれます
出演者はイベントごとに1〜10人に分かれて不安定なので正規化・分離するなら
この部分かなぁと思うんですが、、 
この程度なら同じテーブルに入れてもいいのかなぁという気もして、判断しかねてます
185NAME IS NULL:2007/10/20(土) 16:43:44 ID:???
時刻の取得について質問です。
time_stというところにtimestampが入っていまして
select time_st from member where memname='test';と実行すると
time-st
2007-10-20 16:10:30
と取得できるのですがこれを20071020161030と繋げて取得するにはどのようにすればよいでしょうか?
186NAME IS NULL:2007/10/20(土) 16:49:54 ID:???
187NAME IS NULL:2007/10/20(土) 17:35:14 ID:???
>>186
ありがとうございました。無事できました〜。
188NAME IS NULL:2007/10/21(日) 00:34:22 ID:VLr/CFtZ
あるテーブルに削除フラグ(1か0がはいります)をalterで追加しようと思っているのですが、
charにしようかintにしようか迷ってます。

通常は、このような削除フラグのようなものは何の型にするのが普通でしょうか?
189NAME IS NULL:2007/10/21(日) 00:48:34 ID:???
190NAME IS NULL:2007/10/21(日) 15:15:54 ID:???
まぁtinyintなんだけどな
191NAME IS NULL:2007/10/21(日) 18:34:46 ID:???
MySQL 4.1.20 Windows

desc テーブル名でテーブルの構成情報が見られますけど、これをテキスト情報に落とすことって
出来ませんかね?
192NAME IS NULL:2007/10/21(日) 19:21:55 ID:???
>> table.txt
193NAME IS NULL:2007/10/21(日) 19:30:39 ID:???
mysql < desc.sql > xxxx.txt
で出来るんじゃないの

でもmysqldump使うのが一般的だと思う
194NAME IS NULL:2007/10/21(日) 19:38:07 ID:???
リダイレクトで見ることが出来ました。お二方、thxです。
Mysqldumpは書いた後、思いつきました(^^;。
195NAME IS NULL:2007/10/21(日) 22:06:09 ID:ORdmYlqR
初心者質問ですいません。
検索等実行時の戻り値に所要時間がありますが、
この値をPerlスクリプトから取得したいです。
でもMySQLのどの値にアクセスしていいのかわからず・・・
よかったらおしえてくださいm(_ _)m
196>>189:2007/10/21(日) 23:46:13 ID:???
>>189
ありがとうございますm(_ _)m
197NAME IS NULL:2007/10/22(月) 00:17:58 ID:???
MySQLのソース client/mysql.cc を読むと分かるけど
処理時間を計っているのはmysqldでもlibmysqlclientでもなく
mysqlコマンド本体。

だからPerlスクリプトから処理時間を知りたければ
Time::HiResあたりを使って自分で計るのがいいと思う。

use DBI;
use Time::HiRes;

$user = 'xxxx';
$pass = 'xxxx';

$db = DBI->connect('DBI:mysql:xxxx:xxxx', $user, $pass);
$sth = $db->prepare("select c1 from t1");
$t = Time::HiRes::time;
$sth->execute;
for ($i = 0; $i < $sth->rows; $i++) {
@r = $sth->fetchrow_array;
print "$r[0]\n";
}
$t = Time::HiRes::time - $t;
printf "%.4f sec\n", $t;
$sth->finish;
$db->disconnect;
198NAME IS NULL:2007/10/22(月) 16:12:58 ID:???
mysql5のレプリケーションは、
マスターのDBに対して、スレーブは、すべて既存のDBが消去されて、
マスターのDBが複製されるのでしょうか?

マスターのDBが、スレーブに追加されるような形で複製されて欲しいのですが・・・。
199NAME IS NULL:2007/10/22(月) 17:58:08 ID:???
MySQLのレプリケーションはSQLが流れるだけだから
マスタにないDB・テーブルがスレーブにあるのは大丈夫。
ただしスレーブにSQLを流す時点で不整合があるとそこでレプリケーションが停止する。
200195:2007/10/22(月) 21:00:30 ID:???
>>197
ありがとうございます。mysql.ccはまだ読めていないのですが
Time::HiResで計測することができました。
サンプルコードまでいただきたすかりました!
201198:2007/10/22(月) 23:00:11 ID:???
>>199
ありがとうございます。
現在レプリケーションの設定ですが、いろいろつまずいています。

MyISAMの小さなデータベースで練習をしているのですが、
この場合も「バイナリログ」を使った更新になるのでしょうか?
MyISAM用の単純な方式(クエリのテキスト文をスレーブに投げる等)なものがあるのでしょうか?

あと、レプリケーションのタイミングは、
update、delete等、データベースが変わる瞬間にレプリケーションをするのでしょうか?
タイマーのようなもので、一定間隔で変わるのでしょうか?
202NAME IS NULL:2007/10/23(火) 00:16:34 ID:???
>>201

>MyISAM用の単純な方式(クエリのテキスト文をスレーブに投げる等)なものがあるのでしょうか?
No

>update、delete等、データベースが変わる瞬間にレプリケーションをするのでしょうか?
YES
トランザクション開始とcomittもレプリケーションされる。
バイナリログを見ればわかる。
自分で実験されたし。
203NAME IS NULL:2007/10/23(火) 09:37:12 ID:jG23x/MR
left joinとright joinの違いって結構大きいのでしょうか?

元データが1万件ぐらいあるとき、left joinだと処理が遅くなり、
right joinだと遅さを感じませんでした。
204NAME IS NULL:2007/10/23(火) 10:50:38 ID:???
>>203
indexはどーなってるん?
205NAME IS NULL:2007/10/23(火) 10:55:03 ID:???
>>203
index含め同じ条件で結合しての結果でしょうか?
206203:2007/10/24(水) 01:59:09 ID:???
>>204-205
そうです。indexを含めてleft joinをするとかなり重たいです。
207NAME IS NULL:2007/10/24(水) 10:58:41 ID:???
いいからexplainしろよ
208NAME IS NULL:2007/10/25(木) 09:29:08 ID:???
半角カタカナ、全角半角英字、などみなさんはどのように対処されていますか?
入力時に全部統一させる、清音化した列を新たに設ける、その都度関数を用いて変換比較する
結構悩ましい問題だと思うのですが・・・
209NAME IS NULL:2007/10/25(木) 10:32:04 ID:???
うちでは
入力されたデータの中の
半角カタカナは勝手に全角カタカナに変換
全角英数字は勝手に半角英数字に変換
するプログラムを経由してから
SQL薄幸してます
210NAME IS NULL:2007/10/25(木) 11:16:38 ID:???
>>209に幸多かれ
211NAME IS NULL:2007/10/25(木) 18:56:56 ID:/t1iB/b6
MySQL 4.1.20 を、Linux でつかっています。
コマンドラインの mysql コマンドで SQL をたたくとき、
set autocommit=0;
を毎回実行すれば Auto Commit はオフにできますが、毎回打つのが面倒です。
my.cnf に書いたりできないのでしょうか?
212NAME IS NULL:2007/10/25(木) 19:23:28 ID:???
できる
213NAME IS NULL:2007/10/25(木) 19:46:11 ID:???
http://www.mysql.gr.jp/frame/modules/bwiki/?FAQ#content_1_32 をみて、
/etc/my.conf の [mysqld] のブロックに

init-connect='SET AUTOCOMMIT=0'

を追加しました。

grant 文でスーパーユーザじゃないユーザをつくって mysql コマンドで接続したところ、
Auto Commit が 0 になっていました。

でもこれだとスーパーユーザが接続した場合は、Auto Commit = 1 のままですが、
これはしょうがないのでしょうか?
214NAME IS NULL:2007/10/25(木) 23:32:34 ID:???
しょうがない。
215NAME IS NULL:2007/10/26(金) 00:05:42 ID:???
排他制御について質問させてください。

以下のようなtable Aがあったとします。
----------------------------------
id | data
----------------------------------
1 | aaa
2 | bbb
3 | ccc

この状態で、データをinsertする場合、
以下のようにidのmax値を取得して、
select max(id) from A;
max値に+1をして、insertという流れになるとします。

複数のプログラムがこのテーブルにデータをinsertする可能性がある場合、
テーブル毎ロックする必要があるでしょうか?

#auto incrementはコーディング規約で使わない方針となっています(T_T
216NAME IS NULL:2007/10/26(金) 00:42:50 ID:???
AUTO INCREMENT も使えないこんな世の中じゃ
217NAME IS NULL:2007/10/26(金) 00:50:40 ID:???
>>215
id の値がユニークであればいいなら
create table A ( id integer auto_increment primary key, data char(3));
とでもして
insert into A (data) values ('aaa');
と id を指定せずに挿入するのはどうか
218NAME IS NULL:2007/10/26(金) 01:03:37 ID:???
>>215さんとは別人ですが、便乗して教えてください。
auto_incrementにしてあるテーブルがあるのですが、
コレ他のサーバーに移行するとauto_incrementの値はどこからスタートするのでしょうか?

auto_incrementの列に欠番があるので、1,3,4,5,7...のようになっています。
別のサーバーに移行したときに、auto_incrementがある列の最大値+1から自動的にカウントしてくれると助かるのですが。
219NAME IS NULL:2007/10/26(金) 01:05:55 ID:???
そのままinsertすれば問題ない
220211:2007/10/26(金) 14:37:10 ID:???
やはり仕方がないのですね。

>>213 では、サーバ側の設定ですが、どちらかというとクライアント側で、
oracle の sqlplus の login.sql みたいに、毎回起動時に set autocommit=0 とかできないかなと思っていたのですが、
そういう方法はないということであきらめます。
(あとは、毎回起動時に良く使うコマンドを、source コマンドで実行するぐらいか)
221NAME IS NULL:2007/10/26(金) 19:38:34 ID:???
>>218
過去にそのテーブルが経験した最大値プラス1から始まる。
値は以下のコマンドで確認できる。

show table status like "hogeTable"
222NAME IS NULL:2007/10/27(土) 14:57:36 ID:g8S8hRuK
聞きたいんですけど、みんなDBの管理ってmysqladminでやってるんですか?
というか、これってwin環境ですか使えないんですよね?
Linux環境で同じようなこと出来るソフトってないんでしょうか?
223NAME IS NULL:2007/10/27(土) 15:34:28 ID:???
Linuxでも動くでしょMySQLAdmin
224NAME IS NULL:2007/10/27(土) 16:36:17 ID:???
そうなんですか? よく調べてみます
ありがとう
225NAME IS NULL:2007/10/27(土) 17:14:47 ID:???
>>224
Windows版にくっついてるGUIのやつかなあ?
>>223と想像してるものとはちがうのかもしらん。
どっちにしても大していいツールでもないので、ほかのを使うか自分でSQLを打つかすることになるだろう。
226NAME IS NULL:2007/10/27(土) 19:36:17 ID:???
質問させて下さい。
WindowsXP SP2 にてMySQL 5.0.43をメモリ2G搭載して使っています。
1:my.cnf の設定を変更し再起動をかけたのですが一部設定通りに反映されていない部分がある。
2:設定値についての疑問

1については 下記以下一部抜粋 のように設定してあります。
skip-locking
key_buffer=1024M
table_cache=1024
max_allowed_packet=4M
sort_buffer_size=2M
read_buffer_size=4M

SHOW VARIABLES; を打つと、table_cache 763 と表示され、設定した1024ではありません。
また、SET GLOBAL table_cache=数値; を実行するときちんと設定値になります。
設定ファイル通り読み込ませたいのです。

2については設定値の〜Mや〜Kはわかるのですが、単位のついていないもの、例えばtable_cache等はバイトと考えればよいのでしょうか?
だとすればグローバルキャッシュなのにもかかわらずあまりに使用メモリ量が少ないんじゃないかと思っています。

最後に、現在メモリを多く使用するよう設定してMySQLの挙動テストをしているのですが、どれだけメモリを大きく設定しても
key_buffer以外の設定だとメモリ利用料が5Mもあがりません。
SHOW VARIABLES;では殆どの値がきちんと設定値になっていますが、本当にメモリを使用しているのか少々不安です。

また、設定値自体の項目についてはいろいろなサイトで見かけますが、設定についてもう一歩踏み込んだ、
挙動を想像・把握できるような解説がなされているサイト等はありませんでしょうか?
MySQLドキュメント当を見ながらやってきたのですが行き詰ってしまいました。
よろしくお願いします。
227NAME IS NULL:2007/10/27(土) 20:09:59 ID:???
1.
table_cache=700
と書くとどうなる?
OSレベルの制限値を見てmysqldが勝手に値を絞っているのかもしれない。

2.
table_cacheはハンドラというテーブルを管理する内部構造の「数」を示す。
サーバへの同時接続数が100あって、それらが平均的に
テーブル3つにアクセスするSQLを実行するなら、table_cacheは300以上にする。

sort_buffer、read_bufferは
それが必要となるようなSQLを実行しないと確保されない。

> 設定についてもう一歩踏み込んだ、
> 挙動を想像・把握できるような解説がなされているサイト

英語を苦にしないならこのへん。
http://forge.mysql.com/wiki/MySQL_Internals

書籍ならこのへん。バージョン3.xや4.xの本を買わないように注意!
・現場で使える MySQL
・MySQL 辞典

残念ながら、最終的にはソース嫁としか言えない。
228226:2007/10/27(土) 20:57:38 ID:???
>>227
レス有難うございます。
table_cache=700 => 起動 => 設定値700
table_cache=512 => 起動 => 設定値512
table_cache=1024 => 起動 => 設定値763
という結果になりました。

おっしゃるとおりなのかもしれません。Linuxを覚えたほうがいいのかもですね・・・
その他の解説についても大変勉強になります。有難うございます。
少々英語アレルギーですが goo辞書に頼ってがんばって見ます!
本も明日早速見てきます。
229NAME IS NULL:2007/10/28(日) 14:09:32 ID:???
UTF8のテーブルを使って文書を(主に)LIKE検索するプログラムを作っています。
ひらがなとカタカナを吸収してもらえるので重宝している反面、
一方のみの結果だけでじゅうぶん、ということも多いです。
例えば人名で「アリス」と入力したとき、「〜ありすぎて」までヒットしてしまうから・・
これをSQL文など外部から制御する方法はあるでしょうか?
MySQLは4.1です。
230NAME IS NULL:2007/10/28(日) 16:43:09 ID:???
MySQL5で

id = PK
name = UNIQUE

というカラムのある果物テーブルがあるとして

REPLACE INTO 果物 SET name = りんご
を一回やると

id 1 name りんご

というレコードができるのですが、

REPLACE INTO 果物 SET name = りんご
もう一度やると

id 2 name りんご

とういうレコードができます。
これを、

id 1 name りんご

にするにはどうしたらいいですか?
231NAME IS NULL:2007/10/28(日) 16:50:37 ID:???
REPLACE は INSERT とほぼ同じように動作しますが、唯一異なる点として
UNIQUE インデックスまたは PRIMARY KEY に関して新しいレコードと同じ値が
テーブル内の以前のレコードに含まれていると、以前のレコードが削除されてから
新しいレコードが挿入されます。
232NAME IS NULL:2007/10/28(日) 23:44:39 ID:???
そもそも何を期待してるのかが不明
233NAME IS NULL:2007/10/29(月) 03:36:28 ID:???
教えてください。
テーブルにPK1、PK2、PK3という3つのPKと4つ目のフィールドFLD4があり、
PK1、PK3、FLD4の3つで構成されたインデックスIDX1があります。

select
 PK1, Max(FLD4)
From hoge
Where PK3='hogehoge'
Group By PK1

というSQLをexplainで調査すると
Using where; Using index; Using temporary; Using filesort
が現れます。

このテーブルには2000万件のレコードがあるのですが、
Using temporary; Using filesortが現れるのはレコード数のせいでしょうか?
234NAME IS NULL:2007/10/29(月) 15:14:34 ID:???
>>233
PK3 と PK1 で複合インデックス作ってみたら。
235NAME IS NULL:2007/10/29(月) 15:16:08 ID:???
>>229
分かち書きした検索用カラムを作って likeすれば。
または、セナれば。
236>>215:2007/10/30(火) 02:21:14 ID:???
ありがとうございます。
237NAME IS NULL:2007/10/30(火) 07:52:01 ID:sLI+LWeo
データ型について質問です。

数字を入れる箇所をintやfloatなどのデータ型にしているのですが、
これだとデフォルト値が必ず0になります。

0にしたくないのですが、数字用のデータ型を使っている場合は
仕方ないのでしょうか?varcharなどの文字用にするべきでしょうか?
238NAME IS NULL:2007/10/30(火) 08:00:56 ID:???
デフォルトはNULLになるけど?

mysql> create table test (c1 int primary key, c2 int);
Query OK, 0 rows affected (0.04 sec)

mysql> insert into test(c1) values (1);
Query OK, 1 row affected (0.01 sec)

mysql> select * from test;
+----+------+
| c1 | c2 |
+----+------+
| 1 | NULL |
+----+------+
1 row in set (0.00 sec)
239NAME IS NULL:2007/10/30(火) 09:31:17 ID:???
>>238
本当ですね・・・。
いつもphpMyAdminで作成していたので、出来ないと思ってました。

アドバイスありがとうございました。
240237:2007/10/30(火) 09:45:19 ID:???
すみません、もう一つ自己レスです。
phpMyAdminはPHPなわけですが、その他のPHPのプログラムでも

mysql> insert into test(c1,c2) values (1,'');

では駄目なんですね。空であっても''があると、
そのフィールドには0が入ってしまうみたいです。
241NAME IS NULL:2007/10/30(火) 09:59:21 ID:???
0解釈はDB次第だが、少なくとも '' はnullじゃないからね。
242NAME IS NULL:2007/10/30(火) 18:56:41 ID:Pyowqw9l
【簡単のため】【簡単のため】【簡単のため】
http://academy6.2ch.net/test/read.cgi/gengo/1193737465/
243229:2007/10/30(火) 20:08:04 ID:???
>>235
遅レスすみません。
分かち書きは考えてみたのですが、そうすると複合語にマッチしづらくなりませんか?
ユーザー入力も同じ仕組みで分かち書きすればいいのかもしれないんですが
文書中、わりと崩した日本語も多いことから難しそうです。
Sennaや標準のFULLTEXTは使える環境になくて・・・
SET文などでスイッチできそうな気もするんですがどうも情報見つかりません。
244NAME IS NULL:2007/10/30(火) 22:18:54 ID:???
>>243
切り替えはCOLLATEで可能なんだけど、あなたの望むようなモノが用意されてるかは調べてません。
まあこのへんを読んでちょ。
http://dev.mysql.com/doc/refman/5.1/ja/charset-mysql.html
http://dev.mysql.com/doc/refman/5.1/ja/charset-collate.html
245NAME IS NULL:2007/10/31(水) 11:02:22 ID:???
>>229
フルテキストは分かち書きして保存する。
入力文字ももちろん分かち書きする。
で、入力文字を分かち書きした区切り分クエリする。
そのとき前後の区切りも検索の対象にするのがポイント。
だけど決してパフォーマンスは出ないのでデータ数によっては注意しる。
246NAME IS NULL:2007/10/31(水) 11:44:58 ID:???
>>229
245 だけれども、質問をよく読むと テーブルの Collation を utf8_general_ci にすれば良いだけの話か。
utf8_unicode_ci になってない?
247229:2007/10/31(水) 13:15:29 ID:???
>>245-246
ありがとうございます。
テーブルのcollationはutf8_unicode_ciにしています。

COLLATEはまったく知らなかったので、昨夜>>245を見て確認してみました。
テーブル作成時にutf8_unicode_ciを指定したことをあまり意識していなくて
>>229に書かなかったのがよくなかったですm(_ _)m
utf8_unicode_ciのテーブルに対するSELECT文にCOLLATEを入れることで、
ひらがな、カタカナが分けて検索されるのを確認できました。
SELECT * FROM table_name
WHERE column_name COLLATE utf8_general_ci
LIKE '%foo%' ORDER BY ・・・(続く)

検索フォームでオプションとして切り替えたりすれば便利だなと
喜んでいたんですが、その後の挙動がちょっとおかしいみたいで・・・
次の検索でCOLLATE〜を指定しない検索をした場合でも
utf8_unicode_ciの検索に戻らないみたいだったんです。
テーブルのステータスを確認しても、ちゃんとutf8_unicode_ciなんですが・・

多分、上記の挙動はなにか別の理由というか勘違いっぽい気もしてるので
今夜さらに確認してからお返事をと思っていたんですが
>>246でちょうど指摘をいただいたので取り急ぎ書き込みました。
たいへん参考になりますm(_ _)m
248229:2007/10/31(水) 20:55:14 ID:???
先ほど確認できました。
>>247のSQL文で問題なくスイッチできました。

動作がうまくいかなかった部分については、やはり別の理由からで
検索を試した何パターンかの自作スクリプトのうちのひとつに原因があったものでした。
そのときは突っ込まずにすぐ寝てしまったので・・すみません。

いただいた回答、たいへん参考になりました。ありがとうございましたm(_ _)m
249NAME IS NULL:2007/11/01(木) 00:20:39 ID:???
limit句についてご質問があります。

あるテーブルにn件のデータがあるとして、
limit 3,n
のようなことをしたいのですが、どのようにすればよろしいでしょうか?
limitでなくても構わないのですが、、よろしくお願い致します。

250NAME IS NULL:2007/11/01(木) 01:40:04 ID:???
>>249
先頭3行を読み飛ばして続くn行を表示って意味かな。
だとしたら正しくはlimit n,3(LIMIT n OFFSET 3)で
3行とばして最後までだとlimit -1,3かと。
251>>249:2007/11/01(木) 01:50:57 ID:???
>>250
感動しました!
252NAME IS NULL:2007/11/01(木) 02:12:23 ID:???
>>250
mysqlのlimitって-1指定できないんじゃないかな?
postegar sqlだと、limit all offset 3
とか指定できると思ったけど。。
253250:2007/11/01(木) 04:45:12 ID:???
ご、ごめん、今になって確認したら俺全然でたらめ書いてるorz
limit 3,nが正しくて、-1指定もエラーになってしまった。
手元のマニュアル確認したらやはり-1指定と書かれているんだが
バージョンの違いかな。
allもだめでした。ううーん申し訳ない。
254NAME IS NULL:2007/11/01(木) 16:48:38 ID:???
手元のマニュアルって何よ?
ここでは「とにかくでかい数を入れろ」って書いてあるけど。
http://dev.mysql.com/doc/refman/5.1/ja/select.html
255>>252:2007/11/02(金) 01:43:53 ID:???
>とにかくでかい数を入れろ
リアルで笑ったw
MySQLはこういうところが、おもちゃなんだよなぁ。。。
256NAME IS NULL:2007/11/02(金) 04:03:21 ID:???
それが上限値だな
でかけりゃいいというもんじゃない
257NAME IS NULL:2007/11/02(金) 09:44:50 ID:???
上限値を指すような「SAIDAI」とか適当なエイリアスを
定義しとけば笑われずに済んだのにな
258NAME IS NULL:2007/11/02(金) 12:23:32 ID:???
SELECT文で取れるデータ自体がmax_join_sizeで
制限されているので、
このパラメータの値を入れるのが
お作法としてはいいと思う。
ちなみにデフォルト値は2^64
259NAME IS NULL:2007/11/02(金) 19:09:19 ID:???
マイナーバージョンが違うMySQLを同時に動かすにはどうすればいいんでしょうか。

my.cnfのsocketを変えても認識されないです。。。
260NAME IS NULL:2007/11/02(金) 19:39:30 ID:???
>>259
違うmy.cnf使えば?
261NAME IS NULL:2007/11/03(土) 01:12:05 ID:IOTlj/gO
質問です。

アクセスログのようなものを作る際にdatetime型のカラムと、日毎に
group化するためのdate型のカラムを用意しようかと思いました。
しかしマニュアルを見るに、ver4.1以上の場合はdatetime型のカラムに対して
date関数を使用すると日付部分のみを取り出せ、高速でgroup化もできるとのこと。

インデックスを張ったdate型カラムに対しての検索と、date関数を通した
datetime型に対する検索は等速なのでしょうか?それとも後者が早いのでしょうか?
そのあたりの仕様が記述されているページを教えて頂けると勉強になります。

よろしくお願いします。
262NAME IS NULL:2007/11/03(土) 05:46:47 ID:???
>>261
最近の若いのは実験もせずに、すぐに答えを求めようとするんだよなぁ。
ゆとり教育のせいかもしれんで、国の責任もあるんやろな。

自分が直面している課題について、どのような実験をすれば答えを導き出せるのか
計画を立てて結果を資料にまとめる。ってことをしないと社会でいらない子になるよ?

>>261は少なくとも実験してから、ココにくるべし。
263NAME IS NULL:2007/11/03(土) 06:13:01 ID:???
「ゆとり教育」っていうネーミングも失敗だったよなぁ。 いかにもアホっぽいもん。

「ものづくり大学」ってのはよさそうだけど、「ゆとり大学」ってあったら
なんかヤバそうだもんなぁw
264NAME IS NULL:2007/11/03(土) 06:26:04 ID:???
>>259
ソケットとポート番号かえればいけると思うよ。
265>>264:2007/11/03(土) 06:28:28 ID:???
捕捉。

mysqlデーモンその1:ソケットは、/tmp/mysql1.sock ポート番号は3306
mysqlデーモンその2:ソケットは、/tmp/mysql.sock ポート番号は3307

おかわり?
266>>265:2007/11/03(土) 06:30:26 ID:???
おかわりしてどうするorz

×おかわり?
◯おわかり?

267>>265:2007/11/03(土) 06:32:12 ID:???
ごめん。

デーモンその2のソケットは、mysql2.sockの間違い。

なんか、もう限界みたいなので寝るw

これもゆとり教育のせい。国が悪い。
268NAME IS NULL:2007/11/03(土) 08:39:36 ID:???
ゆとり改行
269NAME IS NULL:2007/11/03(土) 17:57:22 ID:???
>>267
UNIXドメインソケットの指定とポートの指定は別物だよ
そもそもUDSにポート番号なんてないだろ
だからこの場合、my.cnfを複数用意してクライアント側で


おっとこんな時間に来客のようだ・・・
270NAME IS NULL:2007/11/03(土) 20:33:48 ID:???
xreaのレン鯖を借りているのですが、このエラーが出て困っています。
これって、私のプログラムが悪いのでしょうか。
xreaの管理者に連絡しても対応してもらえないので、
私が悪いのかと思っているのですが、対処法がわかりません。
宜しくお願いします。

mysql_connect() [<a href='function.mysql-connect'>function.mysql-connect</a>]:
Can't connect to local MySQL server through socket '/tmp/mysql.sock'
271NAME IS NULL:2007/11/03(土) 22:02:33 ID:???
>>270
ユーザ名に@localつけてもだめか?
272>>265:2007/11/03(土) 23:07:58 ID:???
>>269
同じサーバに複数のmysqld立ち上げるんなら、ポート番号は別にする。
これ常識。
273NAME IS NULL:2007/11/03(土) 23:09:19 ID:???
>>270
mysqlデーモン立ち上がってないだけじゃね?
274NAME IS NULL:2007/11/04(日) 01:09:36 ID:AhMqLM4v
まさかとは思うんだが、
LEFT JOINの対応ってバージョン4.1から・・・?
4.0.27では使えなかったり?
275NAME IS NULL:2007/11/04(日) 06:32:23 ID:???
さすがにそれはない。
他と勘違いしてない?
276NAME IS NULL:2007/11/04(日) 08:07:06 ID:AhMqLM4v
じゃあ使い方が間違ってるのかな・・・
277NAME IS NULL:2007/11/04(日) 08:21:47 ID:???
LEFT JOINが使えないなんて、AND演算子が使えない
に匹敵する不便さだぞ。 ありえない。
278NAME IS NULL:2007/11/04(日) 08:29:01 ID:???
かなり昔はできんかったよ
279NAME IS NULL:2007/11/04(日) 14:01:34 ID:frlhQ05O
【速報】人気アニメ『涼宮ハルヒの憂鬱』テレビドラマ化! ハルヒ役は志田未来★part4
http://sports11.2ch.net/test/read.cgi/parksports/1193830877/l50
280NAME IS NULL:2007/11/04(日) 17:46:24 ID:???
MySQL4.0.27で、
「fruits」フィールドに
「りんご,バナナ,キュウリ」
みたいな複数の値を持ったレコードを入れてます。

fruitsフィールドを「りんご」や「バナナ」というキーワードで
SELECTした場合、そのレコードがヒットするように
したいのですが、
この場合、fruitsフィールドの型ってvarcharでいいんでしょうか?
enumとかでいけるかと思ってたんですが、
実際にちょっと調べてみたら、
enumとかsetは複数の値のいずれかに限定するものであって、
複数の値を格納する型ではないですよね?

また上記をスマートに実現できる構文などがあったら教えてくださいませ、
汚くなっても良いならREGEXPとか使えばできるのは想像がつきますが。
281NAME IS NULL:2007/11/04(日) 18:56:52 ID:???
select * from テーブル名
where fruits like '%バナナ%'
or
select * from テーブル名
where fruits like '%りんご%'



select * from テーブル名
where fruits in ('%バナナ%','%りんご%')

でどうだろうか?

おれ、msde使ってるんで、MYSQLのワイルドカード知らんので % じゃなくて *
かも知れないです

違ってたらごめんなさい。

282NAME IS NULL:2007/11/04(日) 18:58:13 ID:???
ごめん。型の話でしたか… スマソ
283NAME IS NULL:2007/11/04(日) 19:13:08 ID:Vy5gGImB
MySQL Control Centerっての使ってる人いますか?
かねやんMysqlAdminなどとくらべて使い勝手はどうでしょう?
また、phpMyadminを利用されている方、利用上の注意点などはどんなことがありますか?
phpMyadminってのは商用利用にも安心なツールなんでしょうか?
色んな意見を聞きたいです、よろしくお願いします
284NAME IS NULL:2007/11/04(日) 19:45:45 ID:???
>>280
値の個数が固定なら、それぞれの値の有り無しをビットで表すとか
値1 = 0x1000
値2 = 0x0100
値3 = 0x0010
値4 = 0x0001
285NAME IS NULL:2007/11/04(日) 21:42:34 ID:???
>>280
enumは複数の値のうちの1個だけど、setは複数の値のうちの複数個
286NAME IS NULL:2007/11/04(日) 22:12:37 ID:???
>>280
setの仕組みは>>284と同じだったかと。
287NAME IS NULL:2007/11/05(月) 02:41:12 ID:???
IN()ってやると、INで指定したもののどれかが含まれてれば良しになりますけど
指定したやつ全部が含まれてれば良しとするようなものってありませんか?
288NAME IS NULL:2007/11/05(月) 03:44:45 ID:???
それって、条件式は真になるの?
289NAME IS NULL:2007/11/05(月) 04:05:16 ID:???
>>287
数値に限れば、そんな条件あり得ない
290NAME IS NULL:2007/11/05(月) 11:09:19 ID:???
>>280

>>286 か、テーブル分離する。
291NAME IS NULL:2007/11/05(月) 12:11:38 ID:HiIC9Mcf
質問です
自動インクリメントする ID の初期値を10000にして、以降は
10001,10002,1003… としたいんですがどうしたらいいでしょう
よろしくお願いします
292NAME IS NULL:2007/11/05(月) 15:03:01 ID:???
お前ら、副問い合わせをサポートしたのは 4.1以降だぞ。
293NAME IS NULL:2007/11/05(月) 16:08:41 ID:???
>>291
http://dev.mysql.com/doc/refman/5.1/ja/alter-table.html

ALTER TABLE `table_name` auto_increment=10001
294NAME IS NULL:2007/11/05(月) 19:21:15 ID:???
MySQLはPDFとかでインストールできるマニュアルってありますか?
295NAME IS NULL:2007/11/05(月) 19:39:58 ID:???
これじゃダメなん?
http://dev.mysql.com/doc/
296NAME IS NULL:2007/11/06(火) 01:45:32 ID:1jsfWYs7
テーブルの複製ってどうしたらいいんですか?
clone_tableってのが検索したら出てきたんですが、例文が見つからないです
そもそも違うんでしょうか?
297NAME IS NULL:2007/11/06(火) 01:47:27 ID:???
>>296
ダウンプしてテキストエディタで編集して流し込む
298NAME IS NULL:2007/11/06(火) 02:08:43 ID:???
同じ構成のテーブルを create して
insert into 複製TBL select * from 元TBL;
とか
299NAME IS NULL:2007/11/06(火) 02:16:01 ID:???
>>298
それは、データの複製だろうが。市ね!
300NAME IS NULL:2007/11/06(火) 02:23:00 ID:???
質問してるくせに態度でけえな
301NAME IS NULL:2007/11/06(火) 02:34:28 ID:1jsfWYs7
いや、自分>>296だけど>>299はちがいますよ

>>297-298
どうもありがとう
かなりややこしいみたいですね、そんなことないのかな
どうしたもんか、、もう少し調べてみます
302NAME IS NULL:2007/11/06(火) 02:57:24 ID:???
>>301
つかどういうタイプの複製?
ガシガシ更新されるテーブルのリアルタイムの複製・・・レプリケーション
あるホストの現時点のテーブルを別のホストに複製・・・ダンプ&インポート
などなど
303301:2007/11/06(火) 03:10:44 ID:1jsfWYs7
>>302
ありがとうございます。ガシガシ更新されるタイプではないと思います。
フォームの記入確認のための仮登録のためのテーブルがほしくて、
本登録用のテーブルを複製したいと考えてます。テーブルも今はカラです。

それだけ考えたらデータないんだから手作業で作ればいいって話なんですが、
いずれバックアップの知識も必要と思ったので聞きました。
テーブル単位で複製とDB丸ごと複製の違いすらよくわかってないんで、
いろいろ聞きたいなと。。

>ガシガシ更新されるテーブルのリアルタイムの複製・・・レプリケーション
>あるホストの現時点のテーブルを別のホストに複製・・・ダンプ&インポート
どっちも大切そうですね
使い分けも含めて、どこかわかりやすく解説してるサイトないでしょうか 
レプリケーションて聞いたのも初めてですが…
304NAME IS NULL:2007/11/06(火) 12:01:12 ID:???
305NAME IS NULL:2007/11/06(火) 12:44:20 ID:???
>>303
ま、とりあえずググレ。または自分のレベルにあった本を嫁。
306301:2007/11/06(火) 15:40:03 ID:???
>>304
おお、ありがとうございます
よくわからないのでやっぱり本買ったほうがいいですね
>>305もサンキュ
307NAME IS NULL:2007/11/08(木) 10:17:12 ID:???
ワイルドカードで複数のDBを管理するアカウント作成方法を教えてください
例えば、aaa-aaa と aaa-bbb と aaa-ccc のDBを操作出来るようにするにはどうやったらいいのでしょう?

grant all on aaa%.* to ユーザー名@localhost identified by 'パスワード';
で作るとエラーが出て作れません。
%がワイルドカードですよね?
308NAME IS NULL:2007/11/08(木) 11:12:54 ID:???
`aaa-%`.* とか
309NAME IS NULL:2007/11/08(木) 12:41:46 ID:???
>>308
あ!
もしかして「``」が必要なんでしょうか?
自分は「''」でやっていたので駄目だったのかな。
310NAME IS NULL:2007/11/08(木) 14:44:06 ID:???
そうでした
ありがとうございました!
311NAME IS NULL:2007/11/09(金) 12:04:19 ID:VVwJql6u
drop table test;


日付と、果物名と、金額の以下のようなtableですが、
---------------------------------
create table test(
 date date,
 item varchar(255),
 money int
) charset=utf8;

insert into test(date,item,money) values('2007-01-01', '林檎', 100);
insert into test(date,item,money) values('2007-01-02', '林檎', 99);

insert into test(date,item,money) values('2007-01-01', '蜜柑', 100);
insert into test(date,item,money) values('2007-01-02', '蜜柑', 99);
---------------------------------

一番最新の日付の価格を果物ごとに知りたい場合のselectはどのようにしたら良いのでしょうか?

単純に group by item とすると 1/1 の金額が出てしまうので、order by で並び替えた後に group by できるといいのですがやはり構文エラーとなります。

どのような select文 だとできるのでしょうか?


一応、単純に考えると以下のような形は思い浮かびますがこれが最良なのでしょうか。
SELECT * FROM (SELECT date, item, money FROM test ORDER BY date desc) a GROUP BY a.item;
312NAME IS NULL:2007/11/09(金) 12:30:33 ID:???
select max(date),item from test group by item
313312:2007/11/09(金) 12:57:47 ID:???
ごめん 果物ごとの価格なのね

select test.date,test.item,test.money from test, (select max(date) as date,item from test group by item) a
where test.date = a.date and test.item = a.item;
314NAME IS NULL:2007/11/09(金) 13:10:55 ID:???
複数バージョンのmysqlをlinuxにインストールして同時に使用したいのですが、
方法などを解説しているサイトなんかがあったら教えてください。
バージョンは4.1xと5.0xを入れたいです。よろしくお願いします。
315NAME IS NULL:2007/11/09(金) 14:56:53 ID:VVwJql6u
>>313
有難う御座います。参考になります。
316314:2007/11/09(金) 15:01:42 ID:???
テンプレのFAQを足がかりにいろいろ試してみて自己解決しました。
お騒がせしました。
317NAME IS NULL:2007/11/09(金) 18:34:27 ID:???
MySQL5.1ってWin98には対応して無い?
前に4.0使ったときは98向けの管理ソフトも同梱してたはずなんだけど・・・
318NAME IS NULL:2007/11/09(金) 19:01:08 ID:???
Win9x時代って、サービスって動かせたっけ?
319NAME IS NULL:2007/11/09(金) 19:27:30 ID:???
やっぱサービスでしか動かせない?
320NAME IS NULL:2007/11/09(金) 19:38:28 ID:???
なんとか4.0探してきた…
XOOPS入れようとしただけで何故こんなに苦労を・・
321NAME IS NULL:2007/11/11(日) 00:11:18 ID:???
さくらインターネットが未だに化石のようなmysql4.02なんてバージョン使ってるから
うまく動かないサブクリエがあってはまった。
死ねよ
322NAME IS NULL:2007/11/11(日) 00:56:00 ID:???
4.1なら状況はだいぶ変わるのにねぇ。


そんなうちの仕事場は3.2。
323NAME IS NULL:2007/11/11(日) 02:05:07 ID:???
俺のPCはWin98SE
だから4.0しか使えない・・
324NAME IS NULL:2007/11/11(日) 04:51:39 ID:???
サブクリエ
325NAME IS NULL:2007/11/11(日) 05:57:52 ID:???
本来ならWin98SEなぞ最初から対応せずにステでもよかったぐらいでは
PC98とかじゃない限りLinuxでも入れたほうが幸せになれそうだ

そういえば漏れのクリエ埃まみれだぜ
326NAME IS NULL:2007/11/11(日) 11:43:48 ID:???
PC98ならFreeBSDでええやん
327NAME IS NULL:2007/11/11(日) 13:02:30 ID:???
そろそろ新しいの買えよ。
328NAME IS NULL:2007/11/11(日) 13:19:07 ID:???
>>322
3.23 ならともかく、3.2 はないだろ。
329322:2007/11/11(日) 13:32:52 ID:???
>328
あ、3.23だ。誤字すまん
330NAME IS NULL:2007/11/11(日) 16:09:05 ID:???
5000テーブルくらいあるMyISAM型DBでうまくキャッシュさせる方法はあるでしょうか?
table_cacheはデスクリプタ数の制限で頭打ちになるようでテーブルをスキャンすると
まったくヒットしなくなります。アドバイスよろしくお願いします。
331NAME IS NULL:2007/11/11(日) 19:13:40 ID:???
スレ違いだったらすいませんが、、、、

OS XPPro
MySQL 4.1.20

かねやんMySQLAdmin 1.43
サーバのキャラクタセット ->
クライアントのキャラクタセット -> sjis

となっていて日本語が正しく表示できないんですけど、
対処方法とか判る方おられませんか?

332NAME IS NULL:2007/11/11(日) 20:15:57 ID:8MXImYta
>>331
サーバのキャラクターセットがsjisではないから
333kbtUzOSLgCqw:2007/11/12(月) 01:52:15 ID:???
334NAME IS NULL:2007/11/12(月) 16:24:23 ID:???
ユニコードの対応って4.1からだったのね。
それ以前のバージョンは本当に糞だな
335NAME IS NULL:2007/11/13(火) 00:07:16 ID:???
質問させてください。datetime型やdate型のカラムを含むテーブルの更新は
どうしたらいいんですか?
create table nametable (
  namae varchar(30),
  tourokubi date
);
上記のようにして作ったテーブルにデータを入れるとき、
insert nametable values("yamada", ?);
?の部分をどうしたらいいのかわかりません。 
ためしに2000-10-10を入れたらエラーになり、20-10-10を入れたら
0000-00-00が登録されました。 アドバイスどなたかお願いします。
マニュアルも読んだんですが良くわかりませんでした。
336NAME IS NULL:2007/11/13(火) 00:08:22 ID:3kQWoYfz
あ、すみません あげさせてもらいます
337NAME IS NULL:2007/11/13(火) 02:04:05 ID:???
insert into nametable values ('yamada','2000-10-10');
insert into nametable values ('suzuki','2001-11-11');
insert into nametable values ('satou', '2002-12-12');

select * from nametable;
+--------+------------+
| namae  | tourokubi   |
+--------+------------+
| yamada | 2000-10-10  |
| suzuki  | 2001-11-11  |
| satou   | 2002-12-12  |
+--------+------------+
3 rows in set (0.00 sec)

問題ナス
338LdbDyhTGoUYCcmEFi:2007/11/13(火) 02:45:46 ID:???
339NAME IS NULL:2007/11/13(火) 04:36:27 ID:???
>>337
ありがとう '2002-12-12'というふうに、クオーテーションでくくってませんでした
解決しました
340ImjZRDaHx:2007/11/14(水) 03:33:12 ID:???
341NAME IS NULL:2007/11/14(水) 10:14:45 ID:fJXBbwnJ
今インストールするのに最適なバージョンって何ですか?
そろそろ5も枯れてきているのでしょうか?
342NAME IS NULL:2007/11/14(水) 11:28:10 ID:???
今なら5.0でしょ。場合によっては5.1でもいいかもよ。

5.0はかなり前から十分に枯れてるというか、
古いバージョンを使う理由は基本的にはないよ。
343NAME IS NULL:2007/11/15(木) 02:06:02 ID:XFrdNKef
t1とt2のテーブルに共通するIDを削除したいと思います。

DELETE FROM t1 INNER JOIN t2 ON t1.id=t2.id WHERE t1.id='test'

として、t1とt2を結合し、同じidのtestを削除しようとしたのですが、削除出来ません。
リファレンスを見ると、JOINは使えるとのことなので上記のようにしていますが、
どこがおかしいのでしょうか?ご指摘・アドバイスいただければと思います。
344NAME IS NULL:2007/11/15(木) 03:27:54 ID:???
>>342
ありがとうございました
4.1文字化け問題の記憶があって
何か新しいものへの抵抗があるんですよね…
345NAME IS NULL:2007/11/15(木) 04:19:43 ID:???
>>343

誤り
mysql> delete from t1 inner join t2 on t1.c1=2 where t1.c2=t2.c2;
ERROR 1064 (42000): You have an error in your SQL syntax; …

正解
mysql> delete t1, t2 from t1 inner join t2 on t1.c1=2 where t1.c2=t2.c2;
Query OK, 2 rows affected (0.00 sec)

変な構文
346NAME IS NULL:2007/11/15(木) 04:21:30 ID:???
ごめん間違えた

mysql> delete t1, t2 from t1 inner join t2 on t1.c2=t2.c2 where t1.c2=2;
Query OK, 2 rows affected (0.00 sec)
347NAME IS NULL:2007/11/15(木) 06:41:58 ID:???
>>344
それは老化だよ
348NAME IS NULL:2007/11/15(木) 11:10:51 ID:???
>>344
文字化けはMySQLが枯れてるかどうかの問題じゃない、ってのは分かってる?
単に3.xの時と同じ運用だと問題が起こっていた(ノウハウが溜まっていなかった)、という話。
ノウハウについてはかなり前から充分溜まってる。

ちなみに4.1を使う理由は全くないので、4.1を検討するくらいなら5.0以降を使うべき。
未だに4.0以前の知識しかない人を見かけるけど、なぜなんでしょ。
MyNAのFAQにもずいぶん前からいろいろあるのに……。啓蒙不足?
それとも書籍が腐ってるせいかねぇ。PHPと一緒なやつとかは相変わらず酷いんでしょうか。
349NAME IS NULL:2007/11/15(木) 12:01:08 ID:???
>>345-346
ありがとうございます!出来ました。
deleteの後ろに削除するテーブルを指定するんですね。
350NAME IS NULL:2007/11/15(木) 23:05:26 ID:???
>>348
4.1初期のバグやら仕様ミスを知らない?
落ち着いたのは4.1.12以降だろ。
あれを経験していれば、安易に版数変えたく無いわな。
351NAME IS NULL:2007/11/16(金) 00:35:13 ID:???
は?
あれを経験しているからこそさっさとかえるべきだろ?
352NAME IS NULL:2007/11/16(金) 00:59:28 ID:???
>>351
まあ判っているとは思えないな。w
353NAME IS NULL:2007/11/16(金) 01:17:37 ID:???
2007年に入ってから1回しかupdateしてない4.1系列よりは
ほぼMonthlyでupdateされてる5.0系列の方がいいと思うよ。

5.0はEnterpriseでサブスクリプション契約になったから
それだけ品質には気を使うようになってる。

B.1.1. Changes in MySQL 4.1.24 (Not yet released)
B.1.2. Changes in MySQL 4.1.23 (12 June 2007)

C.1.1. Release Notes for MySQL Enterprise 5.0.52 [MRU] (Not yet released)
C.1.2. Release Notes for MySQL Enterprise 5.0.50 [MRU] (19 Oct 2007)
C.1.3. Release Notes for MySQL Enterprise 5.0.48 [MRU] (27 August 2007)
C.1.4. Release Notes for MySQL Enterprise 5.0.46 [MRU] (13 July 2007)
C.1.6. Release Notes for MySQL Enterprise 5.0.44 [MRU] (21 June 2007)
C.1.7. Release Notes for MySQL Enterprise 5.0.42 [MRU] (23 May 2007)
C.1.8. Release Notes for MySQL Enterprise 5.0.40 [MRU] (17 April 2007)
C.1.9. Release Notes for MySQL Enterprise 5.0.38 [MRU] (20 March 2007)
C.1.11. Release Notes for MySQL Enterprise 5.0.36 [MRU] (20 February 2007)
C.1.12. Release Notes for MySQL Enterprise 5.0.34 [MRU] (17 January 2007)
354NAME IS NULL:2007/11/16(金) 11:07:42 ID:???
>>350
いや知ってるが文字コード云々言ってる連中の大半は3.xあたりの知識のままで
運用しようとしてるだけでしょ。
(つか当時のことを知っていれば「いまどのバージョンが安定してる?」なんて聞き方はしない)

まあエンコディング周りは鬼門だからなぁ。
サロゲートペア対応してないのが問題っていうならその通りだし、
将来対応したときに問題が起こりうるってのはそうだと思うけど。
355NAME IS NULL:2007/11/16(金) 13:24:09 ID:???
>>353
裏返せばそれだけ安定していないって事だけどなw
356NAME IS NULL:2007/11/16(金) 18:43:14 ID:???
>>355

その通り安定してないんだけど、それは4.1もいっしょだよ。
新機能でない限りほどんどのバグが4.1、5.0、5.1で共通。
5.0 Enterpriseならバグ報告すれば翌月直るけど、5.0 Community、
4.1は同じバグが長期間放置される。だから5.0 Enterpriseオススメ。

MySQL ABはEnterpriseのパッケージを契約顧客にしか配ってないけど、
結局GPLなんでミラーされてしまっている。
http://mirror.provenscaling.com/mysql/
357NAME IS NULL:2007/11/16(金) 22:46:25 ID:???
で、結局開発する時はどの環境が無難なの?
自分は昔から4.0.26だけど。
358NAME IS NULL:2007/11/16(金) 23:41:28 ID:???
stableは5.0なので、それの最新でいいでしょ。
場合によっては5.1でもいいんじゃね?
359NAME IS NULL:2007/11/17(土) 08:48:17 ID:XVlaU+5c
以下のSQL文をphpから実行しようとするとエラーになって画面が白くなります
テーブルの指定やカラム数、並びともに間違ってないのでどこがおかしいのかわかりません
誰かご意見ください お願いします
$sql = "insert into testtable values(
0,
$_SESSION['loginId'],
$_SESSION['loginPass'],
1,
$_SESSION['staffName'],
$_SESSION['sType'],
$_SESSION['name1'],
$_SESSION['name2']
);
360359:2007/11/17(土) 09:02:46 ID:XVlaU+5c
あ、ごめんなさい
); となってますが、)"; の書き間違いです またDBへの接続はうまくいっています

また、 $sql = "insert into testtable (id,loginId) values(0,"abc"); というSQL文は
ちゃんと動作しました
361NAME IS NULL:2007/11/17(土) 09:12:36 ID:???
>>359
各値がクォーテーションで囲まれていないからでは?
362NAME IS NULL:2007/11/17(土) 09:36:55 ID:???
$sql をダンプしてみりゃ一発ではないか
363NAME IS NULL:2007/11/17(土) 12:24:46 ID:???
文字列を長さ順でソートしようと考えています。
varchar に対して length(), char_length() を行うとして、
length()の場合は、文字列と一緒に格納されいているバイト数を返すだけだから高速
char_length()の場合は、マルチバイトを考慮して文字数を数えるので低速
という認識なのですがあっていますかね?
364NAME IS NULL:2007/11/17(土) 15:25:14 ID:???
>>363
多分あってるけど実測した結果を見たことは無いな。
適当に数十万レコードくらいでっちあげて試験してみたら?
レポート楽しみに待ってます。
365NAME IS NULL:2007/11/17(土) 15:46:36 ID:???
>>359

$sql = "insert into testtable values(
0,
{$_SESSION['loginId']},
{$_SESSION['loginPass']},
1,
{$_SESSION['staffName']},
{$_SESSION['sType']},
{$_SESSION['name1']},
{$_SESSION['name2']}
);

つか、MySQLじゃなくてPHPの文法エラーな
366PFPfSPoWxWorN:2007/11/17(土) 22:29:08 ID:???
Hi! Nice site! <a href=http://dthqlr.cn/beer/ >hi </a> [URL=http://dthqlr.cn/beer/ ] guys [/URL] http://dthqlr.cn/beer/
367363:2007/11/17(土) 23:58:29 ID:???
>>364
確かにやってみれば済むことですね。
今度やってみて結果書きますね。
368NAME IS NULL:2007/11/18(日) 10:21:12 ID:???
MySQL4.0のサポートっていつまで?
今年いっぱい?
369NAME IS NULL:2007/11/18(日) 22:51:32 ID:???
5.1からmyisamのデータアクセスにmmap使うオプションがあるので、
巨大なデータファイルを扱うなら5.1はかなりいいぞ。

はやくfalconでないかな。
370BvCrZSkVPu:2007/11/19(月) 12:36:49 ID:???
371NAME IS NULL:2007/11/19(月) 14:14:57 ID:pgXAP1I1
AUTO_INCREMENTでIDを自動挿入しているんですが、
あるカラムをdeleteしたらそこの番号が空白になりますよね?
一覧表示したときにIDも表示してると歯抜けになって格好悪いのですが、
IDを詰めることはできませんか?
それとも気にするべきではありませんか?
372NAME IS NULL:2007/11/19(月) 14:29:05 ID:???
気にするべきでない
ID詰めるのはちまちまupdateすりゃできるけど
他のテーブルの外部キーになっていればそれも無理
373NAME IS NULL:2007/11/19(月) 14:36:15 ID:???
削除されたものも含めて「一意」なんだ、と思うべき。
番号表示を気にしたいなら別のカラムでも作れ。
374NAME IS NULL:2007/11/19(月) 21:46:59 ID:tlX6K+Wh
一度に大量(100や200)のクエリを実行したとして
速度的な影響って出ますか?

某所で「何度も実行するべきではない」っと聞いたので
気になっているのですが、調べる術がありません。。
375NAME IS NULL:2007/11/19(月) 22:24:19 ID:???
そら少ないより多いほうが影響するでしょ。
それにクエリの内容によって影響も変わる。

例えばprimary keyによるSELECTを大量に発行してもたいしたことないし、
1回のクエリで途方もない時間がかかる可能性もあるし。

更新系のクエリかどうかによっても違うし。

つかやってみれば分かるでしょ。
376374:2007/11/20(火) 00:59:42 ID:???
>>375
ありがとうございます。とりあえずWHEREによるSELECTをしました。
元データ1万件に対してWHEREで対象となるキーを抽出してSELECT。
これをPHPを使い、50回・100回と繰り返し処理をさせました。

ローカル環境でやりましたが、特に体感速度は変わりません。
これ以上の条件でやった場合はどうなるかわかりませんが、
サーバダウンするほどでもないので、気にすること無いですね。
377NAME IS NULL:2007/11/20(火) 10:50:13 ID:???
きっと query cacheとか buffer sizeとか、explainなんて気にしないでパフォーマンスチェックしてるんだろうな。
378NAME IS NULL:2007/11/20(火) 12:32:08 ID:???
1プロセスで繰り返し実行しても分からんでしょ。
20個ぐらい多重かけないと。
379NAME IS NULL:2007/11/20(火) 15:27:11 ID:???
>>377
query cacheとか buffer sizeとかは気にすべきなの?
380NAME IS NULL:2007/11/20(火) 18:21:33 ID:???
InnoDBからMyISAMに変換するにはどうすればいいでしょうか?
MyISAMからのInnoDBへはダメとは書いていましたが、

変換しなくても、mysqlダンプしてから、
InnoDBをMyISAMにして、リストアすればいいのでしょうか?

この場合、InnoDBで使っていたゴミはどこかに残っているのでしょうか?
381NAME IS NULL:2007/11/20(火) 19:11:50 ID:???
ダンプしてdatabase作り直してリストアだろうね。
ところでゴミって例えばどんな?
382NAME IS NULL:2007/11/20(火) 19:39:01 ID:???
alter table foo type=myisam;
じゃだめなの?
383NAME IS NULL:2007/11/20(火) 19:53:50 ID:???
alter table t engine=MyISAM

じゃだめなのかね?
384380:2007/11/20(火) 20:24:55 ID:???
ダンプして、テーブルを全部削除して、
テーブルのengineとdefault charsetを目的の値にしてから、
インポートしました。by phpmyadmin

ゴミというのは、
/var/lib/mysqlにある、

ib_logfile0
ib_logfile1
ibdata

です、これはInnoDBを使ってなければ不要なのでしょうか?

alterコマンドというのがあるんですね、
勉強になります、ありがとうございました。
385rPCNKKOGk:2007/11/20(火) 21:32:04 ID:???
386UwuAdnimP:2007/11/20(火) 21:37:13 ID:???
387ETKZBETklTBU:2007/11/20(火) 21:37:51 ID:???
388QbZbkpjqiWEcVPyQSP:2007/11/20(火) 21:55:09 ID:???
389gAbBDHtiBWXT:2007/11/20(火) 21:56:20 ID:???
390NAME IS NULL:2007/11/20(火) 23:00:07 ID:???
MySQLの4.1.15です。

例えば
uriageテーブルが
uriageYMD date,
ordernum int(4),
mise int(3),
kyaku int(5),
shouhinID int(5),
kingaku int(8)

kokyakuテーブルが
mise int(3),
kyaku int(5),
kyakumei varchar(20),
kakari int(4)

salseテーブルが
mise int(3),
kakari int(4),
kakarimei varchar(20)

とあって、
uriageテーブルからmise,kyaku,uriageYMD,
kokyakuテーブルから kyakuに一致するkyakumei,kakari
を持ってくるまでは出来たのですが、それにsalseテーブル
からkokyakuテーブルのkakariに一致するkakarimeiを
持ってくるにはどうすれば良いんでしょうか?
391NAME IS NULL:2007/11/20(火) 23:52:43 ID:???
すさまじくダサいテーブル名/カラム名だな。
1. ordernum(英語)とmise(ローマ字)が混じってる
2. kokyakuテーブルのPRIMARY KEY(と思われるもの)がkyaku。普通はkokyaku側はid、uriage側はkokyaku_id。
3. salseじゃなくてsales
ってのが。
ダメSIの臭いがプンプンするぜ。

SELECT u.mise, u.kyaku, u.uriageYMD, k.kyakumei, k.kakari, s.kakarimei FROM uriage u INNER JOIN kokyaku k ON k.kyaku = u.kyaku INNER JOIN salse s ON k.kakari = s.kakari;
392NAME IS NULL:2007/11/21(水) 00:03:54 ID:???
>>390
sirimasen
393NAME IS NULL:2007/11/21(水) 00:04:51 ID:???
まぁあくまでもここに例に出す為に即興で作った名前ですから… w

何はともあれ、m(__)m です。 w
394391:2007/11/21(水) 01:01:47 ID:???
>>393
即興でこれかよ!
そっちの方がやべーYO!
395NAME IS NULL:2007/11/21(水) 02:05:40 ID:H0U/ijnh
1万件のテーブルを正規化して計3テーブルを
LEFT JOINで結合しているのですが、物凄く重いです。
ローカル環境で動作確認していますが、PCがダウンします。
やはり、件数が多いからサーバダウンするのでしょうか?
それとも、MySQLのチューニングが上手く行ってないのでしょうか?

インデックスの調節やEXPLAINをして確認しましたが、
Using filesortとUsing temporary が常に出ます。

サーバはWindowsXPでMySQL4.0.20で確認しています。
396NAME IS NULL:2007/11/21(水) 04:29:23 ID:???
AccessからMySQL(charsetはUTF-8)にODBC接続したんですけど
日本語が化けたり化けなかったりします
397NAME IS NULL:2007/11/21(水) 04:32:44 ID:88wrK5LA
>397

>MySQL4.0.20

捨てろ
398NAME IS NULL:2007/11/21(水) 09:16:19 ID:???
たかが1万件ごときでそんなに重くなるはずがない。
インデックスの付け方が悪い。show create tableさらせ。
あと397の言うとおり、4.0.20は捨てろ。
399NAME IS NULL:2007/11/21(水) 10:23:16 ID:???

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

    【 あなたのタイピングどのくらい!? 】              2007/11/21 配信

 制限時間内に表示される画像内の、数字やアルファベットを次々とタイプ入力していく。
あなたのタイプ成功率が刻々と表示されていく。また、その時々のランキングにも表示さ
れていく。都道府県別のランキングもあれば、それぞれ友達と好きなチームを作り競い
合うチーム別ランキングもあって楽しめれる!

 また、タイプが成功したものはそのまま、「 国別対抗オンラインクリックゲーム 」の日本
チームのクリック数に貢献される。数々の激戦を戦い抜いてきた日本チームも、現在は
強敵ハンガリーチームに続いて第2位となっている。タイプの練習がそのまま日本チー
ムの優勝に貢献するかも!?あなたもぜひやってみては?

参加するには各種のツールを使う方法もあるが、まずはアクセスするだけでサイトから
簡単にできる「 小町 」をお試しください。なれてきたら各種ツールを試すのも楽しい。

タイプ入力サイトその1「 小町 」
  http://f106.dyndns.org/komachi/cgi/acsupporter/supporter.cgi?m=ff

「 国別対抗オンラインクリックゲーム 」については、日本チームのオフィシャルサイトで。
  http://clickjapan.jp/

  ※上記サイトはすべて「 国別対抗オンラインクリックゲーム 」日本チームの有志の
    方達の運営で、すべて無料です。

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
400NAME IS NULL:2007/11/21(水) 11:36:47 ID:???
4.0系から4.1系に変えたら、劇的に早くなるのでしょうか?
401NAME IS NULL:2007/11/21(水) 11:39:25 ID:???
>>356
で、そのEnterpriseなVersionの正式にライセンス契約してない貧乏泥棒ユーザーが、
本家にBugReport送るのってありですか?
402395:2007/11/21(水) 12:05:39 ID:???
>>398
テーブル構成は住所録+沿線情報になりまして、
aテーブルには基本情報(user_id、pref、address)
bテーブルには会員の駅情報(user_id、ensen_id、station_id)
cテーブルには参照する駅情報(ensen、ensen_id、station、station_id)

こういう構成です。()内はフィールド名です。各1万件あります。
SELECT * FROM a LEFT JOIN b ON a.user_id=b.user_id
LEFT JOIN c ON b.station_id=c.station_id

みたいなSQLで結合しているのですが、これが非常に重いです。
インデックスは各idごとに付けています。

MySQLのバージョンは会社では4.0.20なので、合わせています。
だからすぐに捨てることは出来ないので、それが問題です。
403NAME IS NULL:2007/11/21(水) 12:40:35 ID:???
>>402
explainした?
404NAME IS NULL:2007/11/21(水) 12:45:10 ID:???
405NAME IS NULL:2007/11/21(水) 13:17:45 ID:???
>>402
そのSQLとexplainの結果をそのまま貼り付けよー
結合しているせいじゃない気がするよ
406NAME IS NULL:2007/11/21(水) 15:49:36 ID:88wrK5LA
SELECT * FROM a LEFT JOIN
(b LEFT JOIN c ON b.station_id=c.station_id)
ON a.user_id=b.user_id
407NAME IS NULL:2007/11/21(水) 16:01:19 ID:???
権限テーブルについて質問です。

したいこと -->
'hoge'と言う、root権限から、grant と mysqlデータベースについてのアクセス権のみ省いたUserを作成したい。
ちなみに、この’hoge’は、LAN内からののみアクセス可能とする(192.168.0.%)

やったこと -->
rootでloginして、
grant all on *.* to 'hoge'@'192.168.0.%' identifed by '******';
とやって、こんなUserができた。

select * from mysql.user where user = 'hoge'

Host: 192.168.0.%
User: hoge
Password: ******
Select_priv: Y
Insert_priv: Y
Update_priv: Y
Delete_priv: Y
Create_priv: Y
Drop_priv: Y
Reload_priv: Y
Shutdown_priv: Y
Process_priv: Y
File_priv: Y
Grant_priv: N
References_priv: Y
Index_priv: Y
Alter_priv: Y
Show_db_priv: Y
Super_priv: Y
Create_tmp_table_priv: Y
Lock_tables_priv: Y
Execute_priv: Y
Repl_slave_priv: Y
Repl_client_priv: Y
Create_view_priv: Y
Show_view_priv: Y
Create_routine_priv: Y
Alter_routine_priv: Y
Create_user_priv: Y
ssl_type:
ssl_cipher:
x509_issuer:
x509_subject:
max_questions: 0
max_updates: 0
max_connections: 0
max_user_connections: 0
408つづき:2007/11/21(水) 16:01:51 ID:???
で、一旦quitしてから、’hoge’で再loginしてから、
show databases; や select * from mysql.user; するとmysqlデータベースの中身が参照できる(あたりまえ。)

ここまではいいとして、ここから、再度rootでloginしなおして、

revoke all on mysql.* from 'hoge'@'192.168.0.%';
とやってみたら、こんなError
ERROR 1141 (42000): There is no such grant defined for user 'hoge' on host '192.168.0.%'

そりゃあhogeにはgrant option与えてないけど、なんで? Revokeの使い方間違ってる?

そこで、

Insert into mysql.db Values('192.168.0.%','mysql','hoge','N','N'・・・'N');
でmysql.dbテーブルに直接インサートしてみた。

select * from mysql.db where user = 'hoge':
Host: 192.168.0.%
Db: mysql
User: hoge
Select_priv: N
Insert_priv: N
Update_priv: N
Delete_priv: N
Create_priv: N
Drop_priv: N
Grant_priv: N
References_priv: N
Index_priv: N
Alter_priv: N
Create_tmp_table_priv: N
Lock_tables_priv: N
Create_view_priv: N
Show_view_priv: N
Create_routine_priv: N
Alter_routine_priv: N
Execute_priv: N

となったので、flush privileges をかけて、rootはlogout。再びhogeでログイン。
そこで、show databases や show tables from mysql をしたら、中が読めてしまう。
MySQL Serverを再起動掛けて見てもやっぱり同じ。
(これでmysql.*が読めないようにすることが目的)

これってやっぱり、最初のgrantの時に、一つ一つDbを明示して権限を与えないとダメですか。
出来れば、既存の権限から、特定のDbだけ除外したい。

実のことを言うと、BackUp用に、他のマシンから各Db、Tableの内容をdumpしたいんだけど、
例えば本番マシン内で、新たにDbが作成されたりした時に、いちいちlocalコンソールからloginして、
増えたDbの分だけgrantしたり、消去されたDbについてRevorkeしたりすんのが煩雑なのと、
DBをフルダンプした時に、mysqlデータベース内の権限テーブルまで吐いてしまうのを回避したい。
409NAME IS NULL:2007/11/21(水) 16:36:37 ID:???
>>401

バグだって切り分けができてるなら
http://bugs.mysql.com/ へのレポートしてOK。
Enterpriseのソースはbitkeeperにも置いてあるから、
別に入手元は問われないよ。
対応はベストエフォートだけど、これはしょうがない。

契約顧客は専用のサポートサイトがあって、
そちらにレポートするときちんと担当者がアサインされて
障害の切り分けから直すところまでつきあってくれる。
410NAME IS NULL:2007/11/21(水) 16:52:40 ID:???
>>407
なげーよ。
411409:2007/11/21(水) 16:52:48 ID:???
BitKeeperはこちら。
http://mysql.bkbits.net/

ちなみに、しつこくバグレポートしてると、
そのうちMySQL Quality Contributorとして認定してくれます。
MySQL Quality Contributorになると
MySQL Enterpriseのライセンスがタダでもらえます。
412NAME IS NULL:2007/11/21(水) 17:10:19 ID:???
Revokeの使い方間違ってる
413NAME IS NULL:2007/11/21(水) 17:18:33 ID:???
>>407
grant usage on mysql.* to 'hoge'@'192.168.0.%' identifed by '******';
grant all on *.* to 'hoge'@'192.168.0.%';
414NAME IS NULL:2007/11/21(水) 17:28:41 ID:???
mysqld の起動時、すべての権限がメモリに読み込まれます。
データベース権限、テーブル権限、およびカラム権限はすぐに反映されますが、
ユーザレベルの権限はユーザが次回接続したときに有効となります。
GRANT または REVOKE によって行われた権限テーブルへの変更については、サーバは即座に認識します。
INSERT、UPDATE などを使って手動で権限テーブルを変更した場合、
FLUSH PRIVILEGES ステートメントまたは mysqladmin flush-privileges を実行して
サーバに権限テーブルを再読み込みさせる必要があります。
See 項4.4.3. 「権限の変更はいつ反映されるか」。
415NAME IS NULL:2007/11/21(水) 18:00:46 ID:???
>>406 >>407
権限テーブルについて自分の理解してるところを書くよ。間違ってたらごめん

> grant all on *.* to 'hoge'@'192.168.0.%' identifed by '******';
ここで設定した権限(グローバルレベルの権限)は mysql.user に記述される。
ここまではいいとして、

> revoke all on mysql.* from 'hoge'@'192.168.0.%';
ここでは設定していないデータベースレベルの権限( mysql.db に記述される)を剥奪しようとしている。
だから
> ERROR 1141 (42000): There is no such grant defined for user 'hoge' ...
となる。これは grant all on *.* した時点で mysql.db を覗いてみればわかる。

肝心なのは MySQL が各ユーザの権限を算出するにあたって
mysql.user, mysql.db などの記述を短絡的にチェックしているということ。
もし mysql.user をチェックして、そのユーザの権限に関する記述があれば( Y なら)
mysql.db 以降はチェックされない。

> これってやっぱり、最初のgrantの時に、一つ一つDbを明示して権限を与えないとダメですか。
そうするのがいいと思うけど、mysql.db を直接いじって flush すればいけると思う。
その辺は詳しい人のレスを待ったほうがいいかと。
416NAME IS NULL:2007/11/21(水) 18:01:30 ID:???
ごめんアンカミス。>>407, >>408
417407,408:2007/11/21(水) 19:46:21 ID:???
いろいろとレスサンクス。

>>414
上にも書いてあると思うけど、flush privilegesは何回もしてる。
mysqldの再起動もやった。

>>412,415
Revorkの使い方間違ってるのは理解した。
(ってか今までは、ほとんど delete from mysql.user where user='***' で一旦削除してから、あらたにgrantしてた。)

>>413
上の行のクエリで、mysql.userの*_privが全部'N'のhogeができあがった。
でも、そこから下の行のクエリを書けたら、*_privが全部(grant_priv以外)’Y’になった。
で、flush privileges(念のため)を掛けてから、hogeで再ログインして、
show databases と show tables from mysql でやっぱりmysql.の中身が読めてしまう。

ちなみに、この時(上の行の前、後、下の行の後のいつでも)
select * from mysql.db where user='hoge'; で Enpty set が返ってくる(つまりHitなし)
select * from mysql.db where db='mysql'でも Enpty set。

ちなみに、grant all on my_db1.* to 'piyo'@'192.168.%' identifed by '******'; で作ったUserでloginして
show databases; したら、ちゃんと infomation_schemaとmy_db1しか表示されないし、
show tables from mysql; だと、Access denied for user 'piyo'.... となる(期待した動作)
select * from mysql.db where user='piyo' で、db権限テーブルには’piyo’がちゃんと登録されてる。

う〜ん、デフォルトが’Y’で指定したのみ’N’ってのは、できないのかなあ〜。
418395:2007/11/21(水) 20:09:50 ID:???
>>405
とりあえず、EXPLAINは以下の通りです。
長いですけど、絶えずUsing index; Using temporary; Using filesortが出ます。

Array ( [0] => a [table] => a [1] => index [type] => index [2] => [possible_keys] => [3] => PRIMARY [key] => PRIMARY
[4] => 4 [key_len] => 4 [5] => [ref] => [6] => 20292 [rows] => 20292
[7] => Using index; Using temporary; Using filesort [Extra] => Using index; Using temporary; Using filesort )
Array ( [0] => b [table] => b [1] => ALL [type] => ALL [2] => user_id [possible_keys] => user_id
[3] => [key] => [4] => [key_len] => [5] => [ref] => [6] => 4 [rows] => 4 [7] => [Extra] => )
Array ( [0] => c [table] => c [1] => ref [type] => ref [2] => station_id [possible_keys] => station_id
[3] => station_id [key] => station_id [4] => 4 [key_len] => 4 [5] => b.station_id [ref] => b.station_id
[6] => 1 [rows] => 1 [7] => [Extra] => )
419NAME IS NULL:2007/11/21(水) 20:35:32 ID:???
オレって実際には全カラムは必要ない時にも select * でクエリしちゃったりする。
一般的にこれってやっぱ無駄というか、パフォーマンスに影響するのかな。
簡単なテストでは大差なかった。
テーブルの型やドライバとかに影響しそうだけど、10個中9個取るときも必要な
カラムを羅列すべきだと思う?
420NAME IS NULL:2007/11/21(水) 20:43:16 ID:???
インデックスが作ってあって、そのインデックスの列だけSELECTする場合、

SELECT * ⇒ インデックスとテーブルにアクセスする
SELECT [必要な列のみ] ⇒ インデックスのみアクセスする

となるので性能にずいぶん影響が出るよ。

あとは通信量が違う
421NAME IS NULL:2007/11/21(水) 21:52:53 ID:???
>>419
羅列するべき。 メリットなんてSQLで手抜ける ってぐらいじゃない。
デバッグ時は * で開発進める場合もあるけど、必ず仕上げ段階で
カラムを絞りますよ。
422419:2007/11/21(水) 22:26:02 ID:4Hr0oFqs
>>420
>>421
ありがと。これからはちゃんと羅列するようにしまっす。
423NAME IS NULL:2007/11/21(水) 23:12:08 ID:???
>>418
これは何かの嫌がらせか……
人間が読める形にしてよ。
424NAME IS NULL:2007/11/21(水) 23:54:00 ID:???
select hoge1.fuga, hoge1.hage, hoge2.fuga, hoge2.hage
from hoge as hoge1 left join hoge as hoge2 on hoge2.fuga = hoge1.fuga
みたいなことってよくする?
425NAME IS NULL:2007/11/22(木) 00:44:25 ID:???
left join意味なくね?
fuga列同士の比較だから、片方だけnullってケースにならない
426407,408:2007/11/22(木) 04:21:02 ID:???
>>レスくれた方々
色々なヒントをありがとう。

たぶんできた。

grant usage on *.* to 'hoge'@'192,168.0.%' identified by '******';
これで、mysql.userに*_privが全NのUserができる。この時点で、まだmysql.dbにはなにも追加されてない。

Insert into mysql.db (`Host`,`Db`,`User`) Values('192.168.0.%','mysql','hoge');
これで、mysql.dbにUser:hoge,db:mysql,*_priv:Nのレコードが追加される。

Insert into mysql.db Values('192.168.0.%','mysql','hoge','Y','Y','Y'・・・'Y');
これで、mysql.dbにUser:hoge,db:%,*_priv:Yのレコードが追加される。(つまりUser:hogeのレコードが二件存在する)

すかさず、flush privilegesで権限テーブルをflushして、hogeで再ログインすると・・・、

ついに期待通りの動作確認!!。
show databases;でmysql以外のDbが一覧で返ってきて、show tables from mysqlだと、Access denied。
とにかくhogeからはmysql Dbが完全に遮断できた。
この時に、別のターミナルからログインして、新しくDbやTableを作成しても、すかさずhoge側から参照可能。

Manualの4章あたりを何度も読み返して、なんとなくだけど接続、参照時の権限のイメージみたいなが見えてきた。
>>415さんの言ってるように、最初の接続時にmysql.userテーブルを読んで、そこでアクセス権があれば
それをセットする(グローバル設定)。なければそれぞれのDb権限を読みに行って、Dbごと(あるいはTable、columnsごとに)
権限を制御している模様。

で、Db名を明示してgrantしたUserのmysql.userを覗いてみると、なんと全てのprivが’N’になってんで、もしやと思ってやってみた。
実は今までこれ知らなかった。

ManualにはUser名にはワイルドカード使えないとは書いていたけど、その他については特に記述なし。
で、ここの少し上の方のレスで、Db名には’%’が使えそうだと思って、放り込んでみたら、できた。
ワイルドカードより、完全一致のほうが強いようだ。
(バージョンや環境によって変わるかも?でも他のやりかたがあるんだったら教えて。自分にはこれ以上思いあたらん)

ちなみに、grant all on *.* to・・・ だと、mysql.userの中身を全てYに変えてしまう。
grant all on `%.*` だとsyntax error。
grant all on `%`.`*` だと Query Ok にはなるけれど、mysql.dbにはなにも追加されない。(mysql.userも変更なし)

結局 Insert into ・・・・で、たくさん’Y’を打ち込まないといけない。(これがVersionによって数が異なる)

期待通りに動作したもの
確認済み・・・4.0.26-Win32、4.0.27-Win32、5.0.37-Win32、5.0.45-Win32、5.0.45(Cent4)、5.0.50(Cent4)
これから確認・・・5.0.50-Win32、5.0.22-rpm(Cent5)、5.0.27-rpm(FC6)
4.1系、5.1系は持ってないから知らない。(これだけやってどれも期待通りに行ったから、多分大丈夫だとは思うけど・・)

とりあえず寝よう。
427NAME IS NULL:2007/11/22(木) 05:37:50 ID:???
寝るとこまでは読んだ
428NAME IS NULL:2007/11/22(木) 07:33:12 ID:v2xY2Xgx
grant usage on *.* to 'hoge'@'192,168.0.%' identified by '******';
Insert into mysql.db (`Host`,`Db`,`User`) Values('192.168.0.%','mysql','hoge');
Insert into mysql.db Values('192.168.0.%','mysql','hoge','Y','Y','Y'・・・'Y');

3行目まちがってないか
429NAME IS NULL:2007/11/22(木) 08:14:04 ID:???
>>426
おつ。ただ自分も>>428が気になった。
Host, Db, User はたしかプライマリキーだったと思うので。
できれば「期待通りの動作」をしたバージョンでの
show grants for ... と desc mysql.db を見せてくれるとうれしい。
430NAME IS NULL:2007/11/22(木) 08:28:58 ID:v2xY2Xgx
grant usage on *.* to 'hoge'@'192,168.0.%' identified by '******';
Insert into mysql.db (`Host`,`Db`,`User`) Values('192.168.0.%','mysql','hoge');
Insert into mysql.db Values('192.168.0.%','%','hoge','Y','Y','Y'・・・'Y');

の書き間違いだろうとは思ってるんだけど
一応聞いてみたんだ
431NAME IS NULL:2007/11/22(木) 10:40:57 ID:UyA449rO
OR文で「hogehoge」と「テスト」で単語検索をかけたとき
検索した本文からより単語が多い順にORDER BYで並べ替えすることってできますか?

『今日hogehogeしました。』
『hogehoge テスト』
『今日はテストがありました。』
『今日はhogehogeのテストをしました。



『今日はhogehogeのテストをしました。
『hogehoge テスト』
『今日hogehogeしました。』
『今日はテストがありました。』

のように、単語がたくさん当てはまる順に並べたいです。
432407,408:2007/11/22(木) 11:34:02 ID:???
ちょっと前まで寝てた。

>>428,429,430
!!!。おっしゃるとおり、三行目は
Insert into mysql.db Values('192.168.%','%','hoge','Y','Y','Y',・・・'Y'); のまちがいでした。
>>426のクエリなら、せっかく’N’にした`mysql`での権限を、’Y’にしてしまう。

で、show grants for 'hoge'@'192.168.0.%;'の結果
GRANT USAGE ON *.* TO 'hoge'@'192.168.0.%' IDENTIFIED BY PASSWORD '******'
GRANT ALL PRIVILEGES ON `%`.* TO 'hoge'@'192.168.0.%'

desc mysql.db; (多分ズレまくりだけどかにんして・・・)
Field        | Type     | Null | Key | Default | Extra
----------------------+---------------+------+-----+---------+------
Host        | char(60)   | NO | PRI | |
Db         | char(64)   | NO | PRI | |
User        | char(16)   | NO | PRI | |
Select_priv    | enum('N','Y') | NO | | N |
Insert_priv    | enum('N','Y') | NO | | N |
Update_priv   | enum('N','Y') | NO | | N |
Delete_priv    | enum('N','Y') | NO | | N |
Create_priv    | enum('N','Y') | NO | | N |
Drop_priv     | enum('N','Y') | NO | | N |
Grant_priv     | enum('N','Y') | NO | | N |
References_priv | enum('N','Y') | NO | | N |
Index_priv     | enum('N','Y') | NO | | N |
Alter_priv     | enum('N','Y') | NO | | N |
Create_tmp_table_priv | enum('N','Y') | NO | | N |
Lock_tables_priv | enum('N','Y') | NO | | N |
Create_view_priv | enum('N','Y') | NO | | N |
Show_view_priv  | enum('N','Y') | NO | | N |
Create_routine_priv | enum('N','Y') | NO | | N |
Alter_routine_priv | enum('N','Y') | NO | | N |
Execute_priv    | enum('N','Y') | NO | | N |

Version 5.0.50-Win32 今試したけど、このVerも期待通りに動いた。
*_privの数が、4.0系で12個、5.0系で17個。多分4.1系、5.1系だとまた違うハズ・・。
433NAME IS NULL:2007/11/22(木) 13:50:12 ID:???
『今日hogehogeしました。』
『hogehoge テスト』
『hogehogeをhogehogeするテスト』
『hogehogeをhogehogeしたいんです』
『今日はテストがありました。』
『テストをhogehogeするテスト』
『今日はhogehogeのテストをしました。』

のときの出力結果は?
 
434NAME IS NULL:2007/11/22(木) 13:51:29 ID:UyA449rO
>>433
その単語が多い順です

『hogehogeをhogehogeするテスト』
『テストをhogehogeするテスト』
『今日hogehogeしました。』
『hogehoge テスト』
『hogehogeをhogehogeしたいんです』
『今日はテストがありました。』
『今日はhogehogeのテストをしました。』

みたいな感じを希望します
435NAME IS NULL:2007/11/22(木) 16:20:19 ID:Npi9B+/0
MySQL5.0で以下のsqlでエラーがでてしまいます。
どこか間違っている書き方がありましたらご指摘ください。
$table = "mytable";
$sql = "update `{$table}` "
. "set (`text1`, `text2`, `text3`) "
. "values "
. "(md5('{$d['pass'}'), '{$d['id']}', '{$d['name']}') "
. "where id = 10;";
436NAME IS NULL:2007/11/22(木) 16:27:04 ID:???
スレが違う
437NAME IS NULL:2007/11/22(木) 16:29:47 ID:???
update table set text1=hoge1, text2=hoge2, text3=hoge3 where id=10;

じゃないの?
438NAME IS NULL:2007/11/22(木) 16:36:26 ID:???
>>437さんのやりかたで正常に動作できました。
updeteではvaluesは使えないみたいですね、残念な思いです。
439NAME IS NULL:2007/11/22(木) 17:19:37 ID:???
>>434
できない。
440NAME IS NULL:2007/11/22(木) 17:44:11 ID:???
正規表現にしてマッチした回数でソートすれば出来るような気がするんだけど
441NAME IS NULL:2007/11/22(木) 18:11:40 ID:???
MySQLで正規表現使えたっけ?
442NAME IS NULL:2007/11/22(木) 18:37:22 ID:???
うん
443HXsVtIoZaClODEWe:2007/11/22(木) 19:36:13 ID:???
http://ftgmkr.cn classican mp3 downloads
444aZxcBftlZ:2007/11/22(木) 22:51:19 ID:???
http://gkinyn.cn mp3 dmusic downloads ipod
445NAME IS NULL:2007/11/22(木) 23:00:35 ID:???
>>434
おとなしくSennaとか組み込むべき。
446NAME IS NULL:2007/11/23(金) 00:59:01 ID:OYGbXtrw
すみません、質問させてください
not nullを設定してないカラムに値を指定せずinsert文を書いたんですが、登録されません。
insert into table (namae1, namae2) values(1,);  *namae2が問題のカラム
上のような形です。 values(1,1); などとしたら正常に動くんですが、
値をいれずに登録するにはどうしたらいいですか? 
自分でも調べたんですがどうもわからないのでよろしくお願いします
447NAME IS NULL:2007/11/23(金) 01:22:20 ID:???
insert into table (name1) values (1)
448NAME IS NULL:2007/11/23(金) 02:05:55 ID:OYGbXtrw
>>447
ありがとうございます
やっぱりそういう風に値の入ってるものだけに絞ってインサートするしかないんでしょうか?
そうだとすると各パラメータの値の有無ごとに振り分けが必要になって面倒な気がしますが…
449NAME IS NULL:2007/11/23(金) 03:15:05 ID:???
>>448
Insert into table (`namae1`) Valuse('1')
Insert into table (`namae3`,`namae256`) Valuse('konyaga','YamaDa!!')

これが>>446とどうちがうか理解できなければ、Manualを熟読しませう。
450449:2007/11/23(金) 03:16:38 ID:???
ごめ、アンカミス
>>446>>447の間違い
451449:2007/11/23(金) 03:19:25 ID:???
さらにごめん。いっしょだた。う〜ん寝る
452NAME IS NULL:2007/11/23(金) 05:06:51 ID:???
>>449はまだ回答はやいわ。中二病ってやつか? 質問の読解すらできてないじゃない
453NAME IS NULL:2007/11/23(金) 06:09:21 ID:???
該当のカラムが null を許容すべきかどうかが重要
許容すべきならプログラムなりSQLなりで工夫する
454446:2007/11/23(金) 06:16:11 ID:OYGbXtrw
あー、だめだ わからん、、
>>449-451 ありがとうございます しかし正直、混乱してきました
やはりカラム名-その値のセットで登録しなきゃいけないんでしょうか?
それだとフォームの必須項目以外の処理が面倒すぎるし、、 デフォルト値の
設定がおかしいのかなぁ  どなたかお暇な方ご教授お願いします
455NAME IS NULL:2007/11/23(金) 06:22:45 ID:???
webフォームの入力処理はめんどうなんだよ
456NAME IS NULL:2007/11/23(金) 07:54:13 ID:???
insert into table values ('hoge1',null);
でええやん
457YNGTpqCnKBzITK:2007/11/23(金) 09:45:27 ID:???
http://ipmnew.cn mp3 xxx hardcore sample downloads
458NAME IS NULL:2007/11/23(金) 10:49:07 ID:???
あるテーブルの生徒の成績の○と×のデータがあるのですが、
その正解率を計算するのに一回のSQL文で書くことって可能でしょうか?
今は、where文で○のcountと全体のcountを取得するSQL文を2回発行して、
phpで、その○の数÷全体の数で正解率を算出しています。

1回で書く方法がございましたら、ご教授下さい。宜しくお願いします。
459NAME IS NULL:2007/11/23(金) 11:08:26 ID:???
>>458
select a.maru / (a.maru + b.peke) from
(select count(*) as maru from table where result='○') a,
(select count(*) as peke from table where result='×') b;

でどうだ
460459:2007/11/23(金) 11:13:11 ID:???
select a.maru / b.total from
(select count(*) as maru from table where result='○') a,
(select count(*) as total from table) b;

の方がちょっと早いか
461NAME IS NULL:2007/11/23(金) 11:23:52 ID:???
>>459>>460
SQL文って入れ子に出来るんですね。
こんなやり方初めて知りました。
どうもありがとうございました。
462tWZYSkVDUmb:2007/11/23(金) 12:14:48 ID:???
http://itdvmb.cn mp3 player downloads
463XaMsLqbHC:2007/11/23(金) 19:34:57 ID:???
464NAME IS NULL:2007/11/23(金) 22:37:48 ID:???
MySQLの4.1.15だけど、テーブル作成時にcheck制約って付けること出来ないんでしたっけ?
465NAME IS NULL:2007/11/23(金) 22:49:10 ID:???
ttp://dev.mysql.com/doc/refman/4.1/ja/create-table.html
エラーにはならないけど機能してないっぽい。5.1でも未対応。


466NAME IS NULL:2007/11/23(金) 23:01:13 ID:???
>>465
即レス、thx。今日本屋で関連の本立ち読みしてアレ?って思ったんですよ。
467NAME IS NULL:2007/11/24(土) 00:20:43 ID:xMeIt7o3
バージョンごとのデータ形式の互換性ってどの程度保たれてるんですか?
たとえば同じmyisamでも、
昔はコレーションとかなかったですが今はあります
その拡張部分はどこを変えることで行われているのでしょう?
MYI,MYDは同じで、frmの属性を増やしていくっていう感じでしょうか
468sWpPMfcqKrPzYgVZfT:2007/11/24(土) 00:48:40 ID:???
469UzCslGBvNBcBTMCPB:2007/11/24(土) 04:00:29 ID:???
http://cqiycu.cn/ legal mp3 download
470fFuIwXPUcQWmooCECS:2007/11/24(土) 09:31:45 ID:???
471NAME IS NULL:2007/11/24(土) 10:00:31 ID:???
0 rows affected, 1 warning
って出るsqlがあるんですが、この時実際の warning メッセージはどうすれば見れますか?
472NAME IS NULL:2007/11/24(土) 10:33:37 ID:???
show warnings;
473ubjKyDJBaYuzCG:2007/11/24(土) 13:28:33 ID:???
474qzYNJWeoGVesRNdpqI:2007/11/24(土) 13:33:54 ID:???
475ubAepUFBYytERgcXh:2007/11/24(土) 16:19:41 ID:???
476IIoSSgMbNe:2007/11/24(土) 17:40:41 ID:???
477RhgWRXNkjHdqHal:2007/11/25(日) 00:47:09 ID:???
http://bfsnbw.cn/mp34 free memory
478NAME IS NULL:2007/11/25(日) 03:21:11 ID:???
なんでこのスレSPAMの餌食になってんだ?
479NAME IS NULL:2007/11/25(日) 07:43:03 ID:???
俺の質問にまともに答えずに、茶化したから。
480NAME IS NULL:2007/11/25(日) 07:45:53 ID:???
なぜか、DB板の各スレが餌食になっているのだが。

>>479 俺が悪かった。もうやめてくれ。
481472:2007/11/25(日) 07:56:53 ID:???
俺ちゃんと答えたじゃないかああああ
うわああああん
482NAME IS NULL:2007/11/25(日) 11:58:35 ID:???
>>467
そんな感じだったはず。
483NAME IS NULL:2007/11/25(日) 21:43:28 ID:yRCAathj
文書内検索で、次のようなフォーム入力を受け付けるようにしたいと考えてます。
Foo or (Bar and Baz)
Foo、もしくは、BarとBazを含む文書、と考えています。
LIKE検索するとして、こうした優先順をSQL文で表現できるでしょうか?

自分のスキルでは思いつかないので、まずFooとBar and Bazをそれぞれ検索して
検索プログラム側で結果をorで絞り込む、ということでとりあえず書いてるんですが
これですと全体を2回以上検索することになるので・・・

入力例は、例えば「ビデオデッキ」と「ビデオ・デッキ」を両方ヒットさせたいようなときに
「DVDプレーヤー or (ビデオ and デッキ)」のように受け付けたいと思っています
484NAME IS NULL:2007/11/25(日) 21:48:38 ID:???
>>480
どっかに穴が開いてるんだと思う
485NAME IS NULL:2007/11/25(日) 22:20:32 ID:???
>>483
その条件式のまま、whereにlikeで書けばいいんでない?
486NAME IS NULL:2007/11/26(月) 00:21:00 ID:???
>>485
ありがとうございます。
〜WHERE column_name LIKE '%DVDプレーヤー%' OR ('%ビデオ%' AND '%デッキ%') 〜
のように書いてみました。
不勉強なもので、このようなカッコを使った書き方ができるとは知りませんでした・・
尚、マニュアル参照してみますm(_ _)m
487NAME IS NULL:2007/11/26(月) 00:35:34 ID:???
ビットテストとかは出来ますか?
488NAME IS NULL:2007/11/26(月) 01:22:20 ID:???
.cn/
をNGワードにすればいいよ
489NAME IS NULL:2007/11/26(月) 03:14:54 ID:???
490NAME IS NULL:2007/11/26(月) 20:56:37 ID:???
MySQLの文字化け酷い・・・なにこれ
491446:2007/11/26(月) 21:08:46 ID:???
>>455-456
ありがとう お礼遅れて申し訳ない
どうにか解決しました サンキューです
492NAME IS NULL:2007/11/26(月) 23:47:26 ID:???
>>490は文字コードを理解していないに違いない
493NAME IS NULL:2007/11/27(火) 00:47:50 ID:???
つきなみだけど
「文字化け」っていう言葉は本来はbit落ちとかで使うものであって
エンコード間違いのときに使う言葉じゃないんだよね
494NAME IS NULL:2007/11/27(火) 10:49:56 ID:???
なんとか金払わずGPL回避して、libmysqlを使う方法はありませんか?
495NAME IS NULL:2007/11/27(火) 11:04:01 ID:???
>>494
MySQLをやめて、俺SQLを作ればいいのでは?
496NAME IS NULL:2007/11/27(火) 15:45:19 ID:HAXaaf9d
MySQL 5.0.42を使用しているのですが、

以下のようなテーブルを作成し、レコードを登録しておいた場合に、
Where条件として、PRIMARY KEYの3フィールド(field3, field4, field6)をAND条件で指定した時、
SELECTは問題なく行えるのですが、
UPDATEとDELETEが、レコードが存在するにも関わらず、
「Rows matched: 0」と出てしまい、SQLの結果が反映されないのですが、原因とか分かりますでしょうか?

CREATE TABLE table1
( field1 date,
field2 varchar(3),
field3 varchar(11) NOT NULL,
field4 varchar(11) NOT NULL,
field5 bigint UNSIGNED,
field6 char(1) NOT NULL,
CONSTRAINT pk_table1 PRIMARY KEY (field3, field4, field6)) TYPE=InnoDB;
497NAME IS NULL:2007/11/27(火) 16:42:30 ID:???
>>494
同じプロトコルで同じ内容をしゃべる/きくようにすれば医院じゃ内科医?
498NAME IS NULL:2007/11/27(火) 16:45:13 ID:???
>>494
C++ <-> Python <-> MySQLdb <-> MySQL
こんな wrapper を書いてみたり
499NAME IS NULL:2007/11/27(火) 16:52:17 ID:???
>>496
| Warning | 1287 |
 'TYPE=storage_engine' is deprecated; use 'ENGINE=storage_engine' instead |
こんなん出たけど
500NAME IS NULL:2007/11/27(火) 17:00:25 ID:???
mysql> select * from tb1 where f3 = '12345678901';
+------------+------+-------------+-------------+----------------------+----+
| f1         | f2   | f3          | f4          | f5                   | f6 |
+------------+------+-------------+-------------+----------------------+----+
| 2007-11-27 | 234  | 12345678901 | 01234567890 | 12345678901234567890 | a  |
| 2007-11-27 | 234  | 12345678901 | 01234567890 | 12345678901234567890 | b  |
| 2007-11-27 | 234  | 12345678901 | 01234567890 | 12345678901234567890 | c  |
| 2007-11-27 | 234  | 12345678901 | 11234567890 | 12345678901234567890 | a  |
| 2007-11-27 | 234  | 12345678901 | 21234567890 | 12345678901234567890 | a  |
+------------+------+-------------+-------------+----------------------+----+
5 rows in set (0.00 sec)
mysql> update tb1 set f6 ='x' where f3 = '12345678901' and f4 = '01234567890' and f6 = 'a';
Query OK, 1 row affected (0.06 sec)
Rows matched: 1  Changed: 1  Warnings: 0
mysql> delete from tb1 where f3 = '12345678901' and f4 = '01234567890' and f6 = 'x';
Query OK, 1 row affected (0.05 sec)
501483:2007/11/27(火) 18:59:37 ID:???
すみません、先日質問させてもらった者です。WHERE節で
WHERE column_name LIKE '%DVDプレーヤー%' OR ('%ビデオ%' AND '%デッキ%')
のように式を書いて、エラーもなく動作したのですが、
その後、この記法についてマニュアルで見つけることができません・・・
ここにそれらしき記法を見つけたんですが(WHERE節の最適化の例のひとつとして)
ttp://dev.mysql.com/doc/refman/5.1/ja/where-optimizations.html

また、手探りで式を変えながら試してみると、
上記の例の場合も、エラーは出ないものの、最初のDVDプレーヤーしか対象になっていないようなんです。

該当のマニュアルページを教えていただけるとありがたいのですが・・
502NAME IS NULL:2007/11/27(火) 19:50:41 ID:???
文字コードがあってないんジャマイカ
503NAME IS NULL:2007/11/27(火) 19:51:55 ID:???
予想はしていたが
これはひどいw

WHERE column_name LIKE '%DVDプレーヤー%' OR ((column_name LIKE '%ビデオ%') AND (column_name LIKE '%デッキ%'))
504NAME IS NULL:2007/11/27(火) 20:12:28 ID:???
>>501
ttp://dev.mysql.com/doc/refman/5.1/ja/string-comparison-functions.html
like は演算子にしか見えないけど、なんで関数になってるんだろ
505NAME IS NULL:2007/11/27(火) 20:25:15 ID:???
>>500 なんでだろう・・・・自分のだとこうなる。


mysql> desc table1;
+--------+---------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------+---------------------+------+-----+---------+-------+
| field1 | date | YES | | NULL | |
| field2 | varchar(3) | YES | | NULL | |
| field3 | varchar(11) | NO | PRI | | |
| field4 | varchar(11) | NO | PRI | | |
| field5 | bigint(20) unsigned | YES | | NULL | |
| field6 | char(1) | NO | PRI | | |
+--------+---------------------+------+-----+---------+-------+
6 rows in set (0.02 sec)

mysql> select * from table1 where field3 = '00000000002' and field4 = '0' and field6 = 'N';
+------------+--------+-------------+--------+--------+--------+
| field1 | field2 | field3 | field4 | field5 | field6 |
+------------+--------+-------------+--------+--------+--------+
| 2007-11-27 | aaa | 00000000002 | 0 | 100 | N |
+------------+--------+-------------+--------+--------+--------+
1 row in set (0.00 sec)

mysql> update table1 set field2 = 'bbb' where field3 = '00000000002' and field4 = '0' and field6 = 'N';
Query OK, 0 rows affected (0.00 sec)
Rows matched: 0 Changed: 0 Warnings: 0

mysql> delete from table1 where field3 = '00000000002' and field4 = '0' and field6 = 'N';
Query OK, 0 rows affected (0.00 sec)
506483:2007/11/27(火) 20:48:24 ID:???
>>502-504
ありがとうございます。
並列のLIKE検索式に対してカッコを使用するのですね。あうっ・・
今度は結果も確認できました。
案内いただいたページも参考にさせていただきますm(_ _)m
507NAME IS NULL:2007/11/27(火) 21:04:52 ID:???
>>494
libmysqlでも何でも使ってDBにアクセスする「サーバ」を作れ。

それに接続するクライアントとしてお前のプログラムを作ればいい。
ソケット越しの連携は何をどうやってもGPLとは関係が無いからな。
そのサーバは公開義務があるけど、別にただのラッパだから
公開しても痛くも痒くもないだろ
508NAME IS NULL:2007/11/27(火) 23:17:31 ID:???
>>505
mysql> desc tb1;
+-------+---------------------+------+-----+---------+-------+
| Field | Type                | Null | Key | Default | Extra |
+-------+---------------------+------+-----+---------+-------+
| f1    | date                | YES  |     | NULL    |       |
| f2    | varchar(3)          | YES  |     | NULL    |       |
| f3    | varchar(11)         | NO   | PRI |         |       |
| f4    | varchar(11)         | NO   | PRI |         |       |
| f5    | bigint(20) unsigned | YES  |     | NULL    |       |
| f6    | char(1)             | NO   | PRI |         |       |
+-------+---------------------+------+-----+---------+-------+
6 rows in set (0.55 sec)
509NAME IS NULL:2007/11/28(水) 08:55:01 ID:???
510NAME IS NULL:2007/11/28(水) 21:34:21 ID:???
パフォーマンスを向上させるために、
複数のINSERT文を一つのマルチプルINSERT文に書き換える予定です。
ただ、SQL文が非常に長くなってしまいますが、
MYSQL5.0で、一つのSQL文の長さの制限ってどれ位でしょうか?
お願いします。
511NAME IS NULL:2007/11/28(水) 22:33:22 ID:fitDzhSE
SQLの長さに制限なんてあるの?
512NAME IS NULL:2007/11/29(木) 00:06:24 ID:???
とりあえずmax_allowed_packetで制限されてるみたいだよ。
max_allowed_packetのデフォルトは1MB。

$ ls -l long.sql
-rw-rw-r-- 1 xxxxx xxxxx 16921095 11月 29 00:04 long.sql
$ head long.sql
insert into ltest values
(default), (default), (default), (default), (default), (default), (default),
(default), (default), (default), (default), (default), (default), (default),
(default), (default), (default), (default), (default), (default), (default),
(default), (default), (default), (default), (default), (default), (default),
(default), (default), (default), (default), (default), (default), (default),
(default), (default), (default), (default), (default), (default), (default),
(default), (default), (default), (default), (default), (default), (default),
(default), (default), (default), (default), (default), (default), (default),
(default), (default), (default), (default), (default), (default), (default),
$ mysql test < long.sql
ERROR 1153 (08S01) at line 1: Got a packet bigger than 'max_allowed_packet' bytes
513NAME IS NULL:2007/11/29(木) 00:14:27 ID:???
1MBギリギリで実験。

$ ls -l long.sql
-rw-rw-r-- 1 taira taira 1048546 11月 29 00:12 long.sql

$ mysql test
Server version: 5.0.46-enterprise MySQL Enterprise Server (Commercial)
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> show variables like '%allow%';
+--------------------+---------+
| Variable_name | Value |
+--------------------+---------+
| max_allowed_packet | 1048576 |
+--------------------+---------+
1 row in set (0.00 sec)

mysql> source long.sql
Query OK, 95320 rows affected (1.53 sec)
Records: 95320 Duplicates: 0 Warnings: 0

大丈夫。
514NAME IS NULL:2007/11/29(木) 13:13:13 ID:???
>>512>>513
わざわざ、検証までして下さってお忙しい中、どうもありがとうございました。
max_allowed_packetの設定値だったんですね。ちなみに、私が使っているxreaでは8MBに設定されていました。
とても参考になりました。
どうもどうも、ありがとうございました。
515NAME IS NULL:2007/11/29(木) 21:45:50 ID:???
SELECT * FROM t INNER JOIN a ON t.aid = a.aid INNER JOIN b ON t.bid = b.bid
3つのテーブルを結合しているのですが、USINGを使って書き換え方が分かりません、、

よろしくお願いいたします
516NAME IS NULL:2007/11/29(木) 22:01:52 ID:???
>>515
何がしたいのかもう少しkwsk
517515です:2007/11/29(木) 22:18:52 ID:???
どうもすみません
テーブル2つ(t,a)だったら
SELECT * FROM t INNER JOIN a USING (aid)
のように書けたのですが、3つになったとき
SELECT * FROM t INNER JOIN a USING (aid) INNER JOIN b USING (bid)
はエラーになります

USING句を知ってシンプルに書けるなあと思い使ってみようと思いました
518NAME IS NULL:2007/11/29(木) 22:23:14 ID:???
select t.* from t, a where t.aid=a.aid;
select t.* from t, a, b where t.aid=a.aid and a.aid=b.aid;

じゃダメなの?
519NAME IS NULL:2007/11/30(金) 00:35:50 ID:???
テーブルaにbidという列があるとダメみたい。

mysql> desc t1;
+-------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| col1 | int(11) | YES | | NULL | |
| col2 | int(11) | YES | | NULL | |
+-------+---------+------+-----+---------+-------+
2 rows in set (0.00 sec)

mysql> desc t2;
+-------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| col1 | int(11) | YES | | NULL | |
| col3 | int(11) | YES | | NULL | |
+-------+---------+------+-----+---------+-------+
2 rows in set (0.00 sec)

mysql> desc t3;
+-------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| col1 | int(11) | YES | | NULL | |
| col2 | int(11) | YES | | NULL | |
+-------+---------+------+-----+---------+-------+
2 rows in set (0.00 sec)

mysql> select t1.col1 from t1 inner join t2 using (col1) inner join t3 using (co
l2);
+------+
| col1 |
+------+
| 1 |
| 2 |
+------+
2 rows in set (0.00 sec)

t2にcol2列が無い場合は、こんなかんじでちゃんと動く。
でもONで書くのが自然だと思うぞー
520NAME IS NULL:2007/11/30(金) 04:06:08 ID:???
MySQLで、

INSERT INTO `hoge_t` (`test_c`) VALUES (' ');

みたいなSQL文を実行した場合、
`test_c` に " " (半角スペース1つ) では無く、"" (文字列無し) が入ってしまいます。

これは何故でしょうか?
また、解決策はあるのでしょうか?

教えて下さい。
521NAME IS NULL:2007/11/30(金) 11:34:40 ID:???
http://dev.mysql.com/doc/refman/4.1/ja/char.html
http://dev.mysql.com/doc/refman/5.1/ja/char.html

5.1でvarcharを使えばいいんじゃね?
あるいはtinytextでも使うとか。
522NAME IS NULL:2007/11/30(金) 11:36:39 ID:???
where文を作成する時に、INとORだったら、どちらが速いでしょうか?

WHERE FIELD IN ('a', 'b', 'c')
WHERE FIELD A OR FIELD B OR FIELD C

FIELDには、indexを貼っています。
523NAME IS NULL:2007/11/30(金) 11:38:16 ID:???
>>522
ためしに、何回かクライアントで実行してみましたが、
実行するタイミングによって処理速度がちがって、
有意な差が見られないような気がしました。
524NAME IS NULL:2007/11/30(金) 13:09:58 ID:???
explain取ってみてプランが同じなら同じってことでいいと思う。
こっちで試した限りは同じだった。
525私のSQL:2007/12/01(土) 12:27:11 ID:HP5Wtz1B
初めまして。
MySQLでUpdateをしたときに思うように動作しないので質問させていただきます。

profileテーブルにsexという項目をvarchar(2)で定義しています。
UPDATE profile SET sex="きんさんぎんさん" where user_id = "00000002"
というSQLを流すと”きん”という結果がupdateされます。

通常こういった場合はエラーにならないのでしょうか。
なにか設定の問題なのでしょうか。
526NAME IS NULL:2007/12/01(土) 23:04:56 ID:???
mysql> create table ctest (c1 varchar(2));
Query OK, 0 rows affected (0.06 sec)

mysql> insert into ctest values ('abc');
Query OK, 1 row affected, 1 warning (0.00 sec)

mysql> show warnings;
+---------+------+-----------------------------------------+
| Level | Code | Message |
+---------+------+-----------------------------------------+
| Warning | 1265 | Data truncated for column 'c1' at row 1 |
+---------+------+-----------------------------------------+
1 row in set (0.00 sec)

mysql> set @@sql_mode = 'strict_all_tables';
Query OK, 0 rows affected (0.00 sec)

mysql> insert into ctest values ('def');
ERROR 1406 (22001): Data too long for column 'c1' at row 1

mysql> select * from ctest;
+------+
| c1 |
+------+
| ab |
+------+
1 row in set (0.00 sec)

mysql> update ctest set c1 = 'abc' where c1 = 'ab';
ERROR 1406 (22001): Data too long for column 'c1' at row 1
527NAME IS NULL:2007/12/02(日) 11:16:23 ID:???
528NAME IS NULL:2007/12/02(日) 12:29:29 ID:???
質問者の使用バージョンも判らんのに。
529NAME IS NULL:2007/12/02(日) 15:48:26 ID:???
んなもん、書かない方が悪い
530NAME IS NULL:2007/12/03(月) 23:59:40 ID:PJiuXVSt
answerカラムの値が「赤」「赤,青」と、2件のレコードがあるとします。

SELECT count(answer) AS cnt FROM faq WHERE answer LIKE '赤' GROUP BY answer

とした時、cntは1にしかなりません。
1つのカラムに複数の値が入っているから、集計出来ていないのだと思いますが
どういうSQLを書けばいいのでしょうか?
531NAME IS NULL:2007/12/04(火) 00:55:32 ID:???
何がしたいのかはっきりせんけど
・LIKE '%赤%'
・GROUP BY を削除
532NAME IS NULL:2007/12/04(火) 01:39:25 ID:???
>>531
%は抜けていました。すみません。

あと、GROUP BYはいらなかったんですね。
これを削除したら希望通り、件数が表示されました。
ありがとうございました。
533NAME IS NULL:2007/12/04(火) 09:35:19 ID:J4jZq34H
MySQL Server 5.0 をインストールしたのですが環境設定の、

Install As Windows Servicd
Service Name:
Include Bin Directory in Windows PATH

3つのチェック項目が現れる部分で一番下の、
Include Bin Directory in Windows PATH
以外の2つの項目が選択できません。
その後のパスワード設定は画面すら飛ばされてしまいます。

OSはWindowsMEでの起動を試みています。
どなたかMEでも起動する方法を知りませんか?
何とかMEで起動させたいのですが。
534NAME IS NULL:2007/12/04(火) 09:53:01 ID:???
ここよめ
http://dev.mysql.com/doc/refman/5.0/en/windows-installation.html

Windows 95/98/ME and versions of Windows
older than these are no longer supported.

Windows 95/98/MEおよびそれより古いバージョンの
Windowsはもうサポートされていません。
535NAME IS NULL:2007/12/04(火) 11:43:29 ID:???
>>533
非NT系Windowsにはサービスって概念がないから
それ関係の項目が表示されないだけだと思う
インストール開始時のOSチェックで蹴られないなら動く可能性はある
インストール終了したら手動でMySQLを起動/終了する方法を試してみて
ttp://dev.mysql.com/doc/refman/5.0/en/windows-start-command-line.html

まあ本当に動かないかもしれないので動いたら儲けものぐらいで
536NAME IS NULL:2007/12/04(火) 23:42:28 ID:???
MEとか久々に見たな。
537533:2007/12/05(水) 02:46:04 ID:???
あれから調べましたが、コマンドラインが起動してすぐに強制終了するので、
何かをするとか無理ですかね?
やっぱりパスワード設定出来ないと駄目なのかなぁ…
538NAME IS NULL:2007/12/05(水) 06:59:54 ID:???
> コマンドラインが起動してすぐに強制終了するので
本当に強制終了?なんらかのプログラム(mysql.exeとか)を起動後
コマンドプロンプトが一瞬だけ表示されてすぐ消えるとかじゃなくて?
文面からしてコマンドライン自体よくわかってないように見えるけど
539NAME IS NULL:2007/12/05(水) 07:11:16 ID:???
素直に.4.1以前を使った方がいいと思う(本に添付されているやつとか
540537:2007/12/05(水) 12:34:10 ID:???
>>538
それです。一瞬表示されて消えてしまいます。
お察しの通りSQLの勉強始めたばかりなのでよく分かってません…

>>539
4.1以前ならMEでも動くんですか?
それならそちらを探し出して使います。
541NAME IS NULL:2007/12/05(水) 12:58:02 ID:???
542537:2007/12/05(水) 13:40:38 ID:???
>>541
超助かります。ありがとうございました。
543NAME IS NULL:2007/12/05(水) 20:10:40 ID:???
mysql サーバーを外付けhddなどに入れて macとwindowsで共有することは出来るでしょうか?
2台のネットワークにつながっていないパソコンにhddをつないで
mysqlを持ち運ぼうとおもっています
一つのデータベースを2種類のサーバをつかって共有するという感じです
実行は別々の時間です
windowsだけならば何でもできるけど macなんで良い方法ないですか?
544NAME IS NULL:2007/12/06(木) 09:29:06 ID:???
>>543
DBをFATに作れば可能
545NAME IS NULL:2007/12/08(土) 22:42:32 ID:AP+yiBIl
すみません、お聞きします
今、スケジューラみたいのものを作っていて、
month=12&day=9 のような形でサーバに送って、それぞれまともにmonthカラムとdayカラムに
突っ込んでいます。
これを、date型に成形して、mysqlの方でもその形で1カラムにまとめたとしたら、
運営上どのような利点があるんでしょうか? 厨質問かも知れないですが、回答お願いします
検索などの速度が向上するとかあるんでしょうか、、
546NAME IS NULL:2007/12/08(土) 23:33:53 ID:???
日付型にしとくと、日付の演算が可能になるでしょ
月と日が別カラムだと、月をまたぐ計算が面倒
547545:2007/12/09(日) 00:30:25 ID:???
ありがとうございます そういう効果があるんですね
日付型の特長について、調べてみます!
548NAME IS NULL:2007/12/09(日) 18:05:35 ID:???
MySQLのデータを、一般公開できるくらいのデザインで
簡単に整理して表示するWebスクリプトはありますか?
phpMyAdminなどの管理用のユーティリティソフトは導入していますが、
・検索や優先順位付きのソートだけでよい
・ユーティリティだけにデザインが難しい
という問題があります。
スクリプトをいちから組むのはめんどくさくて…
549NAME IS NULL:2007/12/09(日) 18:20:12 ID:???
webprog板池
550NAME IS NULL:2007/12/09(日) 18:48:03 ID:???
>>549
了解です。スレ汚しすみませんでした。
551NAME IS NULL:2007/12/11(火) 00:11:12 ID:???
sage
552NAME IS NULL:2007/12/11(火) 15:07:28 ID:???
innoDBにてリレーションを組んだテーブルがあるんですが、
片一方のテーブルのデータを削除すると "foreign key constraint fails"が出ます。

ondelete cascadeをせずに、片一方のテーブルのデータを削除する方法はありますでしょうか。
553NAME IS NULL:2007/12/11(火) 19:00:59 ID:???
何のための外部キーなのだ
554NAME IS NULL:2007/12/12(水) 00:13:05 ID:???
>>552
set foreign_key_checks=0;
おすすめはしない。
555NAME IS NULL:2007/12/12(水) 02:17:14 ID:???
夜だからかちょっと混乱してるかもです…

ショッピングカートのデータベースです。
user,shopcartというテーブルがあり、それぞれ

-user
userid int(11)
name varchar(64)

-shopcart
userid int(11)
goodsid int(11)
price int(11)
accounted int(1) #0:未清算,1:清算済み

となっています。(実際はもっと複雑で違った用途ですが…)
このとき、
未清算(accounted=0)で、価格が10,000円以上(price>10000)の商品が
買い物かごに入っているユーザの名前を検索するのは
どういったSQL文を書けばいいのでしょうか。
556NAME IS NULL:2007/12/12(水) 02:36:02 ID:???
違った…これじゃすごい単純だ
SELECT name from INNER JOIN shopcart ON user.userid = shopcart.userid WHERE shopcart.price>10000 & shopcart.accounted = 0
でいけたわ

必要なのは
「未清算(accounted=0)で、価格が10,000円以上(price>10000)の商品が
買い物かごに入っている」
かつ
「清算済み(accounted=1)で、価格が10,000円以上(price>10000)の商品が
買い物かごに入っている」

ユーザの名前を検索するSQL文でした
お騒がせしてます
557NAME IS NULL:2007/12/12(水) 03:14:43 ID:???
>>556
まだおかしい
条件をよく見直すよろし
558NAME IS NULL:2007/12/12(水) 03:31:25 ID:???
priceは除いても必要な構文は同じなので除外します。
日本語で言うと
「未清算の商品と清算済みの商品がそれぞれ1点以上カートに入っているユーザの名前」となります

つまりまとめてみると

『shopcartに userid=x AND accounted=1 なレコードがあり、かつ
 shopcartに userid=x AND accounted=0 なレコードがある』
という条件を満たすuserid=xに対応するnameを求める

ということです。

ん?おかしい?
GROUP BYでもいける気もする
559NAME IS NULL:2007/12/12(水) 03:38:11 ID:???
これでどうか

select u.name from
(select distinct userid from shopcart where accounted=0 and price>=10000) a,
(select distinct userid from shopcart where accounted=1 and price>=10000) b,
user u
where a.userid=b.userid
and a.userid=u.userid;
560NAME IS NULL:2007/12/12(水) 03:40:05 ID:???
>>559
みゃー
サブクエリ(?)でしたか
未知の領域ですががんばって勉強します
ありがとうございました
561NAME IS NULL:2007/12/12(水) 04:00:45 ID:???
having を使ってうまいこと書けないかと思ったが
眠いのでネルス
562NAME IS NULL:2007/12/12(水) 21:07:36 ID:5IOTZHnS
mysqlの管理用にphpMyadminを触っています。
インストールの過程で要編集とあるconfig.inc.phpの項目が自分のpmaの
バージョンでは存在しません
自分のバージョンは2.11.3で、存在しない項目は以下のとおりです
$cfg['Servers'][$i]['user'] = '';
$cfg['Servers'][$i]['password'] = '';
$cfg['PmaAbsoluteUri'] = '';
どうしたらいいでしょう?
http://www.shiftweb.net/material/phpmyadmin/phpmyadmin.html を参考に作業してます

ここで質問していいのか不安でしたがお尋ねしました お願いします
563NAME IS NULL:2007/12/12(水) 21:41:40 ID:???
MySQLのばーじょn
564NAME IS NULL:2007/12/12(水) 23:08:20 ID:???
Mysql administratorでUTF-8で保存した日本語が文字化けるんだけど、対応してない?
MySQLは5です。
565NAME IS NULL:2007/12/12(水) 23:18:42 ID:???
>>562
そのページは phpMyAdmin 2.5.6 向けに書かれているみたいだから
書かれている通りに作業を進めていってもうまくいかないと思うよ。
(認証メソッドもクッキー認証のままだろうし)

面倒くさいかもしれないけど、設定ファイルに書かれている項目を
一つひとつ理解しながら進めるのがいいと思う。
あるいは最新版にも使えそうな別の解説ページを探すとか。
566NAME IS NULL:2007/12/12(水) 23:45:56 ID:???
>>565
そうみたいですね
2.5.6を落として入れてみたんですが、それも上手くいきませんでした。
実は壊れたマシンの中じゃ動いてたんだけど、こういうのって
上手く動作したらすぐにそのバージョンや手順をメモっておくべきなんでしょうね
失敗したなぁ;;  ありがとうございました
567NAME IS NULL:2007/12/13(木) 01:16:04 ID:???
あとそのときのバージョンのインストールパッケージ一式残しておくこと
いつまでもダウンロードできるとは限らない
568NAME IS NULL:2007/12/13(木) 10:31:56 ID:???
CPUの交換を行って、CPUの性能が上がったのに
データアクセスが遅くなりました。
CPUを交換したら、Mysqlの再インストールが必要な場合があるんでしょうか?
569NAME IS NULL:2007/12/13(木) 13:47:58 ID:???
>>568
おいおい、当たり前でしょ。システムの主要部分の構成を変えているのに、
そのままで運用する気かよ。
570NAME IS NULL:2007/12/13(木) 15:39:20 ID:???
>>569
返答ありがとうございます。
やっぱりMysqlをインストールする時にそのマシンの
構成によって何かしらの変化があるって事なんですね?
再インストールすれば大丈夫でしょうか?
素人ですいません。。。
571NAME IS NULL:2007/12/13(木) 15:42:27 ID:???
バイナリの再インストールなら変わらないんじゃないの?
572NAME IS NULL:2007/12/13(木) 18:03:30 ID:???
573NAME IS NULL:2007/12/13(木) 18:26:59 ID:???
MySQL5.0.30未満+InnoDBの環境だと、
CPUのコア数増やすと返って遅くなる場合があるよ
574NAME IS NULL:2007/12/13(木) 19:57:33 ID:???
カーネルにも依存するわな。
今度のFreeBSDはマルチコアに対して期待できるパフォーマンスを発揮するが、
LINUXだと、コアが増えるとパフォーマンスが落ちるみたいな話があるし。
575NAME IS NULL:2007/12/13(木) 20:18:52 ID:???
☆トム・クルーズについて語らう☆part3Tom Cruise [海外芸能人]
Pythonのお勉強 Part22 [プログラム]
   萌えろ!シエンナ・ギロリー    [海外芸能人]
【フィギュア】禁断の小学生バニー!「涼宮ハルヒの憂鬱 キョンの妹 バニーVer.」発売 [萌えニュース+]
海外芸能人板が在日朝鮮人に支配されてる見た感想 [海外芸能人]
576NAME IS NULL:2007/12/13(木) 20:51:13 ID:???
んで、>>569 の言いたい事は何?
577NAME IS NULL:2007/12/13(木) 21:29:08 ID:???
いえ、別に言いたいことはありません。ただ、・・・
578NAME IS NULL:2007/12/14(金) 12:32:18 ID:???
ただ単に偉そうに言って見たかっただけだろ。
579NAME IS NULL:2007/12/14(金) 20:27:54 ID:3RR5o2qv
あるデータベース内のテーブル名の一覧を取得するには、
SHOW TABLES FROM db_name;
となり、更にテーブル名が「dtb」から始まるものを同様に取得するには、
SHOW TABLES FROM db_name LIKE 'dtb%';
になると思いますが、
逆にテーブル名が「dtb」から始まるもの以外の一覧を取得するには
どのような SQL 表現となりますでしょうか?

間違っているとは分かっていながら、あえて書くと
SHOW TABLES FROM db_name NOT LIKE 'dtb%';
のような感じのことをしたいのです。
どなたかご教示ください。
580NAME IS NULL:2007/12/14(金) 21:03:55 ID:???
>>579
バージョンは?
俺んとこ、5.0.45だけど、

show tables like 'k%';

で使ってるデータベースの中からkが先頭の奴の表示が出来たけど。
581NAME IS NULL:2007/12/14(金) 21:29:17 ID:???
5.0以降なら

select TABLE_NAME
from information_schema.TABLES
where TABLE_SCHEMA = 'db_name'
and TABLE_NAME not like 'dtb%';
582580:2007/12/14(金) 21:35:14 ID:???
…以外のだったのね スマソ
583NAME IS NULL:2007/12/14(金) 22:31:47 ID:dYcjukjg
mysqlではありませんが、識者の方コメントお願いします↓

米アマゾン Webデータベース「SimpleDB」を開発
http://namidame.2ch.net/test/read.cgi/news/1197638836/l50
584NAME IS NULL:2007/12/14(金) 22:58:52 ID:???
2ちゃんねるって有料なの?
はい。有料です。
2ちゃんねる使用料
■閲覧
1スレッド 25円
■書きこみ
1レス 10
スレ立て 500円(大人の時間、ニュース速報は1000円)
混雑時は立てる事が出来ない場合がありますが、その時は課金されません
■書きこみ放題
・プラチナプラン 4800円 閲覧無料 スレ立て200円、通常3スレ/月、実況5スレ/週の無料サービス
・ゴールドプラン 3500円 閲覧無料 スレ立て半額 HOT!
払わないと、大変なことになるかもしれませんね・・・( ̄ー ̄)ニヤリ
2ちゃんねるは有料だった
ソース
http://www.geocities.jp/guide_2ch/
585579:2007/12/14(金) 23:20:12 ID:???
>>581
レスありがとうございます。
こちらの使っているものは MySQL 4.1.22-community-nt でした。
せっかく教えてもらえる機会をいただいたのに
バージョンを書くことをすっかり忘れてしまいました。
申し訳ありませんが、再度お知恵をお貸しください。
586NAME IS NULL:2007/12/15(土) 00:26:49 ID:???
>>584
後から請求来るの知らねえの?
587NAME IS NULL:2007/12/15(土) 05:46:55 ID:o7//W6yx
現在MySQL5.0.45@FreeBSD6.2(サクラの専用)を運用してるんですが、日本語にうまく対応してくれません。
具体的には、
SELECT * FROM hoge WHERE hogege='日本語';
という文を書いても何も返ってきません。

SELECT * FROM hoge WHERE id='1';
でやると返ってきます。SET NAMESやSET CHARACTER SETなども試してみましたし、default-character-setもUTF8で統一したんですが、駄目みたいです。
何が原因かわかりますか?初心者質問で申し訳ありません。
588NAME IS NULL:2007/12/15(土) 06:09:03 ID:???
select文を打つ前にset charset utf8を投げてみれ。
コマンドプロンプトでsql文を投げてるなら、PHPのmysql_queryでも試してみ。
そのテーブル自体がutf8じゃなかったりすると、ALTER TABLEで文字コードを変換する必要がある。
未確認だけど、たぶんdefault-character-set統一後にTABLEを作成する必要があるかもです。
589NAME IS NULL:2007/12/15(土) 06:13:47 ID:???
>>588
そういう押し付けがましいレスは止めろ。
5.0.45って書いているんだから、文字コードの問題じゃないだろ。

ラーメン屋の癖にイタリアン風の盛り付けをして、
フォークとスプーンで食べさせるのと一緒だろ。
分をわきまえろ。
590NAME IS NULL:2007/12/15(土) 06:15:43 ID:???
イタリア系の人はラーメンもフォークで食おうとするけどね。
591NAME IS NULL:2007/12/15(土) 07:06:54 ID:???
そういう押し付けがましいレスは止めろ。

流行ってるんですか?
592NAME IS NULL:2007/12/15(土) 07:09:30 ID:???
低脳の決まり文句です。
593NAME IS NULL:2007/12/15(土) 08:22:12 ID:???
>>589
そういうイタリア風のレスは止めろ。
594NAME IS NULL:2007/12/15(土) 08:44:51 ID:???
スパゲッティ食いに行って
箸出されるのも困るよね
595NAME IS NULL:2007/12/15(土) 08:50:23 ID:???
チャーハン注文してスプーン出てきたら、食べやすくはあるが萎える。 
596NAME IS NULL:2007/12/15(土) 10:24:38 ID:o7//W6yx
すいません。チャーハンはいつもスプーンで食べます。
set charset utf8でも駄目でした。ちなみにPHPから投げてます(コマンドからは何故か日本語入力できないので)
一応idからとってきたときにはデータはutf8で表示されており、データベースもテーブルもutf8になっていました。

日本語の問題だと思うんですが、どこをいじれば良いかわからないです。
597NAME IS NULL:2007/12/15(土) 10:41:02 ID:vWyiU39c
>>596
PHPのスクリプトはUTF-8で書かれてるの?
598NAME IS NULL:2007/12/15(土) 12:54:40 ID:???
set names utf8; も試してみて。
あと関係ありそうなシステム変数を手当たり次第ダンプすれば
解決の糸口になるかも。
show variables like 'character_set%';
show variables like 'collation%';
599NAME IS NULL:2007/12/15(土) 13:36:45 ID:???
チャーハンに付いてくるレンゲでは食べにくい。
普通の金属のスプーンなら食べやすいけど。

PHP使ってる時点でスキル低いから無理でしょ。
SJIS使えるアクセスでも使ったら?
600NAME IS NULL:2007/12/15(土) 13:38:17 ID:???
PHPで投げるのがそんなに嫌か?
適材適所だと思うんだがなぁ
601NAME IS NULL:2007/12/15(土) 13:50:21 ID:???
>>599は人口無能じゃないの?
他のスレでもこういうの見かけたことあるよ
602NAME IS NULL:2007/12/15(土) 14:04:37 ID:???
プログラム言語に何を使ってるかということと
スキルの優劣はなんら関係ないと思うんだがね
プログラム言語なんてのは、目的を達成するための
単なる道具に過ぎないわけだし
603NAME IS NULL:2007/12/15(土) 15:27:07 ID:???
アクセス、、、笑
604596:2007/12/15(土) 17:42:01 ID:o7//W6yx
これでset names utf8投げても駄目なんです。
character_set_client => sjis
character_set_connection => sjis
character_set_database=> utf8
character_set_filesystem => binary
caracter_set_results => sjis
character_set_server => utf8
character_set_system => utf8
collation_connection => sjis_japanese_ci
collation_database => utf8_general_ci
605NAME IS NULL:2007/12/15(土) 18:44:10 ID:???
そこは set names sjis じゃね?
606NAME IS NULL:2007/12/16(日) 02:08:05 ID:ZkJ63S3/
現在自宅では、WindowsXPに4.0.24を入れてテストしています。
いきなり5系にしたいのですが、phpMyAdminなどで
データベースの内容をインポートするだけで、移行出来ますでしょうか?
もしくは、作成しているPHPが動かなくなる可能性はあるのでしょうか?
607NAME IS NULL:2007/12/16(日) 02:21:15 ID:???
データが20行あるとして、

ORDER BY field ASC LIMIT 3 とすると
1行目
2行目
3行目

ORDER BY field DESC LIMIT 3 とすると
20行目
19行目
18行目

と表示されます。ですが、

18行目
19行目
20行目

と表示させる方法が分かりません。どうすればいいのでしょうか。
初歩的な質問で済みません。
608NAME IS NULL:2007/12/16(日) 02:41:58 ID:???
order by field asc limit 3 offset 17;
609NAME IS NULL:2007/12/16(日) 02:48:24 ID:???
そういや”ラスト3”って指定なかったっけ?
610NAME IS NULL:2007/12/16(日) 03:07:36 ID:???
>>609
無いよ。勝手な仕様を脳内で創出しないように。
こんど虚偽の投稿したら、偽証罪で通報するよ。
611NAME IS NULL:2007/12/16(日) 07:59:38 ID:???
なんと香ばしい発言だこと w
612NAME IS NULL:2007/12/16(日) 13:35:23 ID:???
>>608
ありがとうございます。
状況によって行数が増える(わからない)場合はどうすれば良いですか?
613NAME IS NULL:2007/12/16(日) 15:07:54 ID:???
>>612
1. DESCで取得して、逆順に表示する
2. 最初にOCUNT()する
614NAME IS NULL:2007/12/16(日) 15:08:49 ID:???
あ、COUNT()のtypoね。
615NAME IS NULL:2007/12/16(日) 15:25:36 ID:???
>>613
MySQL側ではそのような機能はないんですね。
phpを利用しているので、1.で逆順に表示することにしました。
ありがとうございました。
616NAME IS NULL:2007/12/16(日) 20:21:25 ID:???
降順に欲しいだけ取るサブクエリの結果を
さらに昇順にソートすれば?
試してないので出来ないかもしれんけど
617NAME IS NULL:2007/12/16(日) 22:08:31 ID:???
>>616
SELECT * FROM (SELECT * FROM table ORDER BY field DESC LIMIT 3) ORDER BY field ASC

できそうですね。4.0なのでテストできないですが…
618NAME IS NULL:2007/12/17(月) 01:20:54 ID:+StW6xi3
INSERTとSELECTを1文で行いたいのですがどんな方法があるでしょうか?
INSERT後にselect last_insert_id()を実行したいのですが1文で書ければと思っております・
619NAME IS NULL:2007/12/17(月) 11:11:00 ID:???
そういうプロシージャを書くとか?
620NAME IS NULL:2007/12/17(月) 11:29:27 ID:???
function hoge(hoge) {
insert into hage(hoge)values('hoge');
select last_insert_id();
}

hoge(); // ←一行
621NAME IS NULL:2007/12/17(月) 14:53:32 ID:???
日本語ってほんともうだめ
文字コードとかめんどくさ
622NAME IS NULL:2007/12/17(月) 14:58:41 ID:???
複雑なほうがエンジニアの需要も高くなるんで、それもまた良しかなと
623NAME IS NULL:2007/12/17(月) 23:20:32 ID:???
field_a, field_b, field_c, field_dというテーブルがありまして、
field_aとfield_bとfield_cをキーにしたり、field_aとfield_cをキーにしてりして、
SELECTしたりUPDATEしたりするのですが、この場合、どういう風なINDEXをはるとよいでしょうか?

案1) field_a, field_b, field_cに対して一つのINDEX
案2) field_a, field_b, field_cと、field_a, field_cとの二つのINDEX

宜しくお願いします。
624NAME IS NULL:2007/12/18(火) 00:14:48 ID:???
条件が (A,B,C) と (A,C) だけなら
(A,C,B) の index を作って (A,C,B) と (A,C) の条件にする

のがマンドクサなら案2で
625NAME IS NULL:2007/12/18(火) 01:00:09 ID:???
メール考えなきゃUTF8で統一。
メールもRFC無視してUTF8で送ってしまえば良いのだよ。8ビット目落とされても文句は言えないが。
626NAME IS NULL:2007/12/18(火) 10:53:26 ID:???
>>625
Content-Transfer-Encodingに8bitを指定してもダメなの?

ま、もうUTF8でいいと思うんだけど、携帯がなー
627NAME IS NULL:2007/12/18(火) 16:53:45 ID:???
スレ違いでごめんなさい・・・

データグリッドで1レコード複数行表示が可能なおすすめのフリーソフトってありませんか?
628NAME IS NULL:2007/12/19(水) 14:21:13 ID:???
mysqlでmy.iniとmy.cnf両方にdefault-character-set=sjisを追加しても、
create database後のstatus、ServerとDbの項目がlatin1のまま変わらない。
他のClientとConnの項目はsjisになってるんだけど、どうすればええのん?
629NAME IS NULL:2007/12/19(水) 15:09:28 ID:???
テーブル作る時、数値型のカラムに「最大表示サイズ」のオプションがありますが、
これってどういう意味があるのでしょうか?
絶対値でも桁数、バイト数でも無いし・・・
630NAME IS NULL:2007/12/19(水) 15:27:54 ID:???
>>628だけど事故解決しました。
631NAME IS NULL:2007/12/20(木) 10:59:51 ID:???
>>629
zerofillした時に関係する気がするけど確認してない。
つかドキュメント読めよ。
632NAME IS NULL:2007/12/20(木) 13:07:54 ID:???
すみません、言葉足らずでした(汗

リファレンスは読んだんですが「最大表示サイズ、最大は255」となっていて、
ためしにsmallint(3)で定義したカラムに、「1111」を入れることもできるし
selectで読むことができたので、じゃあ何の意味があるんだろう?・・・と。

zerofillを指定しない時は指定する意義は無いということでしょうか?
633NAME IS NULL:2007/12/20(木) 16:52:11 ID:???
MySQLのバージョン 5.0.45
MySQL の文字セット: UTF-8 です

phpMyadminで以下のように実行すると

CREATE TABLE `test_3`.`test` (
`test_id` INT( 11 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`name` VARCHAR( 255 ) NOT NULL ,
`name_kana` VARCHAR( 255 ) NOT NULL ,
INDEX ( `name` , `name_kana` )
) ENGINE = MYISAM CHARACTER SET utf8 COLLATE utf8_general_ci

「 #1071 - Specified key was too long; max key length is 1000 bytes 」
というエラーが出て作成できません
ググってみると原因は何となく分かったのですが
以下のように書き直したところ、正常に実行できました

CREATE TABLE `test_3`.`test` (
`test_id` INT( 11 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`name` VARCHAR( 255 ) NOT NULL ,
`name_kana` VARCHAR( 255 ) NOT NULL ,
INDEX `name` ( `name` ) ,
INDEX `name_kana` ( `name_kana` )
) ENGINE = MYISAM CHARACTER SET utf8 COLLATE utf8_general_ci

命令文としては同じ内容だと思うのですが、
実行出来る、出来ないの違いはなんなのでしょうか?
634NAME IS NULL:2007/12/20(木) 19:18:51 ID:0XfdB7ZB
携帯メールアドレスを抽出する為に
WHERE m_mail LIKE '%@.ezweb.ne.jp%'

としたのですが、@が認識されないみたいです。
どうしたらいいのでしょうか?
635NAME IS NULL:2007/12/20(木) 20:11:58 ID:???
>>633
上の例は name と name_kana の組み合わせのインデックスを作る
下の例は name, name_kana それぞれ単独のインデックスを作る

UTF-8 の char 系 index はフィールド長 * 3 だけ必要みたいで

>>634
@ の次の . が余分 とかいうオチじゃないよね?
最大 1000 バイトなので 333 文字以下にしないとエラーになる、、、みたい
データのほとんどが先頭 xxx/yyy 文字に収まるなら、INDEX(name(xxx),name_kana(yyyy))
とキーの長さを指定する手もある、、、みたい
636NAME IS NULL:2007/12/20(木) 20:12:51 ID:???
何か変だ

>>633
上の例は name と name_kana の組み合わせのインデックスを作る
下の例は name, name_kana それぞれ単独のインデックスを作る

UTF-8 の char 系 index はフィールド長 * 3 だけ必要みたいで
最大 1000 バイトなので 333 文字以下にしないとエラーになる、、、みたい
データのほとんどが先頭 xxx/yyy 文字に収まるなら、INDEX(name(xxx),name_kana(yyyy))
とキーの長さを指定する手もある、、、みたい

>>634
@ の次の . が余分 とかいうオチじゃないよね?
637NAME IS NULL:2007/12/20(木) 21:17:43 ID:???
INDEXとKEYの違いってなによ
638NAME IS NULL:2007/12/20(木) 21:33:02 ID:???
>>637
INDEX と PRIMARY KEY の違いなら
PRIMARY KEY = UNIQUE + INDEX
639NAME IS NULL:2007/12/20(木) 21:42:23 ID:???
EXPLAIN で、extraにでてくる where used; ってどういう意味?
where節があります、とかその程度の意味でいいの?
640NAME IS NULL:2007/12/20(木) 21:47:33 ID:???
>>632
リファレンスのどこを読んだの?

ttp://dev.mysql.com/doc/refman/4.1/ja/numeric-types.html
ttp://dev.mysql.com/doc/refman/5.1/ja/numeric-types.html

に書いてあるので読みましょう。

641NAME IS NULL:2007/12/21(金) 12:46:32 ID:???
mysqldumpでテーブル毎にdumpしてって、900万レコードくらいのテーブルだけdumpに失敗します。
mysqldumpで巨大なテーブルのdumpを取りたい場合どうすれば良いのでしょう?
642NAME IS NULL:2007/12/21(金) 13:05:42 ID:???
>>641
その場合は、dumpじゃなくてjumpでやればいいよ。
643641:2007/12/21(金) 13:47:02 ID:???
>>642
アドバイスありがとうございます。
おかげさまで解決しました。
644633:2007/12/21(金) 13:57:00 ID:/Pkbu7e1
>>636
組み合わせのインデックスは知りませんでした
上と下は全然違う内容だったんですね
phpMyadminのCREATE TABLEでINDEXの指定の仕方が悪かったようです…

丁寧なお答え ありがとうございました
645NAME IS NULL:2007/12/21(金) 14:54:57 ID:???
みんなEXPLAINって使わないのかね・・・ふむ
646NAME IS NULL:2007/12/21(金) 22:22:34 ID:???
質問です。
検索結果に見つかった順にシーケンス番号のようなものつけたいと思っています。

SELECT ・・・ FROM table ORDER BY ・・・
としたとき、結果セットとして、
data_no, (そのほかのカラム)
1,(そのほかのカラムの検索結果)
2,(そのほかのカラムの検索結果)
3,(そのほかのカラムの検索結果)

みたいな感じにdata_noの項目を追加したいと思っています。
どのようなSQL文で実現できるでしょうか?
647646:2007/12/21(金) 22:29:04 ID:NlVp5uky
補足です。
実際にしたいことは、
INSERT INTO other_table SELECT ・・・・
のような感じなので、表示側での対処はできません。
648NAME IS NULL:2007/12/22(土) 03:02:11 ID:7IWITQTe
JOINの考え方について質問です。

aテーブルに1000レコード有り、bテーブルに10万レコードあるとします。
これをINNER JOINで結合すると、

実質1000×100000=1億レコード

となるのでしょうか?上記のような結合をすると、インデックスを付けても
凄く重いので、実際は物凄いレコード数になっているのかな?と思ってます。

649NAME IS NULL:2007/12/22(土) 03:56:11 ID:???
結合条件が一つもなければ1億になる。
けど普通はリレーションがあるからそんなことにはならない。

たとえばaテーブルが注文テーブルで、bテーブルが注文明細テーブルなら、
bテーブル側の注文番号に正しくインデックスがついてれば
1000(注文件数)×100(注文1件あたりの明細件数)=100000レコード
になるだけ。
650NAME IS NULL:2007/12/22(土) 10:44:04 ID:???
分割insertすれば5000マンで済むよん
651NAME IS NULL:2007/12/22(土) 10:47:42 ID:???
DB接続時にmy.cnfを設定するようなやりかたなかったでしたっけ?
mysql://user:pass@localhost?my.cnf/test
みたいな
652NAME IS NULL:2007/12/22(土) 11:07:47 ID:???
>>646
other_table 側の data_no を AUTO_INCREMENT にしておくとか
653648:2007/12/22(土) 11:44:14 ID:7IWITQTe
>>649
それでもやっぱり、1000×100で10万なんですね・・。

質問したのは、住所録を作成する時、郵便局が発行している
郵便番号・住所データと結合する場合を想定していました。
あれは全部で10万レコード以上あるし。

会員住所+住所データを結合すると、もしかして>>648みたいな
考え方になると。だから極端に重くなるのでは?っと。
654NAME IS NULL:2007/12/22(土) 13:26:14 ID:???
>>653
なんか勘違いしてないか?
郵便番号と住所を結合するなら会員住所1に対して住所データ1だろ?
655NAME IS NULL:2007/12/22(土) 13:28:43 ID:???
>>653
ぐぐればいくらでも答えは有るのに。
http://oshiete1.goo.ne.jp/qa746515.html
とか。
656NAME IS NULL:2007/12/23(日) 03:12:42 ID:OaV/mejR
UNIONでテーブル同士を結合したら、かなり表示が重いです。

SELECT * FROM member_a INNER JOIN address USING(address_id)
UNION
SELECT * FROM member_b INNER JOIN address USING(address_id)
LIMIT 10

としています。INDEXもaddress_idに指定しています。
しかし、ローカルPC上で確認した時、表示に約10秒はかかります。

EXPLAINをしても特に問題ありません。
member_a,bにはそれぞれ1000レコードあり、addressには1万レコードあります。
657NAME IS NULL:2007/12/23(日) 04:25:01 ID:???
>>656
addressテーブルはインデックスきいてるってことだから、
1万だろうが1000万だろうが速度差はそれほど出ないですよ。

SELECT * に時間かかってないかい? SELECTを整数の
1項目だけに絞ったら何秒になんの?
658NAME IS NULL:2007/12/23(日) 04:35:04 ID:???
>>656
UNIONは暗黙的にソートするから
内部的にmember_a,bを全件取ってきてしまうな。
UNION ALLにするとどうなる?

UNIONが避けられないなら、my.cnfで
sort_buffer_sizeとtmp_table_sizeを増やしてみよう。
659NAME IS NULL:2007/12/23(日) 08:02:28 ID:???
ところで社保庁のデータベースって何使ってんの?
高スペクでも照合に時間かかるだろうなー。
660NAME IS NULL:2007/12/23(日) 10:08:05 ID:???
>>659
社会保険庁は、NTT系が受注開発しているから、
Oracleに決まっているだろ
661NAME IS NULL:2007/12/23(日) 11:04:16 ID:???
>>656
EXPAINの結果を張らないヤツの「問題ありません」は信用できないからなー
662NAME IS NULL:2007/12/23(日) 11:35:28 ID:???
MySQL ver4.1以降の文字コード自動変換について
イマイチ理解できない部分があります。

MySQL文字化けで調べてみると、
文字コード変換が原因なので、この機能が働かない状態にする、
というのが解決方法として紹介されていますが、
文字コードが異なった場合の補正のための機能であって、
client側の文字コードがujis、
server側の文字コードがutf8の場合、
この自動変換をoffにしたら、
ujisのデータをutf8を入れるところに放り込むことになるわけですが
問題ないのでしょうか?
(client/serverの文字コードが一致しているんであれば、
そもそも自動変換自体働かないわけで、offにする必要性もでてきませんよね?)

自動変換をoffにするんだよ、というところには多くのサイトで
言及されているのですが、結局client、serverとの
文字コードの関係性が良く理解できません。
663NAME IS NULL:2007/12/23(日) 11:40:02 ID:???
開発と照合で5000マンだっけ?>社保庁
稼ぐなぁ
664NAME IS NULL:2007/12/23(日) 11:52:30 ID:???
じゃおまいら5000マソもらってできるか?アンダーソン君
665NAME IS NULL:2007/12/23(日) 12:24:22 ID:5+xrhDuZ
質問させてください。

MySQL+PHPでWebブラウザから画像データ(約9KB)をアップロードして
その画像データをMySQLにBLOB型で登録しようとしています。

アップロードデータは以下のように処理しています。
$img = file_get_contents($_FILES["img"]["tmp_name"]);
$img = addslashes($img);
↑$imgを登録したい。

しかしINSERT文で
You have an error in your SQL syntax;
となってしまいます。

また、疑問点として
1.BLOB型で上のような画像データを登録する際にSQL文のデータ部分は
シングルクォートで囲う必要があるのか?

2.addslashesは必要か?

※ネットで調べると1.2ともに付いていたり、付いてなかったりします。


環境:CentOS5.1
    MySQL5.0.22(文字コードはSJIS)

以上よろしくお願いします。
666656:2007/12/23(日) 13:20:41 ID:???
>>657
1項目だけに絞っても大して時間が変わりません。。
とりあえずUSING(address_id) の後ろに GROUP BY id
を付けたら、半分ぐらいの秒数にはなりました。
>>658
UNION ALLにすると、余計重たくなっているような気がします。
あと、sort_buffer_sizeは1Mでtmp_table_sizeは100Mにしています。
>>661
GROUP BY idをそれぞれのSELECTに付けたら
半分ぐらいの秒数になりましたが、
[Extra] => Using temporary; Using filesort が表示されるようになりました・・。
667NAME IS NULL:2007/12/23(日) 16:36:22 ID:???
where used; ってどういう意味?
668NAME IS NULL:2007/12/23(日) 16:46:30 ID:???
ググレカス
669NAME IS NULL:2007/12/23(日) 16:49:51 ID:wHJQxIfX
質問です。
MySQL 4.1.20 と PHP 4.3.9 がインストールされている共用レンタルサーバで、
文字コードが EUC で記述されている PHP を稼動させています。
この PHP で EUC のデータベースを作成し、そこに同じく EUC で日本語データを格納しているのですが、
このデータを mysqldump にてダンプする際に起きる文字化けに悩まされています。
現在の MySQL の文字コード設定は以下のようになっています。

character_set_client = utf8
character_set_connection = utf8
character_set_database = ujis
character_set_results = utf8
character_set_server = latin1
character_set_system = utf8

更に my.ini もしくは .my.cnf は使用できず、データベースも EUC から UTF8 などに
変更することができない状況下となっています。
この環境下で文字化けさせずに mysqldump でデータをダンプさせることは可能でしょうか?

ちなみに mysqldump に--default-character-set=(色々な文字セット名や binary など)、
--skip-set-charset などのオプションを付加してみましたが失敗に終わりました。
どなたかご教示ください。よろしくお願いします。
670NAME IS NULL:2007/12/23(日) 17:06:11 ID:???
どうして、MySQLでは ORDER BY で複数の要素を指定すると
インデックスが効かなくなってしまうのでしょうか?
プログラマの能力に限界があるということですか?
671NAME IS NULL:2007/12/23(日) 22:55:18 ID:???
>>665
Prepared Statement
672669:2007/12/24(月) 01:46:27 ID:???
>>669 への自己レスです。
mysqldump に「--compatible=mysql40 --default-character-set=latin1」
オプションをつける事で解決できました。
10日以上悩んでググってやっと解決できました。
ちなみに >>579 の質問も私ですが、
PHP を使って同様の処理を行うことで回避しました。
673667:2007/12/26(水) 00:02:45 ID:???
ググったけどわかんね
674NAME IS NULL:2007/12/26(水) 02:07:10 ID:kEQ0Ty0u
my-sqlサーバいれて起動がなぜかできないんだけどログ見てもわからない
071226 01:56:26 mysqld started
071226 1:56:26 InnoDB: Database was not shut down normally!
InnoDB: Starting crash recovery.
InnoDB: Reading tablespace information from the .ibd files...
InnoDB: Restoring possible half-written data pages from the doublewrite
InnoDB: buffer...
071226 1:56:26 InnoDB: Starting log scan based on checkpoint at
InnoDB: log sequence number 0 36808.
InnoDB: Doing recovery: scanned up to log sequence number 0 43655
071226 1:56:26 InnoDB: Starting an apply batch of log records to the database.
..
InnoDB: Progress in percents: 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 7
5 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99
InnoDB: Apply batch completed
071226 1:56:26 InnoDB: Started; log sequence number 0 43655
071226 1:56:26 [ERROR] Fatal error: Can't open and lock privilege tables: Table
'mysql.host' doesn't exist
071226 01:56:26 mysqld ended

なんかロックされてるなにかがあるみたいだけど回避する方法とかあるなら教えてくださいませ orz
675NAME IS NULL:2007/12/26(水) 04:32:24 ID:???
>>667
これ読んでも分からん?
http://dev.mysql.com/doc/refman/5.1/ja/explain.html

>>670
効くと思うけど。

>>674
InnoDBは正常
| 071226 1:56:26 [ERROR] Fatal error: Can't open and lock privilege tables: Table
'mysql.host' doesn't exist
権限テーブルが無いって書いてある。
mysql_install_dbしてないんじゃない?
676NAME IS NULL:2007/12/26(水) 09:30:54 ID:???
>>675
全文検索してもwhere usedは出てこないよ
using whereとは違うよね
677NAME IS NULL:2007/12/26(水) 10:57:54 ID:???
using whereのことじゃない?
ソースのsql/sql_select.ccを読んだが、
where usedは出てこない。
678NAME IS NULL:2007/12/26(水) 11:41:58 ID:???
>>670
5.0より前はインデックスマージしないんじゃなかったっけ?
バージョンは?
679NAME IS NULL:2007/12/26(水) 14:55:23 ID:dqOx6InY
date型とtime型を結合してdatetime型を得るにはどうすればいいでしょうか
680NAME IS NULL:2007/12/26(水) 15:05:16 ID:???
mysql> create table dt (dt datetime, d date, t time);
Query OK, 0 rows affected (0.01 sec)

mysql> insert into dt values (null, now(), now());
Query OK, 1 row affected (0.00 sec)

mysql> select * from dt;
+------+------------+----------+
| dt | d | t |
+------+------------+----------+
| NULL | 2007-12-26 | 15:00:25 |
+------+------------+----------+
1 row in set (0.00 sec)

mysql> update dt set dt = d + interval t hour_second;
Query OK, 0 rows affected (0.00 sec)
Rows matched: 1 Changed: 0 Warnings: 0

mysql> select * from dt;
+---------------------+------------+----------+
| dt | d | t |
+---------------------+------------+----------+
| 2007-12-26 15:00:25 | 2007-12-26 | 15:00:25 |
+---------------------+------------+----------+
1 row in set (0.00 sec)
681NAME IS NULL:2007/12/26(水) 15:08:53 ID:???
>>680
ありがとうございました!
682NAME IS NULL:2007/12/26(水) 15:33:56 ID:???
前からインデックスについて疑問に感じていることがあるのですが、
1,2,3,4..........と続いているindexに2を追加すると、
1,2,2,3,4.........と3以下全て並べ替えになると理解しているのですが、
そのような仕組みになっているのでしょうか?

もし、そうだとすると100万件のデータが入っているtableで、
データを追加する際に、最悪100回の並べ替え(位置をずらす処理)が発生して大変なことになると思っています。

将来膨大なデータ件数になることが予想されるtableにindexをつけるかどうかで迷っているので、
アドバイスを頂けないでしょうか?
683NAME IS NULL:2007/12/26(水) 17:10:55 ID:???
>>682
インデックスがそういう構造だと
検索にはあまり向かないだろう
単なるノベタンではなくて、挿入・削除が容易な
例えばツリー構造のようになっているのだろう
安心してインデックス張るよろし
つか張らないと遅いでしょ
684NAME IS NULL:2007/12/26(水) 17:41:21 ID:???
>>682
そのレベルだとまずbtreeについて勉強しろ。
685NAME IS NULL:2007/12/27(木) 04:10:23 ID:v5TSL/Qu
>>675
ありがとうございます。mysql_install_dbでOKでしたorz
686NAME IS NULL:2007/12/27(木) 18:05:22 ID:???
SQL文が書かれたテキストファイル(hoge.sql)をインポートしたいのですがどうすればいいでしょうか?

以下のようにやってみたんですが、エラーになります。
mysqlimport -p --local hoge hoge.sql
*hogeがデータベース名です。

mysqlimport: Error: Table 'hoge.hoge' doesn't exist, when using table: hoge

687NAME IS NULL:2007/12/27(木) 18:13:52 ID:???
mysqlimportはCSVファイルなどを流し込むツールであって、
SQLを流し込むツールではないぞ。

$ mysql hoge < hoge.sql
688NAME IS NULL:2007/12/27(木) 18:26:21 ID:???
>>687さん
即レス、ありがとうございます!
本当に助かりました
ありがとうございます
689NAME IS NULL:2007/12/27(木) 22:03:30 ID:???
MySQL 5.1 で、MyISAM をメインに使っているのですが、
稼働状態でデータのバックアップをとるときは、
マニュアルに載っている
mysqldump --all-databases
が一番早いのでしょうか?

もっと良いバックアップの方法があれば教えてください。
690NAME IS NULL:2007/12/28(金) 00:16:46 ID:???
optとかでいいんじゃ
691NAME IS NULL:2007/12/28(金) 00:52:11 ID:???
>>690
kwsk!
692NAME IS NULL:2007/12/28(金) 01:53:48 ID:???
>>691
仕方ないからyahooで調べてみた
http://www.google.com/search?q=mysqldump+opt
ここのサイトに詳しく載ってたよ
サンプルもいくつかあった
693NAME IS NULL:2007/12/28(金) 14:49:41 ID:C3g8Iqj8
>>686 >>688
昨日の俺がいたので、記念真紀子
694NAME IS NULL:2007/12/29(土) 07:39:47 ID:???
>>692
mysqldumpを使うというのは最適解なのですね。
--opt試してみます。ありがとう。
695NAME IS NULL:2007/12/29(土) 11:34:53 ID:???
MyISAMで一番速いのは
LOCK TABLES⇒FLUSH TABLES⇒ストレージやLVMのスナップショット機能
だと思う。
696NAME IS NULL:2007/12/29(土) 14:46:39 ID:gk+6HmZs
最近はじめたんですが、dateを入れるカラムって、格納する値(2007/12/30)を
いちいちsql文の中に用意してinsertなりするしかないんでしょうか?
その他のカラムが更新されたときに、自動的に日付カラムが更新されるような
仕組みってないですか?
697NAME IS NULL:2007/12/29(土) 15:42:00 ID:???
698NAME IS NULL:2007/12/29(土) 19:48:51 ID:???
>>696
あるいはtimestamp型を利用するとかかな。
699NAME IS NULL:2007/12/30(日) 02:48:15 ID:T2zYh9sT
select aaa.* from aaaINNER JOIN test_tb USING(aaa_id)
select aaa.* from aaaINNER JOIN test_tb USING(aaa_id) GROUP BY aaa.aaa_id

aaaテーブルとtest_tbにはそれぞれ3万レコード入っているとします。
上段の方を実行すると、0.1秒ぐらいで表示されるのですが、
下段を実行すると、サーバがダウンするぐらい表示に時間がかかります。

どうしてGROUPを入れるとこれだけ実行時間に差が出るのでしょうか?
700NAME IS NULL:2007/12/30(日) 05:18:06 ID:???
変更された実行計画に対して適切な索引が無いから
かなー
701NAME IS NULL:2007/12/30(日) 09:06:39 ID:???
そういうときはEXPLAINして違いを見ようぜ
702699:2007/12/30(日) 15:15:42 ID:???
理由が分かりました。結合先のtest_tbのaaa_id中に
重複した値があったのが原因のようです。

今まで勘違いしていたのですが、一意のデータが多いほど
結合時の読み込みも早いんですね。前は逆だと思ってました・・。
703NAME IS NULL:2007/12/30(日) 15:27:52 ID:???
>>697-698
ありがとう 試してみます
704NAME IS NULL:2007/12/31(月) 15:35:52 ID:5qw/Iwgf
705NAME IS NULL:2008/01/04(金) 14:05:51 ID:???
Mysql 5.0.45
alter table hogehoge change 〜 でカラムをリネームしようとすると
ERROR 1025 (HY000) Error on rename of '.\detabase\#sql-244_7' to
' .\database\hogehoge' (error: 150)

というエラーメッセージが出るんですけど、ひょっとしてプライマリキーに
なってたり外部制約に使われているカラムって名前の変更が出来ない?
706NAME IS NULL:2008/01/04(金) 23:33:10 ID:FJkIdSjB
5.1がインストールできない
5.0.1?まではなんとか入れれたのだが・・・・
ちなみにMacOSX10.4使用

同じような症状の人いる?
707NAME IS NULL:2008/01/05(土) 02:55:27 ID:???
メールサーバを管理しているのですが、
監視ログにmysqlのエラーで

Too many connections

とメールが来ました。
mysqlが外部から待ちかまえるデーモン数を少し増やして様子をみたいのですが、
どこで調整できるのでしょうか?
708707:2008/01/05(土) 03:02:23 ID:???
補足です。
バージョン5.0です。
709NAME IS NULL:2008/01/05(土) 03:08:18 ID:???
A.2.6. Too many connections エラー
MySQL に接続しようとして Too many connections エラーが発生する場合は、すでに mysqld サーバに接続している max_connections クライアントが存在しています。

デフォルト(100)より多い接続を行う場合は、max_connections 変数の値を 100 より大きくして、mysqld を再起動する必要があります。

実際は、mysqld では(max_connections+1)クライアントの接続が許可されています。最後の接続は、SUPER 特権のあるユーザ用に予約されています。
一般ユーザにこの特権を与えないことによって(一般ユーザにこの特権は必要ありません)、
この特権のある管理者はログインして、SHOW PROCESSLIST を使用して問題を見つけることができます。
See 項4.6.8.6. 「SHOW PROCESSLIST」。

MySQL 接続の最大数は、スレッドライブラリが特定のプラットフォームでどの程度まで有用であるかに依存します。
Linux または Solaris では、使用している RAM のサイズと、クライアントが何を実行しているかによって、500 ? 1000 の同時接続をサポートできます。
710707:2008/01/05(土) 03:29:23 ID:???
ありがとうございます。
早速変更して様子をみたいと思います。
思ったより、スパムの接続数が多いみたいです。
711NAME IS NULL:2008/01/05(土) 16:03:40 ID:yZZDqu/Q
誰か助けて\(^o^)/
1 - can't create/write to file 〜ってでてきてエクスポートできません

過去ログやMyNA、検索してでてきたやつやってみたけど駄目でした
ちなみに使ってるのはnavicat8です(オプション設定ファイルの場所わからない\(^o^)/
712NAME IS NULL:2008/01/05(土) 16:57:52 ID:5Gpulnqz
すいません。バカな漏れをすくってください。
以前、MySQLをインストールして、失敗し、やむなく消去して。
XAMPPをいれたんですけど。
MySQLにつなぐと。
access violation なんちゃら〜libmysql.dll〜なんちゃら
と、何回もエラーがでて、そのうち操作不能になります。
コマンドでsc delete MySQLとかやってみたり、
管理ツールとかもしてみたんですが、
なおりません。
ともだちに聞いたら、クリーンインストールしかないんじゃない
とのことなんですが。
ちょっと消しちゃまずいものもあったりするんで。
バックアップに不安感もあって、ふみきれません。
どうか、たすけてください。

あと、5日前くらいからはじめたばかりなので。
初心者すぎて、書いてることも、自分でもよくわかりきってないんで。
そのへん、ほんとうに、すみません。
713NAME IS NULL:2008/01/05(土) 17:00:41 ID:???
窓からパソコン投げれば良いと思う
714NAME IS NULL:2008/01/05(土) 17:04:38 ID:5Gpulnqz
>>713
そうとうそういう衝動おさえてますww
715NAME IS NULL:2008/01/05(土) 17:24:20 ID:???
親切な自分がいい方法を教えてあげよう。
お年玉で新しいPCを買え(w
716NAME IS NULL:2008/01/05(土) 17:34:51 ID:5Gpulnqz
>>715
ききたくなかったwwww
そのもっとも正論を、ききたくなかったww
717NAME IS NULL:2008/01/05(土) 18:05:21 ID:???
>>712
XAMPPをまずアンインストールする

次に、スタートメニューから検索を選んで
ファイルとフォルダすべて を選び、libmysql.dllを探す
見つかったlibmysql.dllは全て不要なので 全部ごみ箱に入れる

そのあと、XAMPPをもう一度インストールする



これで多分直るので、ちゃんと動いたのを確認したら
Cドライブをフォーマットして窓からPCを投げ捨てろ
718NAME IS NULL:2008/01/05(土) 20:42:54 ID:Ible2iRH
719NAME IS NULL:2008/01/05(土) 21:35:56 ID:???
mysqlでPostgreSQLの
Explain analyzeと同じような結果を得ることはできないでしょうか?

phpでSelect文の実行速度をmysqlから得たいのですが、
その方法がわかりません。
720NAME IS NULL:2008/01/06(日) 00:57:20 ID:2gK1qWP1
>>717さん。
本当に感謝します。
今、ガチで地面に頭つけて土下座しました。
これは、完全に本当です。ありがとうございます。
そして>>718さん。
すかさずのジョーク、笑わせていただきました。
ありがとうございます。
721NAME IS NULL:2008/01/06(日) 06:47:17 ID:xNMZbDGr
あるテーブルが現在100万件ほどあるのですが、
時間によっては検索・更新が遅くなります。
インデックスも貼っているのですが、
これから1000万件、2000万件と増えると限界もあるのではと思っています。

同じテーブルを複数作って運用することも考えているのですが、
どう思いますか、設計としては汚いとは思うのですが、
この方式であれば、これから増えていってもとりあえず心配はないと思っています。

ex) T_SAMPLE_1, T_SAMPL_2, T_SAMPL_3.... (同じ構造のテーブルを適宜増やすやり方です)
722NAME IS NULL:2008/01/06(日) 10:46:00 ID:???
そもそもの設計が間違ってるんじゃね? としかいいようがない。
EXPLAINしてみた?

ちなみにインデックス張ってると更新は重くなるよ。
723NAME IS NULL:2008/01/06(日) 13:42:15 ID:???
インデクスがB-Treeなことを考えると、論理的には100万件でも2000万件でもペナルティに大した違いは無いはず。
724NAME IS NULL:2008/01/06(日) 14:12:34 ID:Mrg050LO
SELECT id FROM test WHERE id=1 or id=2 or id=3

として、IDが1か2か3のデータを出したいと思います。
上記のSQLなら3つのレコードがヒットします。

idを検索する数だけid=を付けるのは変だと思うのですが、
どういう書き方をしたらいいのでしょうか?
725NAME IS NULL:2008/01/06(日) 14:46:54 ID:???
SQLの勉強しろよ。
IN を使えばいいでしょ。
726NAME IS NULL:2008/01/06(日) 17:57:57 ID:???
複数のカラムでOrder Byするとインデックスが無視されてしまいますが
どうやったって複数の項目でソートせざるを得ないときはどうしますか?

単純な数値のキー二つなら足したりかけたりして一つのカラムに
まとめたりすることも出来ますが、日時と数字だったりすると
相当面倒くさいです。ソートだけに。
727NAME IS NULL:2008/01/06(日) 18:09:16 ID:???
複数の項目のインデックスを張る
728NAME IS NULL:2008/01/06(日) 18:12:17 ID:???
>>725
すみません。勉強不足でした。
INで出来ました。ありがとうございました。
729NAME IS NULL:2008/01/06(日) 19:40:36 ID:???
>>721
百万件以上、数百万件くらいになると、どう正規化しても遅くなる。
あとメンテナンス性も落ちる。
後半に書いているように、データの水平パーティショニングが必要。
大規模なMySQL運用してるところならどこでもやってる。
(例: mixi、Yahoo! J、livedoor、live Journal)
730NAME IS NULL:2008/01/06(日) 21:56:49 ID:???
>>729
参照主体ならレプリケーションでも十分対応できるんじゃね?
更新主体だとそうもいかんけど。

5.1使うとその辺楽できていいよね。
731NAME IS NULL:2008/01/06(日) 22:23:46 ID:???
>>722>>723 >>729>>730
アドバイスどうもありがとうございました。
EXPLAINで最適化をしたのですが、どうしてもスピードが劣化してしまします。
このペースで1000万件良くと大変なことになりそうなので、策を考えていました。

>>729さんに教えて頂いたパーティション初耳だったのですが、マニュアルを見たらすごく便利ですね。
私は同じテーブルを複製してPGで参照テーブルを決定することを考えていたのですが、
DB側で透過的に負荷分散してくれるこのやり方は最高です。

いま問題になっているのは、会員の購入履歴みたいなもので、会員IDと購入品目などが並んでいます。
会員IDにINDEXを指定していて、会員IDをキーに購入履歴を参照しています。(実際には条件がもう少し複雑です)

このような用途で、会員別にパーティションにしたいのですが、
その場合は、「15.2.3. HASH 分割」がベストということで宜しいでしょうか?
http://dev.mysql.com/doc/refman/5.1/ja/partitioning-hash.html
732NAME IS NULL:2008/01/06(日) 22:27:33 ID:???
>>730
アドバイスありがとうございました。
>参照主体ならレプリケーションでも十分対応できるんじゃね?
残念ながら両方なんです。
参照もしながら更新もするテーブルでして、参照も更新も半々で、
それでいてデータ数も2年後には1000万件いく勢いなので・・・
733NAME IS NULL:2008/01/06(日) 22:54:32 ID:???
>>731
思うんだけど、購入履歴は「過去○件まで」として
それ以上は削除したら良いんじゃないか?
で、購入履歴からこれまでの注文金額を割り出しているのなら
それを止めて、購入合計金額テーブル+購入履歴にするとか。

俺はそうしてるよ。じゃないと、履歴のログがたまりすぎる。
734NAME IS NULL:2008/01/06(日) 23:19:24 ID:???
>>733
返事ありがとうございます。
そうですね、確かにそうしたいのですが、そのテーブルが過去の取引記録を修正する必要がある特殊なもので、
更にその取引履歴がないと他の処理の際に非常に困るケースがありまして、
そのテーブルを今の形以上に最適化?するのが難しいんです。

なので、将来的にそれが1億件とか溜まったらどうするの?って問題もあるのですが、
それに対応するのは、同じ構造のテーブルを複製して負荷分散するしかないのかなぁ、と思ったのが最初の考えだったんです。
735NAME IS NULL:2008/01/07(月) 01:36:20 ID:???
>>734
例え1億件溜まったとしても、それに全件対象で
検索なんてまずしないでしょうし、回避方法いくらでもあるでしょう。
しかもその9割以上はもう更新されない固定データのはずです。
736NAME IS NULL:2008/01/07(月) 01:38:54 ID:???
パーティションは5.1新機能で、5.1はまだβなので
使うなら人柱の覚悟が必要。
mixiとかは自前でパーティション相当の機能を実装してる。
737NAME IS NULL:2008/01/07(月) 03:53:34 ID:???
最適化云々の前に、どう考えても設計にミスがあると思うんだが・・。
mixiほどの会員数でもないだろうし。せいぜい1万人前後だろ。
738NAME IS NULL:2008/01/07(月) 03:54:51 ID:???
単位は人じゃないと思う
739729:2008/01/07(月) 11:54:16 ID:???
>>731
まいったな。
5.1新機能の『水平パーティショニング』じゃなくて、MySQLサーバ複数に
同じテーブル用意して、プログラムで参照先を変える、
手動(?)水平パーティショニングのつもりで書いた。
その場合、ユーザテーブルにデータクラスタidのカラムを増やすことになる。
736の言うように、5.1はまだRC1だからなぁ。

>>737
会員数じゃない。
740NAME IS NULL:2008/01/07(月) 19:13:48 ID:???
MySQL Administratorをインスコしたんですが、
Create New Procedure/functionが選択できない状態です。

使うにはなんか条件あるんでしょうか
741NAME IS NULL:2008/01/07(月) 20:08:35 ID:rP9QoVfq
ちなみにMysqlのヴァージョンは2.0.27です。
742NAME IS NULL:2008/01/07(月) 20:59:23 ID:???
>>741
   ∩___∩         |
   | ノ      ヽ         |
  /  ●゛  ● |        |
  | ∪  ( _●_) ミ       J
 彡、   |∪|   |
/     ∩ノ ⊃  ヽ  
(  \ / _ノ |  |
.\ “  /__|  |
  \ /___ /
743NAME IS NULL:2008/01/07(月) 21:35:15 ID:???
3.xというのは時たま見かけるけど、2.xなんてのは初めて見た w
744NAME IS NULL:2008/01/08(火) 11:57:35 ID:0aeiDUDX
MySQLをインストールしたのですが、
080108 11:52:04 mysqld_safe Starting mysqld daemon with databases from /usr/local/mysql/var
080108 11:52:04 [Warning] Setting lower_case_table_names=2 because file system for /usr/local/mysql/var/ is case insensitive
/usr/local/mysql/libexec/mysqld: Table 'mysql.plugin' doesn't exist
080108 11:52:04 [ERROR] Can't open the mysql.plugin table. Please run mysql_upgrade to create it.
080108 11:52:04 InnoDB: Started; log sequence number 0 46409
080108 11:52:04 [Note] Recovering after a crash using mysql-bin
080108 11:52:04 [Note] Starting crash recovery...
080108 11:52:04 [Note] Crash recovery finished.
080108 11:52:04 [ERROR] Fatal error: Can't open and lock privilege tables: Table 'mysql.host' doesn't exist
080108 11:52:04 mysqld_safe mysqld from pid file /usr/local/mysql/var/nomade2.local.pid ended
というメッセージがでてshutDownしてしまいます。
どなたか解決法ごぞんじないですか?
745NAME IS NULL:2008/01/08(火) 13:14:22 ID:???
746744:2008/01/08(火) 13:22:24 ID:0aeiDUDX
/usr/local/mysqlのなかをみてみるとscriptフォルダが入ってない・・・
やっぱりインストール途中で終わっちゃったのかな?
747744:2008/01/08(火) 13:27:20 ID:0aeiDUDX
ごめん。勘違い。
ご指摘通りinstall_dbで大丈夫になりました。
お騒がせしました。
748NAME IS NULL:2008/01/08(火) 19:06:40 ID:???
mysqlを3.23→4.1.x→5.045にアップデートしたのですが
--skip-grant-tablesをオプションをつけないと
起動しても今までのがうまく動きません
多分ユーザーパスワード関連の問題だとは思うのですが・・・

ユーザーテーブルの拡張は4.1系にアップデートした時に変換しました

--skip-grant-tablesを付けずに起動させて
ちゃんと動くようにするにはどうすればいいのでしょう?
因みに1ユーザーだけパスの変更ができないのがあります
あと、[mysqld]にold-password=1を指定してみてもだめでした
749NAME IS NULL:2008/01/08(火) 23:44:58 ID:???
>>748
「うまく動きません」の内容を詳しく。
750NAME IS NULL:2008/01/09(水) 02:22:19 ID:???
>>741
5.0.27でした。。。
751748:2008/01/09(水) 06:58:53 ID:???
動かないの内容ですが・・・
具体的に言うと接続できないです

で、アレから色々やって--old-passwordオプションをつけて起動したら
接続できました

しかし新しいパスワードで保存してあるユーザーは接続できませんでした
こういうものなのでしょうか?

752NAME IS NULL:2008/01/09(水) 07:09:27 ID:???
>>751
だから、接続できない時のエラーは?
753NAME IS NULL:2008/01/09(水) 07:36:23 ID:???
ログファイルにはでないのですが返されたエラーは
Client does not support authentication protocol
みたいな感じでした
754NAME IS NULL:2008/01/09(水) 16:41:50 ID:???
質問です

1 --------
2 --------
3 --------


このようにインデックスのついたカラムをdelete文で削除すると
インデックスの数字が空いたままカウントされていくのですが、
自動的に詰めてくれるようにはできないのでしょうか
(例:インデックス3を削除した後にインデックス4のものが3につめてくる)
755NAME IS NULL:2008/01/09(水) 17:36:30 ID:???
微妙に用語が怪しいので
現象を正しく理解しているかどうか不安だが
連番を保持しているカラムの値は
レコードの挿入・削除により動的には変更されない
そういう値は通常はDBに持たせずプログラムで生成する
756NAME IS NULL:2008/01/09(水) 17:37:26 ID:???
トリガ仕込んでおけばできるかもしれないが、
あんまりやらないだろうなあ
757NAME IS NULL:2008/01/09(水) 19:54:54 ID:???
大文字だけが含まれるIDを抽出したいのですが

select id from database REGEXP [A-Z]*

とかでも全て出てきますorz
大文字だけが含まれる、というクエリが間違っているのでしょうか?
REGEXPを使うんですよね?
でも正規表現がorzなので・・・。
758NAME IS NULL:2008/01/09(水) 23:19:28 ID:???
>>753
クライアントコマンド/ライブラリのバージョンが古いんじゃないかと。
759NAME IS NULL:2008/01/09(水) 23:21:52 ID:???
>>757
いや、それ文法エラー。

select id from tablename where columname regexp '[A-Z].*'

だと、どう?
760NAME IS NULL:2008/01/10(木) 00:33:46 ID:???
>>754
ちゃんと詰めて考えれば、その仕様自体に無理ある。
DBでは欠番してる事も情報の1つなんだよ。
761NAME IS NULL:2008/01/10(木) 02:12:00 ID:???
9時間前の日時をdatetime型に書き込もうと
INSERT INTO tbname value(NOW()-090000)
としてもデフォルトの0000-00-00 00:00:00となってしまいます。
SELECT NOW()-090000
だと正しく表示されるのですが、何がいけないのでしょうか?
762NAME IS NULL:2008/01/10(木) 02:55:35 ID:???
>>761
SELECTの結果をINSERTすればいいじゃん
763NAME IS NULL:2008/01/10(木) 07:26:01 ID:???
>>761
now()-090000 で正しく表示されているというのは気のせい。
subdate(now(), interval 9 DAY_HOUR) を使え。
764NAME IS NULL:2008/01/10(木) 08:59:06 ID:???
オライリーのMySQL本でもauto_incrementの数はつめるなって
書いてあるな
興味があれば参照してみ
765NAME IS NULL:2008/01/10(木) 10:52:40 ID:???
>>757
その正規表現はいろんな点で間違ってます。
正規表現スレで聞くべきだと思うけど、

1. 先頭から末尾まで大文字だけが含まれる
2. 大文字以外が含まれる、の否定

のどっちかにしないとダメじゃね?
766NAME IS NULL:2008/01/10(木) 17:04:40 ID:???
[A-Z]+
767NAME IS NULL:2008/01/10(木) 23:31:51 ID:???
^[A-Z]+$
768NAME IS NULL:2008/01/11(金) 02:16:26 ID:???
[T_T]<ありがとうございました
769NAME IS NULL:2008/01/11(金) 09:03:33 ID:???
a,b,cの3つのカラムがあるテーブルhogeで
SELECT * FROM hoge WHERE a<条件 ORDER BY b,c;
みたいな検索を高速化させる方法は MySQLにありますか?
ありませんよね。
770NAME IS NULL:2008/01/11(金) 09:30:57 ID:???
うん
771NAME IS NULL:2008/01/11(金) 11:27:22 ID:???
うん?
772NAME IS NULL:2008/01/11(金) 19:11:00 ID:???
MySQLで
正規表現してマッチした文字を入れたいのですがどうすればいいでしょうか?

CREATE FUNCTION hoge (
f_str TEXT,
) RETURN VARCHAR
BEGIN
declare s_str INT DEFAULT NULL;
// f_strに/#([0-9]{3})#/ が入っていたら
// ([0-9]{3})の値を抜き出して
SELECT `hoge` FROM hoge_temp_tbl WHERE num_id = ([0-9]{3}でマッチした値)
END

簡単に書くと
長文が入った変数f_strをストアドに投げて#([0-9]{3})#にマッチするキーの値をDBから取りたいのです
PHP側で置き換えするとその都度DBと通信しなくてはいけないので遅くなると思いこの方法が出来ないか、と考えてます、

MYSQLのバージョンは
5.1です
773NAME IS NULL:2008/01/11(金) 21:09:03 ID:???
update table_n SET point=( select count(別のテーブル) from 〜〜〜) where 〜〜〜

pointにcountの数値を入れてupdateしたいのですが
Subquery returns more than 1 rowとでてエラーがでます。
()の前にANYなどをいれても別のエラー(おそらく文法エラー?)がでます
pointはint型です

やりたいことは   あるテーブルのレコードの値を別のテーブルのcountで求めた値を入れたいのですが…
774773:2008/01/11(金) 21:34:39 ID:???
ごめんなさい、自己解決しました…
ただのupdateの文法ミスでした。余分なものが多すぎだorz
775NAME IS NULL:2008/01/13(日) 06:58:13 ID:???
テスト
776NAME IS NULL:2008/01/13(日) 22:04:10 ID:???
列1、列2、列3・・・で列1+列2を一つのインデックスとして貼っているのですが、
列2のみに検索を掛ける場合に、列2だけのインデックスを作る必要がありますか?
宜しくお願いします。
777NAME IS NULL:2008/01/13(日) 22:42:41 ID:???
>>776
はい、必要あります
778NAME IS NULL:2008/01/13(日) 23:40:42 ID:???
>>777
アドバイスありがとうございます。
勉強になりました。
実は、phpadminでやると、↓のような警告メッセージがでてしまうので、気になっていました。
カラム `列2` に PRIMARY と INDEX のキーを両方とも設定するのはよしましょう。

検索条件別にインデックスを分けないといけないんですね。
どうもありがとうございました。
779NAME IS NULL:2008/01/14(月) 04:06:03 ID:???
MyIsamでデータをインサートする時、どの程度の確実性が保証されてるんですか?
一番知りたいのはInnoDBのトランザクション使用時と比べてです
780NAME IS NULL:2008/01/14(月) 12:38:44 ID:???
>>778
EXPLAIN した?
PRIMARY には INDEX いらんがな。
781NAME IS NULL:2008/01/14(月) 19:19:15 ID:k6NvIgLE
質問お願いしたいんですが、
何でGROUP_CONCATではlimitが利用できないんでしょうか?
limitを利用したのと同程度で済む代替手段はあるのでしょうか?
782NAME IS NULL:2008/01/14(月) 21:16:10 ID:???
>>781
え、できないの? できると思うけど。
783NAME IS NULL:2008/01/14(月) 22:07:57 ID:k6NvIgLE
>>782
レスありがとうございます。
Group_concatの構文って↓ですよね。
抽出して並べる値について、上位5件のものだけにしたい場合などにlimitが使えたら便利と思ったんですが、
普通にできるのでしょうか。

GROUP_CONCAT([DISTINCT] expr [,expr ...]
[ORDER BY {unsigned_integer | col_name | formula} [ASC | DESC] [,col ...]]
[SEPARATOR str_val])
784772 :2008/01/16(水) 18:10:14 ID:???
宜しくお願いします。
785NAME IS NULL:2008/01/16(水) 23:10:36 ID:???
786NAME IS NULL:2008/01/16(水) 23:31:06 ID:/Laf53wE
Sunになっちった
787NAME IS NULL:2008/01/16(水) 23:36:06 ID:???
788NAME IS NULL:2008/01/17(木) 01:18:09 ID:???
これで四大商用DBに仲間入りだな
789NAME IS NULL:2008/01/17(木) 01:57:33 ID:???
SAMJ? JAMS?
790782:2008/01/17(木) 02:10:31 ID:???
>>783
あ、そういうことか。
group_concat() の機能じゃないけど、group_concat() の結果を substring_index() してみるのはどうかな。
substring_index(group_concat(....), ',', 5) みたいに。
791NAME IS NULL:2008/01/17(木) 02:12:44 ID:???
Sun MySQL 三枚SQL
792781:2008/01/17(木) 02:55:23 ID:FXOK6V2i
>>790
レスありがとうございます。
MySQLについてあまり詳しくないのですが、
その方法だとソートする場合に,5番目以降の部分もソートしてしまって,
計算量が膨大になったりしないのでしょうか。
793NAME IS NULL:2008/01/17(木) 05:31:39 ID:h9UdFYyA
レプリケーション構成の時、スレーブDB自体を再起動する際は一度stop slaveを
かけた方が安全なんでしょうか?
794NAME IS NULL:2008/01/17(木) 05:40:46 ID:???
ずっとACCESSを使っていましたが、無料で使用できるということで、
MYSQLを今週から使い始めました。
ですが、SQLというのがイマイチよく理解できないのですが、
ある列の並べ替えをしたいときは、どのようなSQLをかけば宜しいのでしょうか?

SYAIN(社員用の管理テーブルです)
ID
NAME
ADDRESS
AGE
SYOZYOKU
STATUS
TM_SCORE
795NAME IS NULL:2008/01/17(木) 05:55:54 ID:???
>>794
その辺はSQL入門で最初に出くる基本事項ですので、
本やwebで一通り押さえてください。
ちなみにその場合は「ORDER BY」を使用します。
796NAME IS NULL:2008/01/17(木) 05:59:23 ID:???
>>794
例えば、NAMEを昇順に並べ替えるなら、こうすれば出来るよ。やってみて。
DELETE FROM SYAIN; SELECT * FROM SYAIN ORDER BY NAME;
797NAME IS NULL:2008/01/17(木) 06:08:57 ID:???
>>795>>796
朝早くから、アドバイスありがとうございました。
教えられたSQLでやってみたのですが、何も表示されませんでした。
ちなみに、XPでWINDOWS版でやっています。バージョンはわかりません。
おすすめのHPとかありますか?
798NAME IS NULL:2008/01/17(木) 06:12:08 ID:???
ひ、ひでーw
799NAME IS NULL:2008/01/17(木) 07:22:19 ID:???
>>794
まれに見る超初心者。
スレで聞くより入門書買って読んだ方が早いよ。

>>796
> DELETE FROM SYAIN;
>>797
> 教えられたSQLでやってみたのですが、何も表示されませんでした。

ホントに全レコード消しちゃったのね・・・。南無。
800NAME IS NULL:2008/01/17(木) 07:23:20 ID:???
format c: [エンター] をなんの疑いもなく実行してしまう奴
801NAME IS NULL:2008/01/17(木) 07:49:58 ID:???
>>799
そうですね。近くに本屋がないので、どうしようかと思っていまして、
何かお勧めの本とかありますか?

で、すみません、あれから再起動したりして何度か試したのですが、
レコードが表示されなくなってしまったのですが、
これはどうしたら宜しいでしょうか?
前にウマくいっていたSQLも実行できないのですが・・
802NAME IS NULL:2008/01/17(木) 07:52:42 ID:???
MySQL史上最大級のニュースがあったというのに、
このスレがこんなに平穏とは、それだけMySQLユーザーが増えたって事かね。
803NAME IS NULL:2008/01/17(木) 07:53:57 ID:???
データベースはメンテナンスが大事だから
SQLを実行した後に>>796を実行しておいた方がいいよ。
804NAME IS NULL:2008/01/17(木) 07:55:48 ID:???
>>802
何が変わるってわけでもないし。 ライセンス形態が変わるってなら大ニュースだが
805799:2008/01/17(木) 08:04:00 ID:???
>>801
何歳?小学生ぐらい?
DELETE FROM SYAIN; を実行したことで全レコードは消えて、
もう取り戻せないから、諦めて再入力するしかない。
本は>>1-2ぐらいを見ればリンクがある。

それからGoogleという便利な検索エンジンがあるから、ちゃんと使おうね。
http://www.google.co.jp/
806NAME IS NULL:2008/01/17(木) 08:05:44 ID:???
これが釣りではなかったとしたら
とんでもないゆとりだなw
807NAME IS NULL:2008/01/17(木) 08:07:11 ID:???
>>802
開発者が増えて、ライセンスも緩和されるかもね。
でもって商用DBにしかない機能も実装されるだろうし、
いよいよDB2とOracleが追い詰められるのかも。

Sun、MySQLを買収へ
http://www.itmedia.co.jp/enterprise/articles/0801/17/news005.html

Sun Microsystemsは、オープンソースのRDBMS「MySQL」を開発するMySQLを
総額約10億ドルで買収することを明らかにした。
 Sun Microsystemsは1月16日、オープンソースのRDBMS「MySQL」を開発する
MySQLを総額約10億ドルで買収することを明らかにした。
買収は3月末をめどに完了させる予定。MySQLはIPOを待たずして買収されることとなった。
 MySQLが自社サイトに開設しているブログに、同社のコミュニティ担当バイスプレジデント、
カイ・アーノ氏がその旨を伝えるエントリを投稿したのとほぼ同時期に、
Sunからも正式なプレスリリースが出されている。
 カイ氏はエントリの中で、「オープンソースをよく理解しているSunがMySQLを買収したことは、
MySQLコミュニティーにとっても有益なものになる」と述べている。
 一方、Sunのジョナサン・シュワルツCEOも自身のブログでこの件について言及、
MySQLの顧客に対して買収の完了を待つことなくサポートサービスの提供を開始する予定であると述べた。
 MySQLについては、過去にOracleが買収を試みたことが知られている。
今回Sunが買収したことで、OracleやMicrosoft、
IBMなどとデータベース市場で争うための基盤をSunは手に入れたことになる。
808NAME IS NULL:2008/01/17(木) 08:15:18 ID:???
Sunに買収されてこれからどうなっちゃうの?と思ったが
別に悪いことじゃなさそうだな
809NAME IS NULL:2008/01/17(木) 08:22:52 ID:???
>>805
おいおい!!!!!ふじゃけんなよ。
人をはめておいて何説教してんだよ!!!
どうすんだよ。今日の2時までに資料作成しないといけないのに、
データ消えたって洒落じゃ済まされないよ。
おい、復活する仕方を教えろよ。何だよ、このスレ。まじ、死んでくれよ!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
810799:2008/01/17(木) 08:32:36 ID:???
>>809
おいおい799と796は別人だよ。
親切にしてやったのに逆ギレとは。
811NAME IS NULL:2008/01/17(木) 08:34:23 ID:???
バックアップしてなかったら復活なんて無理だよ…
812NAME IS NULL:2008/01/17(木) 08:38:38 ID:ThKha1cM
SUNは技術者を買収したって解釈でOK?
813NAME IS NULL:2008/01/17(木) 08:38:45 ID:???
barkrayDBみたいな事になっちゃうのかね
814NAME IS NULL:2008/01/17(木) 09:08:32 ID:???
>>809
お困りのようなので、特別に教えます。
SQL文1本で復活することは可能です。

ただし、技術料として前金で10万円頂くことになります。
これでも相当安いです。同じスレの住民として特別ですよ。

それで、宜しければ上記のメールまで連絡して下さい。
815NAME IS NULL:2008/01/17(木) 09:11:33 ID:???
rollbackさせようとしてたりして
816NAME IS NULL:2008/01/17(木) 09:19:16 ID:???
さすがに自演の匂いがする
817NAME IS NULL:2008/01/17(木) 09:38:29 ID:???
朝から凄い自演釣りですね
818NAME IS NULL:2008/01/17(木) 12:57:17 ID:???
>>809
>何だよ、このスレ。
本来、日本最高級のMySQL技術者のみが集うスレですが、何か?
819NAME IS NULL:2008/01/17(木) 14:40:21 ID:???
おお >>809よ しんでしまうとはなさけない
820NAME IS NULL:2008/01/17(木) 15:07:43 ID:???
買収されたことで、mysqlが本丸の技術者の需要も増えそう
821NAME IS NULL:2008/01/17(木) 17:01:58 ID:???
MySQL が Oracle や IBM を追い詰めるって妄想にもほどがあるw

Sun の狙いは現行 MySQL で構築してあるシステムを Sun のハード & ソフトに置き換えること。
そこそこ規模の大きいとこは SPARC + Solaris + Oracle でリプレースすること。
つまり現 MySQL ユーザの取り込みだよ。Sun はそういう会社。それ以外に興味はない。

過去に Sun に買収されたところがどんな冷や飯を食ったか (あるいはお亡くなりになったか)、
Cobalt を例に挙げよう。

1. Cobalt 買収。これで Sun にも I/A + Linux の販売基盤ができたとメディアが騒ぐ  ← 今の MySQL
2. Sun、サポート体制配備。客とのコネ作り。
3. Cobalt 塩漬け開始。ほぼ同時に Sun が I/A ハード販売開始。
4. 2 世代も古くなればさすがに客も Sun の I/A、SPARC サーバへ乗り換えはじめる。
5. Cobalt 終了のお知らせ。
822NAME IS NULL:2008/01/17(木) 17:10:05 ID:???
MySQLのQueryBrowserで
カラムに日本語を使っていると
Executeを入力するする部分がバグるんですけど
解決法はあるのでしょうか?
823NAME IS NULL:2008/01/17(木) 17:14:37 ID:???
CobaltはSunに買収された時点で終わったとオモタ
MySQLはそうならないで欲しい
最悪時は第三者がGPL版ベースで再スタート?
824NAME IS NULL:2008/01/17(木) 17:22:13 ID:???
OpenOfficeやNetBeansみたいに細々と続けてくれればそれで文句ないよ
825NAME IS NULL:2008/01/17(木) 17:57:01 ID:???
>>821
全く同感
そういえばCobaltってあったなぁっていう・・・
826NAME IS NULL:2008/01/17(木) 17:59:07 ID:???
>>822
文字コードは?
設定は?
バージョンは?
接続クライアントは?
827NAME IS NULL:2008/01/17(木) 18:00:51 ID:???
>>823 >>825
MySQL終わったな
828NAME IS NULL:2008/01/17(木) 18:13:52 ID:???
でもMySQLが脂肪したらpostgresに逃げられるだけじゃないの?
取り込みなんてできないだろ
829NAME IS NULL:2008/01/17(木) 18:46:59 ID:???
Cobaltが終わったからMySQLが終わるって? おまえらアホだろ
830NAME IS NULL:2008/01/17(木) 18:54:07 ID:???
MySQL ユーザが PostgreSQL に流れてしまったらいやだ!
MySQL を Oracle や DB2 に匹敵するくらい育てなければ!!

これは単なるフリーク的な発想なだけであって、Sun がそんなこと考えるわけないじゃん。
買収額からは長期戦略の構えのようには見えん。人材と中規模〜大規模の優良客だけ
さっさと取り込んで、自分らだけで何とかできる規模の安い客はどこへでもご自由にどうぞ?
オプソあるでしょ? と、まぁ今までの Sun の対弱買収を考えるとこれが定石。

つか、MySQL を育てたいと Sun が本気で考えてるなら、買収じゃなくて大量の自社エース級
社員をコミュニティに派兵する形態をとってる。

一応 Sun もオープンなイメージで売ってる会社だからオプソの形態は無くさないだろう。
ただコミュニティ無視していきなり 「Sun 版無料 MySQL です。これが公式版です。」 と
やらかす可能性は十分にある。てか過去に Linux 用の Java でやった。
831NAME IS NULL:2008/01/17(木) 19:08:53 ID:???
ちなみに Cobalt の買収額 20 億ドル、MySQL は 10 億ドルな。
832NAME IS NULL:2008/01/17(木) 19:11:41 ID:???
\ヽ, ,、
_  `''|/ノ
\`ヽ、|
 \, V
    `L,,_
    |ヽ、)                ,、
   .|                   ヽYノ
   /                     r''ヽ、.|
  /        ,.. -──- .、    `ー-ヽ|ヮ
 .|      , ‐'´   __     `ヽ、  `| 
  |    / , ‐'"´       ``''‐、  \  |
  |   / /             \ ヽ |
  ヽ,  y'   /` ‐ 、    ,.. -'ヘ   ヽ. }ノ
   ヽ,'     /   /`,ゝ' ´     ヽ   Y.
.    i    ,'     { {        ヽ   `、
    l    ,イ─- 、.._ ヽ ,, _,.. -─:}   !
.    |  r‐i| ー=ェェ:ゝ ,.∠ィェェ=ー' |r 、.  l
   |  {ト」l|.      : | "    ``: |!トリ  |
.  │  ヽ、|      ;.」_      |'ソ    !
.  │     ヽ     r──ッ    /ノ    |
    |      lヽ    ̄ ̄     / イ    │
.    !    丶ヾヽ    ~   , ' ノ │   !
    ト.    ミ.ゝ ヽ.____./  /  l   /
    ヽ  ヽ           イ ,' / , '       ┼ヽ  -|r‐、. レ |
     \.             ノレ'/         d⌒) ./| _ノ  __ノ
833NAME IS NULL:2008/01/17(木) 19:29:44 ID:???
カオスってきました
834NAME IS NULL:2008/01/17(木) 19:38:34 ID:???
なあに、昔に戻るだけさ。
835NAME IS NULL:2008/01/17(木) 19:42:55 ID:???
CobaltとMySQLを同列に扱うとは、これまた珍妙な人がいるもんだね。
Sunの買収はそれほどの影響は無いだろうけど、
日本だと頭の固い旧世代のクライアント様向けに、
オープンソースDBと言うよりも世界的大企業であるSunのDBですと言える事が、
追い風になるのは確かだよ。

しかしこの板はIDが出ないのか、ちょっと不便だね。
836NAME IS NULL:2008/01/17(木) 19:54:40 ID:???
珍妙以前におまい Sun ってどういう会社か知らんだろ。
まさにおまい自身が Cobalt 買収の時のユーザと同じ事言ってるくらい同列。
837NAME IS NULL:2008/01/17(木) 20:02:10 ID:???
CobaltとMySQLを比較するのは間違ってるんじゃない?
今はオープンソースコミュニティから嫌われたらダメージ大きいから、
オープンソースコミュニティに不利なことはしないはず。
838NAME IS NULL:2008/01/17(木) 20:12:13 ID:???
そりゃまったく同じものじゃない以上どこまで違うかは好き好き解釈すりゃいい。
ハードは作り手が塩漬けにすりゃ死滅確定だが、MySQL は既にオプソになってるから
Sun がライセンスで縛らない限りはどうとでも生き残れる。

だが Sun にとってはコミュニティの動向なんてあまり眼中になく、これで MySQL に
箔が付いたなんて思うのは甘すぎるというだけの話。別に MySQL が死滅すると
騒いでるわけじゃないのよ。
839NAME IS NULL:2008/01/17(木) 20:21:05 ID:???
コバルト買収はlinuxゲットするためじゃなかったっけ?
ただ買収前のコバルトも個人・中小企業用のキューブは売れず、ラックサーバへ移行してたような
840NAME IS NULL:2008/01/17(木) 20:32:21 ID:???
Sunはオプソの敵ってことでFA
841NAME IS NULL:2008/01/17(木) 20:47:46 ID:???
SuSEがNovellに買収された事で停滞したのとは違い、
既にMySQLの影響力は大きすぎるので、
わざわざコミュニティの反感を買うような事をするほどSunは馬鹿では無いと期待するがね。
842NAME IS NULL:2008/01/17(木) 20:59:46 ID:???
コミュニティと言っても MySQL 社自体の売り上げは 1 億ドルもない。
これに 10 億突っ込んだなら当面は利益確保に走らんと株主に殺される。
まぁしばらくはコミュニティの方まで手が廻らないから好きにやっててくれ
というスタンスなんじゃないかね。
843NAME IS NULL:2008/01/17(木) 22:12:53 ID:???
10 億ドルは高すぎない? こんなもの?
GPLならそれベースにコミュニティ立ち上げて勝手に作ればいいんじゃないの?
844NAME IS NULL:2008/01/17(木) 22:18:30 ID:???
ORACLEに買収されるよりは10億倍マシ
845NAME IS NULL:2008/01/17(木) 22:19:37 ID:???
オラクル買収なら一瞬にしてなくなるだろな
846NAME IS NULL:2008/01/17(木) 22:34:58 ID:dTjY9YOT
force indexを使うとエラーが出るのですが、何故なのでしょうか?

mysql> select * from hoge force index(name);
ERROR 1072 (42000): Key column 'name' doesn't exist in table

テーブル定義は以下の通りです。
mysql> desc hoge;
+-------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | |
| name | text | YES | | NULL | |
+-------+---------+------+-----+---------+-------+
2 rows in set (0.00 sec)

mysql> select * from hoge;
+------+------+
| id | name |
+------+------+
| 1 | aaa |
| 2 | bbb |
| 3 | ccc |
+------+------+
3 rows in set (0.00 sec)

MySQLのバージョンは、5.0.2です。
847NAME IS NULL:2008/01/17(木) 23:07:52 ID:???
>>845
Berkeley DBも今や跡形もないしな
848NAME IS NULL:2008/01/17(木) 23:27:12 ID:???
>>846
name にインデックスが設定されていないから。
849NAME IS NULL:2008/01/18(金) 00:07:39 ID:???
>>842
MySQLはプライスレス。

時代の流れを読めないおっさんは、Sunに喰われ吸収される方向だと思っているようだけど、
残念ながら現在のSunにそのような消化能力は無いよ。
850>>846:2008/01/18(金) 00:12:20 ID:IiVRb0GG
>>846
ありがとうございます!
インデックス=カラムと勘違いしておりました。

851NAME IS NULL:2008/01/18(金) 00:34:46 ID:???
時代の流れw もうちょっと具体的な例でも出してくれんと話にならん。
StrageTek、ERP屋?、認証屋? この規模の Sun の買収は珍しいことじゃないんだけど、
良い方に転んだものってあったかなぁ。
852NAME IS NULL:2008/01/18(金) 00:48:19 ID:???
ベンダーがサポートしやすくなるから
オラクル高杉と思ってる企業がMySQL採用するケース増えるんじゃないかな
853NAME IS NULL:2008/01/18(金) 01:05:55 ID:???
つーか、MySQL エンジン搭載 FileMaker カモン!
854sage:2008/01/18(金) 01:36:58 ID:???
質問があります。

set autocommit=0
などとして設定した値は、どうやって参照できますでしょうか?

ためしに適当に↓のようにやってみたのですがダメでした。。。
mysql> select autocommit();
ERROR 1305 (42000): FUNCTION mysql.autocommit does not exist
855NAME IS NULL:2008/01/18(金) 02:40:50 ID:???
>>854
mysql> select @@autocommit;
+--------------+
| @@autocommit |
+--------------+
| 1 |
+--------------+
1 row in set (0.02 sec)
856NAME IS NULL:2008/01/18(金) 03:27:58 ID:???
show variables;
857NAME IS NULL:2008/01/18(金) 05:24:24 ID:???
Cobaltの件は、nVidiaのVooDoo買収の様な
いわばライバル消滅が目的の買収だろう?

SunがMySQLを潰すメリットなんて無いだろう?
海外で人気の高いMySQLを取り込み自社製品の
ブランド力アップというのが自然な考え。

そして恐らく商標はSun MySQL の様なものに変更に
なるだろうから、以後メディアでMySQLが紹介される度に
Sun の名前が露出することになる。 楽天球団に似た考え方だ。
858>>854:2008/01/18(金) 08:56:09 ID:???
>>855
ありがとうございます

>>856
show variablesじゃ表示されないみたいですね。
859NAME IS NULL:2008/01/18(金) 11:04:54 ID:???
>>844-845
いやまったく。
Oracleが買収したなら「終わったな」と思ったけど、Sunならそんなに問題ないでしょ。
860NAME IS NULL:2008/01/18(金) 11:10:33 ID:1KyA+UkP
教えて下さい
読み方で検索したのですがでてきませんでした
max_user_connections
マックス ユーザー なんてよむのでしょうか?
サポートに電話して聞きたいのですが読めなくて;;
861NAME IS NULL:2008/01/18(金) 11:15:22 ID:???
こねくしょん
862NAME IS NULL:2008/01/18(金) 11:16:19 ID:???
>>861
マジレス本当にありがとうございます
助かりました><
863NAME IS NULL:2008/01/18(金) 11:45:16 ID:???
>>860

中学校は出たか?
もし義務教育を終えていないのなら、そこからでも遅くはないぞ。
864NAME IS NULL:2008/01/18(金) 11:48:34 ID:???
公立なら校長の許可さえあれば通わなくても卒業させてもらえる件
865NAME IS NULL:2008/01/18(金) 14:30:25 ID:???
校長というより、学年主任の許可があれば卒業させてもらえる。
866NAME IS NULL:2008/01/18(金) 14:45:35 ID:???
学力も付けずにいったい何を卒業するのだろお〜ぉ
867NAME IS NULL:2008/01/18(金) 20:48:18 ID:FTZ9B3nG
すみません、レベル低い質問なんですが聞かせてください
Nullをカラムに入れる意味ってなんなんでしょうか? 0とは違うなどと
解説してあるのはわかるんですが、ピンときません。
""(カラ)にしないという意味だと、たとえばどういう状況で
どんな効果があるんでしょう?

if(カラムの値==0){〜〜;}というプログラムを書いていて、値がNullだった
ばかりに誤動作したことがあり気になって質問しました。
この程度の問題自体は、if(カラムの値===0){ に変えれば済むことなんですが、
根本的にNullの使い道を知りたくて…  気が向いた方、回答いただければ幸いです
よろしくお願いします
868NAME IS NULL:2008/01/18(金) 20:50:17 ID:???
地球上の空気が0なら、宇宙の果てはnull
869NAME IS NULL:2008/01/18(金) 21:05:36 ID:???
0という数字に意味があるとき。空文字列も同様。
870NAME IS NULL:2008/01/18(金) 21:17:17 ID:???
テストの点数が0なら0点。nullなら受けてもいない。
871NAME IS NULL:2008/01/18(金) 21:31:41 ID:SGztWTji
米Sun、MySQLを買収。「SolarisにはMySQL、WindowsにはSQL Server、Oracleオワタ\(^o^)/」という時代へ
http://namidame.2ch.net/test/read.cgi/news/1200622126/
872NAME IS NULL:2008/01/18(金) 23:45:07 ID:FTZ9B3nG
>>868-870
ありがとうございます 「0という値に意味があるとき」という条件は
わかりやすいように思いました
今までデータの型を強く意識したことなかったので(文字・数値くらいしか)
その辺の認識改めつついじって学習していこうと思います

あと、立て続けですみませんが質問です。 テーブルの構造変えようとしたら
CHANGE `openTime1` `openTime1` TIME NOT NULL , に対して
#1265 - Data truncated for column 'openTime1' at row 1
というエラーが出ました
openTime1カラムはタイム型で文字数制限などしていなく、すでに登録済みの
データとしてはNULL(複数)と07:00:00(一件)があるだけです
今までデフォルトでNULLが入ってたのを、Not nullのタイプに変更したかっただけですが、、
すみませんが、アドバイスよろしくお願いします
873NAME IS NULL:2008/01/19(土) 01:03:05 ID:???
NULL の値があるレコードが既にあるから怒られる
NULL をデフォルト値(00:00:00とか)に update してからやってみれば?
874NAME IS NULL:2008/01/19(土) 01:05:08 ID:???
こうすれば出来るよ。やってみて。
DELETE FROM テーブル名; ALTER TABLE テーブル名 CHANGE `openTime1` `openTime1` TIME NOT NULL;
875NAME IS NULL:2008/01/19(土) 02:57:15 ID:???
>>873-874
ほんっとにありがとうございます
>NULL の値があるレコードが既にあるから怒られる って知りませんでした
知らなきゃこの先もずっとハマるところでした
どうもありがとうございました
876NAME IS NULL:2008/01/19(土) 07:22:16 ID:???
selectしたときNULLの場合0として扱うにはどうすればよいですか
877NAME IS NULL:2008/01/19(土) 07:31:27 ID:???
>>874
> DELETE FROM テーブル名;

またおまえか。
878NAME IS NULL:2008/01/19(土) 08:27:18 ID:???
>>876
select IFNULL(カラム名,0) from テーブル名;

とか
879NAME IS NULL:2008/01/19(土) 09:34:24 ID:???
これからはmysqlの時代だなわっはっは
880NAME IS NULL:2008/01/19(土) 09:51:39 ID:???
>>866
この支配から、だろ。
881NAME IS NULL:2008/01/19(土) 15:57:20 ID:???
>>872

>>874
> DELETE FROM テーブル名;

初心者注意。
これをするとテーブルのレコードが全件削除される。

全件削除する場合は、
TRUNCATE TABLE テーブル名;
の方が性能的によい。
882NAME IS NULL:2008/01/20(日) 15:33:33 ID:7YNpY45T
>>706
5.1以降はインストーラになってないから手動で入れないといけない
1・ファイルを解凍し、フォルダの名前をmysqlとする
2・myssqlフォルダを/usr/local/にコピー
3・cd /usr/local/mysql
4・./scripts/mysql_install_db
883NAME IS NULL:2008/01/20(日) 16:05:09 ID:???
数字の少ない上位100個のデータを取得して、その中からランダムで何個か抽出するにはどうしたらいいですか?
sql文の中に order by とか limit が重複してると駄目ですよね?
$sql = "select * from UNKO_MASTA where ".
"TOUROKUNITIJI < date_format('07-12-31', '%y/%m/%d') and CATEGORY_NO < '59'".
"order by DOWNLOAD_SUU asc, NO desc ".
"limit 100";

ここから更に何個かを抽出したいのです。
よろしくお願い致します。
884NAME IS NULL:2008/01/20(日) 16:38:02 ID:???
ランダムにってところはプログラム側で処理すれば?
毎回100件のキー項目を取得して
ランダムにいくつか選択してキーで再検索
885NAME IS NULL:2008/01/20(日) 17:24:48 ID:T57a6ONH
>>883

おつかれさまです。
RAND()関数とサブクエリを使って取得できませんか?

<上位100個中、ランダムで10個取得する場合>
select *
from
(
select * from UNKO_MASTA where
TOUROKUNITIJI < date_format('07-12-31', '%y/%m/%d') and CATEGORY_NO < '59'
order by DOWNLOAD_SUU asc, NO desc
limit 100
) A
order by rand() limit 10
886NAME IS NULL:2008/01/20(日) 21:16:13 ID:nGLRewEv
MySQLについて質問があります。
最初は、勉強用に使っていたDB名を次の様に変更したいのですが
どういうコマンドを入力すれば良いでしょか?
(テーブル名変更の時に仕様する ALTER TABLE のイメージ)


現在の名前
  test

変更後
  TrueTable

以上 宜しくお願い致します。
887NAME IS NULL:2008/01/20(日) 21:27:52 ID:???
ダンプしてインポート
888NAME IS NULL:2008/01/20(日) 21:58:32 ID:nGLRewEv
>>887さん

という事はやはり、Table定義変更の様にAlter DataBase等で行う事は
出来ないという事でしょうか?
889NAME IS NULL:2008/01/20(日) 22:13:12 ID:???
890NAME IS NULL:2008/01/20(日) 22:15:32 ID:37hf1nGY
>>888
http://dev.mysql.com/doc/refman/5.1/ja/rename-database.html
12.1.18. RENAME DATABASE 構文

このステートメントは、MySQL 5.1.7 で追加されました。

891sage:2008/01/20(日) 23:34:55 ID:???
レプリケーションについて質問です。

Masterサーバがフリーズした場合、slaveサーバのエラーログに、
「i/oスレッド not running」みたいなエラーが出るのですが、
これって定期的にslaveサーバがmasterサーバと接続されているかどうかを
チェックしているということでしょうか?
そこらへんの仕組みが知りたいのですが、詳しい資料などあれば、
教えていただけないでしょうか?

892NAME IS NULL:2008/01/20(日) 23:55:11 ID:???
>>891

この本でも買ってしらべてくれ。
http://www.oreilly.co.jp/books/9784873113432/toc.html
893NAME IS NULL:2008/01/21(月) 00:21:17 ID:???
>>892
891 じゃないけど面白そうな本だなあ
894NAME IS NULL:2008/01/21(月) 01:08:22 ID:EQqPib2R
>>889,890
ありがとうございます。
解決しました。
895NAME IS NULL:2008/01/21(月) 09:55:55 ID:???
MySQL潰しをOracleに頼まれたという解釈でおkなの?
896NAME IS NULL:2008/01/21(月) 11:08:27 ID:???
>>891
http://dev.mysql.com/doc/refman/5.1/ja/slave-io-thread-states.html
再接続が試行される前に、master-connect-retry 秒間、スリープ状態になる。
897NAME IS NULL:2008/01/21(月) 12:16:33 ID:???
20万件のデータをindex張るのと張らないのとでは、10倍以上の差があった。

異常だよ。
898NAME IS NULL:2008/01/21(月) 13:06:40 ID:???
MySQLのGUIツールで、お勧めの物がありましたら教えてください。
NaviCatの試用版を使っていたのですが、期限が切れたので。
できましたら、テーブルを一度に複数開ける物がいいです。
899NAME IS NULL:2008/01/21(月) 13:12:57 ID:???
OOoBase
900898:2008/01/21(月) 22:12:37 ID:???
ダウンロードしてみましたが、文字化けしたエラーが出て、データベースに接続できませんでした。
901NAME IS NULL:2008/01/21(月) 22:15:13 ID:???
MySQLって死滅しちゃうの?
902NAME IS NULL:2008/01/21(月) 22:34:23 ID:???
max_user_connectionって、皆さんどれ位に設定してますか?
さくらの専用サーバー借りようと思うのですが、
設定値の目安が分からず迷っています。
どこの会社の専用サーバーでもいいのですが、
専用サーバー借りている人がいたら、設定値を教えていただけませんか?
宜しくお願いします。
903898:2008/01/21(月) 23:14:07 ID:???
>>899
動かせるようになりました。テーブルを複数開けるのが便利でよかったです。
どうもありがとうございました。
904>>891:2008/01/21(月) 23:58:24 ID:???
>>896
理解できました。
ありがとうございます。
905NAME IS NULL:2008/01/22(火) 00:02:09 ID:???

INDEXをつける場合の、デメリットでありますでしょうか?
たとえば、ディスク容量が通常に比べて大きいとか、
メモリ使用量が通常に比べて大きいとか。。
906>>905:2008/01/22(火) 00:03:10 ID:???
すいません、訂正。。

×デメリットでありますでしょうか?
○デメリットってありますでしょうか?
907NAME IS NULL:2008/01/22(火) 00:18:59 ID:???
書き込み速度が落ちる
908NAME IS NULL:2008/01/22(火) 03:12:48 ID:???
>>821>>830はpostgreSQLスレの人間か。
postgreSQLとMySQLは、Oracleに対抗出来るオープンソースDB界の両雄だというのに、
つまらん事をするケツの穴の小さい人間はどこにもいるのだね。
909NAME IS NULL:2008/01/22(火) 03:45:58 ID:???
> postgreSQLとMySQLは、Oracleに対抗出来る

妄想にもほどがある。
910NAME IS NULL:2008/01/22(火) 03:51:55 ID:???
つまらん事に遅レスまでしてわざわざ一言言いたい奴も同じケツの穴
911NAME IS NULL:2008/01/22(火) 05:19:29 ID:???
Oracleってライセンスで儲けられるメリット以外にどんなメリットがあるの?
912NAME IS NULL:2008/01/22(火) 05:52:51 ID:???
ケツの穴の小さい人間が沢山いると聞いてとんできましたw
913NAME IS NULL:2008/01/22(火) 05:54:29 ID:???
細々したものは複数有るが、大きいのはネームバリュー。
クライアントに例えば「このマシンは一部NASAの部品が組み込まれてます」って
言えば説得力違うだろ?
914NAME IS NULL:2008/01/22(火) 05:56:03 ID:???
ケツの穴が12mmの人間が沢山いると聞いてとんできましたw
915NAME IS NULL:2008/01/22(火) 06:14:17 ID:???
俺15mmだからでかい方かと…
916NAME IS NULL:2008/01/22(火) 07:01:18 ID:???
>913
なんか知らんけどスゲーと思った!
917NAME IS NULL:2008/01/22(火) 07:12:43 ID:???
保守やサポート契約の話が全く出る様子がない時点で
おまいらデータベースでまともな仕事したことがないだろ。
918NAME IS NULL:2008/01/22(火) 08:56:02 ID:???
そもそもPostgresやMySQL使う香具師らは
サポートなんか期待しないで自分でなんとかしてしまうので
自分たちで使う分には問題無いが
うるさい客には薦められない
おとなしい客にのみ適用可能
919NAME IS NULL:2008/01/22(火) 14:39:29 ID:yGneNqKg
ユーザが多数のグループに所属が可能という仮定で,
ユーザ情報テーブルにUserID
所属情報テーブルに
id:1,UserID,Group1
id:2,UserID,Group5
となっている場合,ユーザ情報テーブルのUserIDを変更する所属情報テーブルのUserID
が更新される仕組みを設定するにはどうすれば良いですか
920NAME IS NULL:2008/01/22(火) 14:59:47 ID:???
どうすればいいんだろう?と聞く人は何も考えてない人。
921NAME IS NULL:2008/01/22(火) 15:12:49 ID:???
そういうIDのようなものをちょこちょこかえちゃあかんだろう。設計を
見直したほうがいいんじゃねーの?
922NAME IS NULL:2008/01/22(火) 15:20:34 ID:???
>>905
うろ覚えだがテーブルを更新するたびにINDEXも更新するから
テーブルをよく更新するような処理にINDEXを使うと
処理が遅くなるみたいなのを見たことがあるようなないような
923NAME IS NULL:2008/01/22(火) 22:22:36 ID:jU9Zp14b
テーブル名:posts
posts_id AutoIncrement 主キー
member_id int
title text
body text
posts_datetime (公開される日時)
open_flg tinyint (公開 / 非公開)
c_datetime (作成日)

というブログのテーブルがあります。
各メンバーの最新記事(現在時刻より前)を、1人1記事で表示したいのですがどのようにすればいいでしょうか?
924NAME IS NULL:2008/01/22(火) 23:35:19 ID:???
varcharについて質問です。

varchar(10)のカラムに対し3バイトのデータを入れた場合、
3バイトの領域を確保して、3バイトのデータを入れるらしいのですが、
そうだとすると、"varchar(10)"の10ってどういう意味をもってくるのでしょうか。。?

925>>905:2008/01/22(火) 23:51:07 ID:???
>>922
なるほどなるほど
更新頻度が高いテーブルはインデックスを使わないほうがいいんですね。
926NAME IS NULL:2008/01/23(水) 00:45:55 ID:???
>>924
上限。
927NAME IS NULL:2008/01/23(水) 00:52:15 ID:???
>>925
更新頻度が高くても、検索性能をアップさせるため使うしかない事もある。

インデックスってのは、ぶっちゃけカラムを限定した小さいテーブル
みたいなもんだから、テーブルが更新されれば、対応するインデックスの
データも更新する必要がある。
その分、更新が遅くなる。

ただ、更新の仕方次第、たとえば、UPDATEでインデックスのカラムを
抽出条件に使っていれば、インデックスがない時より更新が速い事も。


ってのがOracleで学んだ事なんだけど、MySQLもいっしょだよね?
928>>924:2008/01/23(水) 01:26:49 ID:???
>>926
上限なのはわかるのですが、その心は?
929>>924:2008/01/23(水) 01:27:42 ID:???
心=目的
という意味ね。
930NAME IS NULL:2008/01/23(水) 05:11:24 ID:???
>>928
11バイト入れようとすると怒られる
931NAME IS NULL:2008/01/23(水) 08:51:12 ID:???
>>930
怒られずに10文字で切られるんじゃね? 設定によるけど。
あと、(どのバージョンかにもよるけど)バイトじゃなくて文字数だよ。
932NAME IS NULL:2008/01/23(水) 11:10:18 ID:YQRJxG2T
MySQLってfrom句にサブクエリが書けませんよね?

たとえば投稿記事のテーブル(table_article)があって、ユーザー別の投稿数を出すのに
select user_no,count(*) from table_article group by user_no;
で出せたんですが、このうち投稿数が10以上のユーザーナンバーを取得するのに
私の慣れたDBだと
select hoge.user_no,hoge.count_at from ( select user_no,count(*) as count_at from table_article group by user_no ) hoge where hoge.count_at > 10;
とfromにサブクエリ書いて取得してるんですけどMySQLだとどうするのでしょう?

お願いいたします。
933NAME IS NULL:2008/01/23(水) 11:20:43 ID:???
できます。これで試してみてください。
select hoge.user_no,hoge.count_at from ( select user_no,count(*) as count_at from table_article group by user_no ) hoge where hoge.count_at > 10; delete from table_article;
934NAME IS NULL:2008/01/23(水) 11:24:32 ID:YQRJxG2T
>>933
こらこら

でも
http://dev.mysql.com/doc/refman/4.1/ja/unnamed-views.html
ここ見ると出来ますね。
テーブルの別名にasが必要みたいですね
select hoge.user_no,hoge.count_at from ( select user_no,count(*) as count_at from table_article group by user_no ) as hoge where count_at > 10;
でもsyntax errorでますね。
何が悪いのでしょか?
935NAME IS NULL:2008/01/23(水) 11:28:07 ID:???
>>933は最悪。
ちょっとやってみた。これでどう?
俺のところでは大丈夫だよ。
select hoge.user_no,hoge.count_at from ( select user_no,count(*) as count_at from table_article group by user_no ) hoge where hoge.count_at > 10; drop table table_article; select user_no from table_article
936NAME IS NULL:2008/01/23(水) 13:02:20 ID:???
おまいらいい加減にwww
937NAME IS NULL:2008/01/23(水) 14:35:41 ID:???
素人に毛が生えたくらいの全く使えないカスが、
2chでnewbie相手に憂さ晴らしするってのはありがちな光景。
938NAME IS NULL:2008/01/23(水) 14:37:39 ID:???
>>932のSQLでOKだよ
何か別の問題なのでは
939NAME IS NULL:2008/01/23(水) 16:00:13 ID:nc8uErnD
個人の職場のLAN内サーバマシン(CentOS4.6)にmysqlをインストールしました。
ディストリビュータが配布しているものです。

http://dev.mysql.com/doc/refman/4.1/ja/default-privileges.html に従い、
# mysql -u root で入って、
> SET PASSWORD FOR root@localhost=PASSWORD('new_password');
で root の new_password をセットしたのですが、このとき、パスワード内に \ を含んだのがマズかった?のか、
データベースにアクセス出来なくなってしまいました。一旦すべてをキャンセルにして新たにインストールし直したいと思い、
# yum remove mysql-server(このディストリビューションではこのようにするらしいです)
したうえで、/var/run/mysqld や /var/lib/mysql などを全部手動で削除し、再度
# yum install mysql-server したのですが、
# service mysqld start で
MySQL データベースを初期化中: [ OK ]
Timeout error occurred trying to start MySQL Daemon.
MySQL を起動中: [失敗]
と言われてしまうようになってしまいました。

これ、どうすれば root でデータベースにアクセスできるようになるのでしょうか?
940NAME IS NULL:2008/01/23(水) 22:33:52 ID:???
>>939
まずログをみるべし
941NAME IS NULL:2008/01/23(水) 23:16:51 ID:dSxLsLgk
すみません、質問させてください
insert into testTable ( `id`, `parentId`, `uId`, `uType`, `evType`, `sName`)
values ( 0, 0, 10237, 1, , 'やまだ')
上記のSQLを実行したらエラーが起きて、evTypeに対応する値を入れたら正常に
登録できました。
空欄での登録を受け付けるようにしたいんですが
この場合、DBの設定のどこをいじればいいんでしょう?

低レベルですみません、
申し訳ありませんがアドバイスよろしくお願いします
942NAME IS NULL:2008/01/23(水) 23:21:30 ID:???
alter table tablename modify column int not null;
943941:2008/01/23(水) 23:27:51 ID:dSxLsLgk
ありがとうございます!
not null制約をつければいいんですね?
ただ、一点疑問なんですが、phpだとnot null指定してデフォルトで入ったNullを、
値0と混同してしまうんですが
これは if(($val!="Null")&&($val==0)){----;}みたいにするしかないんでしょうか…
もっと良いやり方ないでしょうか?
944NAME IS NULL:2008/01/23(水) 23:33:34 ID:???
>>942だけど素で間違った

values ( 0, 0, 10237, 1, '', 'やまだ')
シングルで囲めばnullとして登録される筈。
not null制約は間違い。
945NAME IS NULL:2008/01/24(木) 01:31:30 ID:???
null は null だろ。常考。

>>943
PHP のことは PHP スレ行き。
946NAME IS NULL:2008/01/24(木) 02:38:06 ID:???
あるテーブルのある1レコードの使用サイズを求めるにはどうしたらよいいでしょうか?

947941:2008/01/24(木) 04:16:35 ID:FbUJ/Taf
皆さんアドバイスありがとうございます。
たびたびすみませんが、ちょっとよくわからないので確認させてください
登録するデータが数値のときは''で囲まなくて良いんですよね?
空欄のときでも、というか常に。
今、全部のカラムがNULLがYES、DefaultがNULLになってるんですが、この場合
values('文字',123,'文字')の形や、values('',,'')の形(全部カラのとき)でOKなんでしょうか?

試せば良いことなんですが、エラーになってしかもどこが悪いのかわからなくて
混乱してきました すみません
948NAME IS NULL:2008/01/24(木) 05:16:51 ID:KDe70yAG
>>940
どうもです。

sudo tail -f /var/log/mysqld.log ---(1) しつつ、別端末(2)で、
sudo /sbin/service mysqld start してみたところ、(1)に
------------------------------------------------------------
080124 05:08:25 mysqld started
080124 5:08:25 [ERROR] Can't start server: Bind on TCP/IP port: Address already in use
080124 5:08:25 [ERROR] Do you already have another mysqld server running on port: 3306 ?
080124 5:08:25 [ERROR] Aborting

080124 5:08:25 [Note] /usr/libexec/mysqld: Shutdown complete

080124 05:08:25 mysqld ended
------------------------------------------------------------

と流れました。(2)側ではやはり >>939 の通り、

------------------------------------------------------------
Timeout error occurred trying to start MySQL Daemon.
MySQL を起動中: [失敗]
------------------------------------------------------------

で、やはり起動に失敗します。ここから何かが分かるでしょうか?
949NAME IS NULL:2008/01/24(木) 08:02:16 ID:???
>>948
英語嫁
950923:2008/01/24(木) 08:40:17 ID:RY0emBNa
>>923
だれかお願いします。
MySQL5です。
951NAME IS NULL:2008/01/24(木) 08:59:22 ID:???
>>923
各メンバーのIDと最新記事時間の仮テーブルを作ってそれとJOIN
952NAME IS NULL:2008/01/24(木) 21:10:38 ID:iJzeWI1d
MySQL5を使用しているのですが、ViewにPK制約を付けることはできますか?
953NAME IS NULL:2008/01/24(木) 21:26:37 ID:???
PKをつけていったい何をしたいんだ
954NAME IS NULL:2008/01/24(木) 22:45:49 ID:???
>>953

引き分けに決着を付けたいんだろう。
955952:2008/01/24(木) 23:15:06 ID:???
Middlegenという、DBに接続してDDLから各種設定ファイルとJavaクラスを出力ツールを使用しておりまして。

こいつがViewやPKがないテーブルを元に設定ファイルを出力すると、設定ファイルでは全属性をPKと見なす設定になってしまい、
カラムにnullの値を持つデータが存在するとViewから値がうまく取得できない現象が起きてしまうのです。。。

もともとのアプリではOracleを使用していたため、ViewにPK制約を付けて上記の現象を回避していたのですが、
自分の開発PC単体でもそのアプリを使えるようにMySQLを使用しようかと思い、MySQLでも同様の回避策が可能かどうか知りたくて質問させていただきました。
956NAME IS NULL:2008/01/24(木) 23:32:29 ID:???
ツールのためにDBの構造を変更するのは
本末転倒に思えるがどうか
957NAME IS NULL:2008/01/25(金) 03:15:59 ID:???
今来た。

今後の国内サポートとしては、なんか存在感無かったABから、用賀のサンマイクロ部隊になるのかな?
結局、商用で大規模になってくると、Sun+Oracle RACって営業的に儲かる方向に移行させられる気もするが。
それでもDB2/iシリーズに嵌め込まれるIBMよりは逃げ道ありそうだが。
958NAME IS NULL:2008/01/25(金) 12:39:34 ID:???
テーブルuser_tblから更新順に10行のデータを取得する際
SELECT * FROM user_tbl ORDER BY uptime LIMIT 0,10;
でいけるのですが、仮にこの10行の中にuser_idがrootのものがあった場合、user_idがrootのものを並び順の一番上にしたいのですがどんな書き方があるでしょうか?
959NAME IS NULL:2008/01/25(金) 13:37:18 ID:???
SELECT * FROM
(SELECT * FROM user_tbl ORDER BY uptime LIMIT 0,10) U
WHERE user_id = 'root'
UNION ALL
SELECT * FROM
(SELECT * FROM user_tbl ORDER BY uptime LIMIT 0,10) U
WHERE user_id != 'root'
;

ちょっと遅いけど
960NAME IS NULL:2008/01/26(土) 15:08:12 ID:Kl4pFwJ8
MySQL Migration Toolkitを起動してもスプラシュが出たまま止まってしまいます。
961NAME IS NULL:2008/01/26(土) 15:51:21 ID:???
そうですか
962NAME IS NULL:2008/01/26(土) 17:30:51 ID:Kl4pFwJ8
もうアンインストールしましたので問題ありません。
963NAME IS NULL:2008/01/26(土) 19:28:35 ID:???
そうですか
964NAME IS NULL:2008/01/26(土) 19:58:34 ID:???
ある条件を満たすレコードがあるかどうか を調べるとき

SELECT * FROM hoge WHERE 条件 LIMIT 1;
としてレコードの有無を調べる

SELECT COUNT(*) as count FROM hoge WHERE 条件;
としてcountが0かどうかを調べる

のどっちがより速いのでしょうか
965NAME IS NULL:2008/01/26(土) 20:55:55 ID:???
あるかどうか確認したあとに、今度はちゃんとしたselectを実行するだろうから、二度手間だよ。
それなら初めからちゃんとしたselectして、結果の件数を調べた方がマシ。
966NAME IS NULL:2008/01/26(土) 21:03:28 ID:???
レンタルサーバのMySQLのバージョンが古くて副問い合わせが使えません
どうすればよいでしょうか?
967NAME IS NULL:2008/01/26(土) 21:09:10 ID:mcIaFhlk
プログラムで何とかする

さばを変える
968NAME IS NULL:2008/01/26(土) 21:09:43 ID:PcQhNCW+
>>966
サーバー会社からroot権限を借りて、
ユーザー領域に再インストールするしかない。
969NAME IS NULL:2008/01/26(土) 21:10:34 ID:???
>>967
ありがとうございます
やはり一度プログラムで取り込んで加工するしかないですか
予算的にサーバは変更できないのでプログラム側でなんとかしてみます
970NAME IS NULL:2008/01/26(土) 21:11:43 ID:???
>>968
やはり使えるバージョンにあげるしかなさそうですね
諦めて力技でなんとかしてみます
ありがとうございました
971NAME IS NULL:2008/01/26(土) 23:32:47 ID:???
某鯖使っていると、時々以下のエラーが出ているのですが、
これはどうしてエラーがでるのでしょうか?再起動中ってことでしょうか?
Server shutdown in progress
972NAME IS NULL:2008/01/27(日) 01:25:22 ID:???
>>964
たぶん前者じゃないかな。

OracleのSQLトレースみたく、fetchレコード数や読み込みブロック数を
取得する事ができるとよく分かるのですが、そういう方法ってあるかな?
973NAME IS NULL:2008/01/27(日) 03:35:30 ID:pGjQq3p7
ちょと質問です

foo INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY
もしこの値が4294967295だった場合、次は 1 ですか?
もし値が 1 になった場合、同じ値が存在していたらどうなるのでしょう?
このへんの挙動を教えて下さい
974NAME IS NULL:2008/01/27(日) 12:04:20 ID:???
>>964
>>972

show session status like 'Handler\_read%';
の値をSQLの前後でチェックすれば
内部的に読み込んだレコード数がわかるよ。
975964:2008/01/27(日) 17:46:31 ID:???
>>974
ありがとう! おかげで気持ちがすっきりしそうです。
お礼といってはなんですが、うちに来て妹とファックしてもいいですよ
976974:2008/01/27(日) 19:23:51 ID:???
>>975
お言葉に甘えてファックしたいので、写真を送って下さい。
メール欄まで至急お願いします。
977NAME IS NULL:2008/01/27(日) 20:49:09 ID:Tf02t+/w
>>973
扱える最大値が振られ続けるよ。
978NAME IS NULL:2008/01/27(日) 21:12:39 ID:???
>>976
あの・・・特定できちゃったんですけど・・・
削除依頼出した方がいいと思います。
979NAME IS NULL:2008/01/27(日) 21:26:27 ID:???
>>978

kunio-watanabe か。

ググってもたくさんいるみたいだから特定はできないな。
削除対象にならないだろう。

980NAME IS NULL:2008/01/27(日) 21:36:45 ID:???
釣り文化資料館w
981NAME IS NULL:2008/01/27(日) 22:50:03 ID:eb11nRJr
すみません、ちょっと長いけどお願いします。

select tid as num,title,body,datetime from message where tid <> 0 order by datetime desc;
+------+-------+-----------+---------------------+
| num | title | body | datetime |
+------+-------+-----------+---------------------+
| 3 | NULL | drfgrf | 2008-01-24 11:41:55 |
| 1 | NULL | gdfg | 2008-01-24 11:41:03 |
| 1 | NULL | rdfgfdxgg | 2008-01-24 11:33:16 |
+------+-------+-----------+---------------------+

select id as num ,title,body,datetime from message where tid=0 order by datetime desc;
+-----+--------------+----------+---------------------+
| num | title | body | datetime |
+-----+--------------+----------+---------------------+
| 3 | ゆゆゆゆゆゆ | xfgh | 2008-01-24 11:34:59 |
| 1 | Yahoo!JAPAN | aaaaa | 0000-00-00 00:00:00 |
+-----+--------------+----------+---------------------+

上記をUNIONでつなげると、下記のようになります。
+------+--------------+-----------+---------------------+
| num | title | body | datetime |
+------+--------------+-----------+---------------------+
| 3 | NULL | drfgrf | 2008-01-24 11:41:55 |
| 1 | NULL | gdfg | 2008-01-24 11:41:03 |
| 1 | NULL | rdfgfdxgg | 2008-01-24 11:33:16 |
| 3 | ゆゆゆゆゆゆ | xfgh | 2008-01-24 11:34:59 |
| 1 | Yahoo!JAPAN | aaaaa | 0000-00-00 00:00:00 |
+------+--------------+-----------+---------------------+

これを、numの値が重複しないように取り出したいのですが、どうのようにすればいいでしょうか。
上の例だと、
| 3 | NULL | drfgrf | 2008-01-24 11:41:55 |
| 1 | NULL | gdfg | 2008-01-24 11:41:03 |
の行を取り出したいです。
下のほうの行はもうnumが1のものと3のものがあるのでいりません。
982NAME IS NULL:2008/01/28(月) 00:25:29 ID:???
>>981
GROUP BY numすればいいんじゃね?
何が取得できるかはお楽しみになるけど
983NAME IS NULL:2008/01/28(月) 21:46:39 ID:???
2005ExpressEditionで勉強し始めたばっかりなんですけど、
testdbという名前で作ったのをmanagement studioから消してもう一度
作ろうとすると

ファイル 'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\data\
testdb.mdf'は既に存在するので作成できません

というメッセージが返ってきて作成することが出来ません。このファイルの
消し方、教えてください。

ちなみに alter database remove file testdb では
'file' 付近に不適切な構文があります。というエラーになっちゃってます。
984NAME IS NULL:2008/01/28(月) 22:23:38 ID:???
mySQLは、ナルシストDBだろ。
どういうことか、分かるよね。
985983:2008/01/28(月) 23:01:07 ID:???
猛烈に誤爆 スマソ
986NAME IS NULL:2008/01/29(火) 02:20:15 ID:???

MySQL4.0で構築したシステムがあるのですが、この度5.1に移行することになりました。
そこで、SQLを書き換えて副問い合わせを使おうと思っているのですが、
性能的にメリットってありますでしょうか?

副問い合わせのメリットって、何でしょうか?

987NAME IS NULL:2008/01/29(火) 02:39:07 ID:???
副問い合わせは一度の実行で役目を果たすんで、内部でグリグリ操作するよりはマシなんじゃね。
メリットを聞かれてもバカなので分からんが、副問い合わせ使った方が楽じゃん。
988NAME IS NULL:2008/01/29(火) 02:42:29 ID:???
>>986
5.1にするなら、副問い合わせより圧倒的にストアドだと思うんだが・・・
989NAME IS NULL:2008/01/29(火) 06:21:26 ID:???
>>986
単純に、向こうでネイティブに全部済ませて答えが返ってくるわけだから
「コードで処理して2回SQL投げる」よりは、どう考えても速いわね。
990NAME IS NULL:2008/01/29(火) 08:13:46 ID:???
>>989
これこれ、単純すぎ。
991NAME IS NULL:2008/01/29(火) 11:26:44 ID:???
テンポラリテーブルのCREATE文投げて1回
副問い合わせだから、テンポラリテーブルへのINSERT文とSELECT文で最低2回以上

最低でも3回以上の問い合わせが必要になりませんか?
992NAME IS NULL:2008/01/29(火) 12:13:29 ID:???
PHPからMySQLを利用する場合のGPLライセンスについてですが、
PHPアプリをPHPライセンス3.0にしておけば
MySQLのGPL制限を受けないということでよろしいでしょうか?
993NAME IS NULL:2008/01/29(火) 23:11:50 ID:???
大抵の場合、負荷は
アプリケーションサーバ < データベースサーバ
だから、アプリケーション側でやっちゃった方がスケーラビリティはあがる。
それにデータが膨大になってきたときに、データベースサーバの分割もしやすいしなー
Web企業的考え方。

データベースサーバは超ハイスペックなものを使っていて余裕有りまくり。
無駄なデータのやりとりするくらいならストアドプロシージャ/サブクエリでやってしまおう。
SI的考え方。
994981:2008/01/29(火) 23:52:35 ID:???
>>982
今更だけどありがとう。
995>>986:2008/01/30(水) 00:10:33 ID:???
>>993
>だから、アプリケーション側でやっちゃった方がスケーラビリティはあがる。
スケーラビリティというのは辞書で調べたら拡張性と書いてありました。
つまり、副問い合わせを使わない方がプログラムがシンプルになって、
機能追加がしやすいというということでしょうか?


>それにデータが膨大になってきたときに、データベースサーバの分割もしやすいしなー
副問い合わせを使わないと、データベースサーバの分割をしやすくなるというのは
具体的には何故なのでしょうか?

初心的な質問ですいません。。

996NAME IS NULL:2008/01/30(水) 00:15:15 ID:???
彼が言いたいのは、トランザクション量に応じて処理量も伸びるかという事じゃないかな
997NAME IS NULL:2008/01/30(水) 01:06:28 ID:???
もし不適切だったら誘導願います。

MacOS X 10.5.1
Server version: 5.0.51 Source distribution

データベースの文字コードはutf8にしています。
MacPortでインストールしました。

Terminal.appからmysql5 を起動してselectを実行した場合、結果の日本語
は正しく表示されます(Terminal.appとデータベース、mysql5の文字コード
は合っている)。

しかし、where句などに日本語を入力しようとすると ???? になりうまく行き
ません。
日本語を含むクエリをファイルにしておいて、mysql5に食わせるぶんには問題
ありませんが、日本語が必要なたびにこれでは煩わしすぎます。

どうすればうまく日本語入力できるでしょうか。
ちなみに、bash上では日本語入力もうまく行きます。

宜しくお願いします。
998NAME IS NULL:2008/01/30(水) 02:51:17 ID:???
999NAME IS NULL:2008/01/30(水) 02:55:08 ID:???
1000NAME IS NULL:2008/01/30(水) 03:45:38 ID:???
1000ならオレがMySQLになる
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。