MySQL 総合 Part12 at DB
[2ch|▼Menu]
1:だよもん!!!
07/09/23 10:57:29 RN+MewUh
快速 RDBMS、MySQL の総合スレです。
前スレ[MySQL 総合 Part11] スレリンク(db板)
[関連スレと過去ログ]
URLリンク(find.2ch.net)
URLリンク(makimo.to)

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

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

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

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



2:NAME IS NULL
07/09/23 10:58:56
【関連ツール及びユーティリティ】

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

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

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

【関連書籍】

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

2ch風偉人伝 AA はこちら
URLリンク(www.aadayo.com)

3:NAME IS NULL
07/09/24 21:17:06 pceZ+XvF
連続のUPDATEの際、INSERTのように1文で書くことはできますでしょうか?
以下のように書いてみましたができませんでした。

UPDATE hoge SET title='HOGE1' WHERE seq=1, hoge SET title='hoge2' WHERE seq=2;

4:NAME IS NULL
07/09/24 22:06:40
更新データを蓄えるための作業用のテーブルを作ってよければ、こんな感じで。

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

普通はこんなことしないと思うけど…


5:NAME IS NULL
07/09/25 03:54:31 QTKb0E3V
>>4さん
レスありがとうございます。
普通は一回一回UPDATEするということでしょうか?
連続で4回ほどUPDATEすることが確実なのでINSERTのように連続でINSERTすることで負荷を軽減したいと思ったのですが・・・

6:NAME IS NULL
07/09/25 04:34:44
UPDATEはB-TREE索引をたどって該当行をつかむ→書き換える、
って流れだから、もし1つのSQLで複数まとめて書く文法があったとしても
内部動作的はこれを1回ずつ繰り返すしかない。
だから効率的にはならないんだよ。
INSERTは表の末尾に一度に書き込めばいいから効率的にできるけどね。

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

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

あとは、4回というのが確定ならそのための専用のストアドプロシージャを
書けばクライアント⇔サーバ間の通信量とかは減らせるね。
(ストアドの中では結局UPDATEを4回やるわけだけど)


7:NAME IS NULL
07/09/25 13:13:39 I2co02Wi
MySQL4.1でsortの基準をExcelと同じようにする方法はありますでしょうか?

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

になります。MySQLでExcelのようなsort方法は可能でしょうか?


8:NAME IS NULL
07/09/26 00:29:32
おまえら、まだ前スレが残っていますよ。

9:NAME IS NULL
07/09/26 08:02:13
ほっとけば落ちるから問題なし

10:NAME IS NULL
07/09/28 04:44:53 e5bj6BJY
あげ

11:NAME IS NULL
07/09/30 22:18:21 kM0xx8Ko
こんにちわ表をCRETE TABLeでつくってるのですがレコードの名前と型の名前のかきかたと 型の数字だけ表示するやり方がわかりません ちなみに名前はCO CO COUNTRY_NAMEで型がREGION_IDです よろしくおねがいします

ちなみに表の名前はcountriesで 
表をだすときは SELECT * FROM COUNTRIES: です教えてください

12:NAME IS NULL
07/10/01 01:08:52 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 |   |      |   |     |   |     |


よろしくお願いします。

13:NAME IS NULL
07/10/01 01:37:19
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?

14:NAME IS NULL
07/10/01 07:09:32
TableAの設計が間違ってると思うのは漏れだけ?

15:NAME IS NULL
07/10/01 09:30:42
>>14
おばあちゃんが言っていた
なんでも正規化すればいいわけじゃない ってな

16:NAME IS NULL
07/10/01 10:48:20
以下のようなテーブルがあります。(他の情報は省略してます。)

17:NAME IS NULL
07/10/01 20:14:38
馬鹿には見えないテーブルか

18:NAME IS NULL
07/10/01 21:59:42
>>17
裏2chじゃないの?

19:NAME IS NULL
07/10/03 14:50:47 L9QuLInZ
ORDER BYで近い数値順に並べ替えとかできませんかね?

2500に近い順

var
1945
4278
5362
4896
3542
1457
1234

 ↓

var
1945
1457
3542
1234
4278
4896
5362




20:NAME IS NULL
07/10/03 16:09:54
>18
鮫島に関する投稿は消されるんだよ素人

21:NAME IS NULL
07/10/03 19:06:01
select hoge from fuga order by abs(hoge - 2000)

22:NAME IS NULL
07/10/03 19:28:21
掲示板に3分以内に投稿されたレスの数を取得するSQL文を書こうと思っています。

URLリンク(dev.mysql.com) を見たのですが、比較部分をどうすれば良いのかが分かりません。

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

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

上のSQL文で正しいかどうか、間違っていればどこを修正すれば良いのかを、ご教示お願いします。

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

--------------
webプログラム板で質問したんですが、板違いといわれてこちらで再質問させてもらいました

24:NAME IS NULL
07/10/04 21:22:46
俺にはweb板が正しくここが板違いにみえるが。。。

25:NAME IS NULL
07/10/04 23:53:10
>>23
MySQLなんて大げさなやつじゃなくて
PHPのAPIのSQLite使ったセッション管理使えばいいんじゃね?

PHPスレかSQLiteスレに行くといいと思うよ。

26:NAME IS NULL
07/10/04 23:58:36
PHPスレで拒否られてるんだよ、>>23は。
PHPスレでDBの作りの質問をし、MySQLスレでWEBセッション管理の質問
も追加してくれば、どちらでも違和感感じる罠。
PHPとMySQL固有の話じゃ無いんだから、もっと一般的な話題のスレで
聞くべき。
で、要求されるセキュリティのレベルが分からない以上、お好きなように
としか言いようが無い。


27:NAME IS NULL
07/10/05 00:00:10
>>26
一度や二度のアタックであきらめるような恋なら最初からするな。

28:NAME IS NULL
07/10/05 00:04:46
はあ?

29:NAME IS NULL
07/10/05 00:39:42
規模にもよるけど悩むぐらいなら作れって
あ、ねぇきいてきいていますっごいいっぱいうんこでてるよ
すっごいいっぱい

   うんこが


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

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

トイレからカキコ

30:NAME IS NULL
07/10/05 11:27:29 +u0dyj/F
すみませんが質問させてください。

MySQL5.0

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

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

から先頭のアルファベットがA-C、二番目のアルファベットがC-Gを
SELECTしたいのですが、俺がアホなのか何回やっても構文エラーが
帰ってきます・・・。

31:NAME IS NULL
07/10/05 11:35:42
like 'AC%' or like 'AD%' or like 'AE%' or .... or like 'AG%' or
like 'BC%' or ...
like 'CC%' or ...


32:30
07/10/05 11:43:36 +u0dyj/F
>31
ありがとうございます。
まじっすか!?
力技しかないのか〜。

33:NAME IS NULL
07/10/05 13:35:11
where data between 'A' and 'C'
and substr(data, 2, 1) between 'C' and 'G'


34:30
07/10/05 14:10:13 +u0dyj/F
おぅおぅ!感動っす♪
ありがとうございました。

35:NAME IS NULL
07/10/05 21:27:23 ywDCVcNs
>>30
正規表現使えよ・・・

36:NAME IS NULL
07/10/05 22:41:19
>>30
RLIKE でおk

37:NAME IS NULL
07/10/06 05:59:29
URLリンク(dev.mysql.com)

38:NAME IS NULL
07/10/06 09:02:35 ALRD9ApN
"GROUP BY column"となっているときcolumnがNULLの時は纏めたくないのですが、
どのようにしたら良いでしょうか?

39:38
07/10/06 09:04:18
すみません、Ver 3.23です。

40:NAME IS NULL
07/10/06 11:57:40
WHERE column is not null GROUP BY column


41:38
07/10/06 12:06:44
>>40
ありがとうございます。
ですが、それだとcolumnがNULLのものは、纏める纏めない関係無しに
全て表示されなくなってしまうのですが。。

42:NAME IS NULL
07/10/06 12:11:34
mysqldumpでDBのフルバックアップを二回取ったんですが、
一回目取った分と二回目に取った分の差分を埋めることってできませんかね?

43:NAME IS NULL
07/10/06 12:14:04
これでどう

select ... from ... where column is not null group by column
union all
select ... from ... where column is null;


44:38
07/10/06 12:36:43
>>43
ありがとうございます。
うーん、それしかないですかね。。二つクエリ発行するのは負荷の都合から避けたいのですが。

45:NAME IS NULL
07/10/06 15:30:16
>>24-26
ごめんよ 自分でどうにかしてみるよ

46:NAME IS NULL
07/10/06 15:37:05
じゃあ
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ずつ増えるのが謎…

47:NAME IS NULL
07/10/06 20:23:41
ワロス
3から始まらないのも謎...

48:NAME IS NULL
07/10/07 09:03:47 QwQK+lic
A,B,Cというカラムがありまして、
A,Bの項目が重複しているレコードを全て取得したいのですが、どのようなSQLを発行すれば宜しいでしょうか?

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

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

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

A項目B項目とも内容が不定なので、WHERE文が作れなくて挫折してしましました。
宜しくお願いします。

49:NAME IS NULL
07/10/07 09:12:10
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
;

50:NAME IS NULL
07/10/07 09:24:17
>>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;


51:NAME IS NULL
07/10/07 13:33:39
>>50
ありがとうございました。
出来ました!!
色々四苦八苦していたので助かりました。

52:NAME IS NULL
07/10/07 15:00:28
すみません、テーブルを作っていたら以下のようなエラーが出ました
本の通りしたつもりなんですが、どういう問題なのでしょう?

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

53:NAME IS NULL
07/10/07 15:10:48
>>52
single quoteではなくてback slashだろw

54:NAME IS NULL
07/10/07 15:19:31
>>53
本当にすみません どこの部分でしょう?
ドシロウトなので、自分なりに慎重にやってるつもりなんですが、、
もう少し詳しくお願いします。

55:NAME IS NULL
07/10/07 15:53:06
「'」と「`」は違う文字


56:NAME IS NULL
07/10/07 15:57:59
DBにデータをinsertしまくってるんだけど、

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

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

/etc/mysql/my.cnfにそれらしき設定項目も無い
だれかヘルプ

57:NAME IS NULL
07/10/07 16:13:07
log-binっていうそれらしき設定項目があるはずなんだが

58:NAME IS NULL
07/10/07 16:27:57
>>57
確かにあった、これだったのか。
 log-bin
とだけしかなかったら何かわからずスルーしていたんだけど、
 log-bin=/hoge/log
とかすれば場所変更できるみたいだね!
dクス

59:NAME IS NULL
07/10/07 17:34:27
>>53
back quote な。

60:NAME IS NULL
07/10/07 17:35:32
URLリンク(dev.mysql.com)

61:NAME IS NULL
07/10/07 17:41:42
>>60
ありがとう。
あとは有効期限(expire_logs_days じゃ無理かな?)を指定できればいいんだけど、
検索すべきキーワードもわかったから、あとはなんとか自分で調べるよ。

62:NAME IS NULL
07/10/07 21:56:39
hogeフィールドのデータが
「yama,kawa,tani」のデータに対して、
yama か kawa か tani であれば一致するようにしたい場合、
WHERE hoge REGEXP (yama|kawa|tani)
でいけるかと思いますが、
他にもっとスマートな関数や演算子とかないでしょうか。

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




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

これ?

64:NAME IS NULL
07/10/08 12:11:37
MySQL Command Line Client で何か select 文を発行すると

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

のように - や | や + で整形して表示されますが、これらを自由に設定するには
どうしたらいいですか? ORACLE でいう SET COLSEP=hemohemo という感じです。

65:NAME IS NULL
07/10/08 12:22:48
>>64
できない

66:64
07/10/08 12:30:42
>>65
ガ━(゚Д゚;)━━ン!!!!!


ありがとうございましたorz

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

8時間たった今もかわらずHDDが絶えずカリカリ
mysqldは何してるの?

68:67
07/10/08 16:43:34
↑の質問はスルーでお願い。
そもそもプログラムミスでコミットの粒度が大きすぎたのが原因かも。
直してもなるようだったら、また質問させてもらうよ


69:NAME IS NULL
07/10/08 18:18:51
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を
完了させる。でもマニュアルには「これらの操作には数分間、または極端な
場合には数時間かかる事があります。」と書いてある。

70:NAME IS NULL
07/10/08 19:19:13
パスワード無しでテーブルの有無を確認するだけのユーザーを作りたいのですが、
どのような権限を与えればいいのでしょうか?

71:NAME IS NULL
07/10/09 00:26:59
>>55
ありがとうございました
フィールド名って「'」でくくらなくてもOKなんですね
なんで自分の本はくくってるんだろう、、  ともかくありがとう

72:NAME IS NULL
07/10/09 01:26:00
>>71
いやフィールド名で使うのは「'」ではなく「`」。

73:NAME IS NULL
07/10/09 06:24:57
>>72
おお、出来ました
というか、パソコン買って8年目にして初めて「`」の存在に気づきましたw
ありがとうございました!

74:NAME IS NULL
07/10/09 09:09:42
数字を含むカラムがあって
その中からある範囲の数字を含むレコードが
存在するかしないかだけを調べるにはどうすればよいですか


75:NAME IS NULL
07/10/09 09:19:05
>>74
簡単にサンプルを示してくれ

76:NAME IS NULL
07/10/09 09:19:10 NjjCqEdh
SELCT COUNT(*) TOTAL FROM SAMPLE WHERE COLUMN > 0 AND COLUMN < 100;

77:NAME IS NULL
07/10/09 17:35:33 /I5hC7wb
合計で数百万行で1.5GB相当のデータを47分割してテーブルに格納しています。
検索するときに、全てを結合させて検索していますが、
結合させずにひとつのテーブルに全てのデータを格納しているときと、
処理速度は変わらないのでしょうか?
ためしてみようと思ったのですが、1.5GBほどのデータ量のため、とても時間がかかってしまいます。

78:NAME IS NULL
07/10/09 18:12:16
>>77
全てを結合ってどういうこと?

79:NAME IS NULL
07/10/09 18:22:46
>全てを結合ってどういうこと?
つまりSEXってこと。

80:NAME IS NULL
07/10/09 19:47:45 v9b6pzkg
なんでスケールを小さくして試してみようとは思わないのかしら?

81:NAME IS NULL
07/10/09 20:05:59
1テーブルに数百万行の状態で検索した場合の速度が知りたいからじゃね?

82:59
07/10/09 21:55:34
>>73
なんで俺のヒントはスルーなんだよ!!


83:NAME IS NULL
07/10/09 21:56:09
>>74
RANGE か BETWEEN てなかったっけ?

84:NAME IS NULL
07/10/10 00:47:20
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';



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

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

また、
WHERE 'keyword' REGEXP ^field$;
みたいに記述したい場合はどうすればいいんでしょうか。
ちなみにこれでは文法エラーがでます。


86:NAME IS NULL
07/10/10 03:27:08
>>84
そりゃ username = 'wildcard' のレコードの userpasswd カラムの値は
'abc' じゃないからだろ

87:NAME IS NULL
07/10/10 08:40:52
>>85
1番目 REGEXPの演算子の問題だから、フィールド値を左右どっちに使っても問題ない。

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

1 にしても 2 にしても遅そうだけど。

88:NAME IS NULL
07/10/10 12:10:03
データベースに保存されているデータを
丸々そのまま別のところで使用したい場合、
どうすればいいのかな?
容量は3GB近くなんだが・・・

89:NAME IS NULL
07/10/10 13:28:55
DB止めれるならtar玉で圧縮したら?

90:NAME IS NULL
07/10/10 13:35:08
>>89
鯖にもよるんですね
さくらのプロ借りてますが、/db/ってとこに入れればいいのかな・・・?

91:84
07/10/10 13:36:35
どんな条件でもヒットするような
フィールド値って存在しないんでしょうか?
%にすれば何でもヒットしてくれるかな、というあふぉな考えをしてました。


92:84
07/10/10 13:39:47
そういえば、
mysqlデータベースのuserテーブルって、Hostフィールドが%で機能してますよね。

あれは、MySQLのユーザ処理部分がそういう風に作られてるだけで
一般的な使用方法は無理なのでしょうか。

93:84
07/10/10 13:40:50
>>90
さくらならphpmyadminでエクスポートすればよいのでは。

94:NAME IS NULL
07/10/10 13:41:37
>>93
インポートかな・・・?
流石に3GBもあるのを一度にインポートするのは大変な気も・・・
たとえ分割してても

95:NAME IS NULL
07/10/10 13:58:24
>>91
存在しない 意味がないから

>>92
このカラムを読み込んだプログラムが
% の場合は任意のホストとして扱う、という処理なんだろう   きっと、、、

96:NAME IS NULL
07/10/10 15:04:23
>>90 さん、レンタルサーバーを借りているなら、仕様書なりありませんか?
また、サポートなどで聞くことはできませんか?

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

また、DBが共有サービスであれば、DBを止めることもできないかと思われます。
サーバーへログイン可能であれば、
URLリンク(www.nilab.info)

こういったものを参考にできませんでしょうか?


97:NAME IS NULL
07/10/10 15:16:04
>>91
確かにそういう特殊な値はほしいときがあるね

98:NAME IS NULL
07/10/10 15:43:32
>>84
SELECT * FROM `users` WHERE 'abc' like `userpasswd`;
で絞り込んだ後、フロントエンドで処理するんじゃだめ?

99:NAME IS NULL
07/10/10 15:44:38 g44V9bOq
>>98
もしくは素直にNULLを入れといて
SELECT * FROM `users` WHERE `userpasswd` = 'abc' or `userpasswd` is null;
する方が素直かな。

100:NAME IS NULL
07/10/10 16:39:07
>>96 は?何か?

>>90
show variables like "datadir";
でDBのデータディレクトリを特定
FLUSH TABLES WITH READ LOCK;
でDBのカキコ禁止
データディレクトリを丸ごと tar zcvf
終わったらカキコ許可
UNLOCK TABLES;
でsftpとか lftp で tarしたDBファイルを引越し先にput
後はわかるだろう。


101:NAME IS NULL
07/10/10 19:47:56
もしかしてさんざん既出かと思うのですが、ざっとググった限りでは解決しなかったので
質問させてください。

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

これを解決するにはソースからコンパイルするほかないんでしょうか?
なお現在手に入る最新のrpmは以前のstandardではなくcommunity版となっており、
コンフリクトのためインストールできませんでした。

102:NAME IS NULL
07/10/10 21:25:21
そのとおり

103:NAME IS NULL
07/10/10 21:44:38
>>96
URLリンク(web.arena.ne.jp)

104:NAME IS NULL
07/10/10 21:45:24
ごめん
こっちだった
URLリンク(web.arena.ne.jp)


105:NAME IS NULL
07/10/10 21:51:45
URLリンク(web.arena.ne.jp)

106:NAME IS NULL
07/10/10 22:05:08
mysql> show global status;
で出てくる送信バイト数Bytes_sentの値が、32bit(4GB)で桁あふれして
ゼロに戻っちゃうんですが、仕様ですか?

いまどき、4Gとかで桁あふれされても困るんですが。
何回桁あふれたかperlスクリプトか何かでチェックしてバイト数だすのとか面倒くさす
どうにかなりません?

107:NAME IS NULL
07/10/10 22:15:27
>>106
いまどき32bit環境かよ!

108:NAME IS NULL
07/10/10 22:15:57
すまんかった、今すぐOpteron買ってくる!

109:NAME IS NULL
07/10/10 22:36:50
>>106
URLリンク(bugs.mysql.com)
5.0.44 及び 5.1.20-beta で修正した、とのこと

110:NAME IS NULL
07/10/10 23:07:16
アルェー(・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っすか・・・

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

「あ_い___うえ____お」→「あ_い_うえ_お」
こんな感じで。
一回、スペースで切り分けて、スペースを除去してからスペースを一つつけてつなぎ合わせるしかないのかな???

112:NAME IS NULL
07/10/11 00:58:35
スペース3個をスペース2個に置換をできるかぎりやる

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

となって、必ずスペース1個か2個になる。
スペース3個がなくなったら、スペース2個を1個に置換すればおk

113:NAME IS NULL
07/10/11 01:10:57 dt5N6A3I
>>112
やっぱりデータベース内では限界なのかなあ???

114:NAME IS NULL
07/10/11 01:15:34
いや、データベース内で置換できるだろ、replaceで

115:NAME IS NULL
07/10/11 01:47:43 D7bY0G8T
datetimeのカラムにインデックス付けて、
年とか、年月とか、年月日で集計したいのですが
like 'year-month%'で検索するとインデックスが使用されません
インデックスが使われるようにするにはどうすればいいですか?

116:むこうの246
07/10/11 04:08:30
どなたか、こちらの件わかる人おりませんか??
スレリンク(db板: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があるってことは、ちゃんと通ったはずなんですが・・)

117:NAME IS NULL
07/10/11 10:55:56
>>115
範囲指定する。


118:NAME IS NULL
07/10/11 11:53:28
文字列の中から2つ以上並んだスペースを1つのスペースに置き換えることって

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

119:むこうの246
07/10/12 04:33:11
問題解決しました。どうもすいません。

120:NAME IS NULL
07/10/12 07:15:11
s/\s+/ /g

121:NAME IS NULL
07/10/13 15:35:09
>>120
マルチバイトで正規表現ってちゃんと使えるようになったの?
まだ鬼車パッチ当てなきゃだめ?

122:NAME IS NULL
07/10/14 00:44:56
なってないような気がする。


123:NAME IS NULL
07/10/16 17:22:51 19Z+CTul
曖昧検索のやり方を教えてください。

検索用語「手伝う」

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

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

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

このように出したいのですが、そういった検索方法はありますでしょうか?


124:NAME IS NULL
07/10/16 21:41:18
DBに曖昧検索機能など無い

125:NAME IS NULL
07/10/16 21:44:19
つオントロジ

126:NAME IS NULL
07/10/16 23:35:24 wl91U+ML
類義語辞書DB作ってFullTextSearch回すとか


127:NAME IS NULL
07/10/16 23:41:50 JuRjnLqb
マッチ条件がだんだん短くなるような検索があればいいんだな、多分

128:NAME IS NULL
07/10/17 01:17:33 hXE7fedj
「手伝う」でマッチする文章を高いスコアとし、
「手伝」「伝う」でマッチするのはそれより低いスコア、
「手」「伝」「う」でマッチするのはもっと低いスコアとして

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

どれくらいのスコアにすればいいのかは統計をとって最適値を求めればいいのでは

129:NAME IS NULL
07/10/17 01:21:04
「てつだう」はスコア低くていいのかな

130:NAME IS NULL
07/10/17 03:11:56
>>133
ないので自分で作ってください

131:NAME IS NULL
07/10/17 16:27:20
かなりアクセスのあるデータベース(MySQL)を使用する際、

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

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

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

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

参考コメントきぼんぬ

132:NAME IS NULL
07/10/17 17:35:21
データの総量が8GB未満ならB。
ディスクにアクセスしないのでCPU性能が出るから。

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

構成書き間違ってない?

133:NAME IS NULL
07/10/17 17:46:22
MySQLクラスタって参照のみでもそんなに速度がでないって言うし、それもプロ中のプロが限界まで調整した結果なんだろうし・・・・
相当単純なことしかさせない場合は別として、Bの方が安全かなあ?

134:NAME IS NULL
07/10/17 18:49:45
会費制の会員システムをphp+mysqlで組もうと思うのですが、
料金部分のテーブル構成に非常に悩んでます。
どこか参考になるところないでしょうか。

ここの決定でほぼ決まるような気がします。

135:NAME IS NULL
07/10/17 19:03:22
>>134
恐らくデータ型を悩んでいるんだと思いますが、
DECIMAL型で作成すれば、あとは特に問題は生じないと思います。
理由はお分かりだと思いますが、まるめ誤差を防ぐためです。

136:132
07/10/17 19:36:19
>>133
台数ってHDDの数じゃなくてサーバの台数?
勘違いしてた。前言撤回。
Aでレプリケーション組むのがいいと思う。
更新用が1台、参照用が3台。
MySQLは2コア→4コアの性能向上があまり良くないから。

ストレージエンジンはMyISAMかInnoDBで。
MySQL Clusterは忘れていいよ。あれは特定用途向けの単機能製品。
エンジンの機能実装がしょぼいのでちょっと凝ったSQL投げると性能劣化する。

137:133
07/10/17 20:41:11
>>136
すまんが俺は131じゃないんだ。
参照のみっていっても、必ずしもレプリケーションで対応できるわけでもないんじゃないかなっていう意味で>>133を捕らえて欲しい。

138:NAME IS NULL
07/10/18 18:12:39 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以上だが膨大なデータ量になるかも

できればタグ同士をフォルダーのように関連付けたりもしたいのですが皆さんならどんなテーブルにしますか?

139:NAME IS NULL
07/10/18 18:15:31
少なくとも案2はねえな。

140:NAME IS NULL
07/10/18 20:24:54
案2にタグテーブルを追加して、
t_bookmark_taggingテーブルのtagをタグテーブルのプライマリキーに置き換える。

141:NAME IS NULL
07/10/18 23:11:15
>できればタグ同士をフォルダーのように関連付けたりもしたい

って具体的にどういうことがしたいん?


142:NAME IS NULL
07/10/19 03:37:41 H+ebEc3A
>>140
ありがとうございます!
汎用性高そうですね
勉強になります!
>>141
簡単にいうとgoogleみたいなことです

143:NAME IS NULL
07/10/19 10:45:44
>>142
「googleみたいなこと」って全然意味が分からないのですが。
全文検索?

144:NAME IS NULL
07/10/19 12:11:34
gmailのラベルのことを言ってるのかな

145:NAME IS NULL
07/10/19 12:47:16
YouTube のタグみたいなのじゃなくて?

146:NAME IS NULL
07/10/19 13:08:52 vJ6ps9vK
>>143
キーワード「サル」の類義語として「ゴリラ」、「チンパンジー」などを階層的に保持したいのです。
サルで検索したらゴリラにカテゴライズされるものも表示したいのです。

自分なりに考えてみたのですが、ムズかしい!

147:NAME IS NULL
07/10/19 13:46:45
そういうのはスマートにやろうとするより、ベタにやったほうがかえってうまくいったりする

148:NAME IS NULL
07/10/19 14:21:48
>>146
そういうのは >>140 のタグテーブルにツリー構造を作るのがよかんべ。
ただ、ちゃんと考えないとパフォーマンス悪くなりそうだけど。


149:NAME IS NULL
07/10/19 18:07:04
>>142
まずしっかり正規化してみる。おのずと答えが出るものだ。

150:NAME IS NULL
07/10/19 18:09:44
google の 関連検索 見たいな事をTAGでやりたいのではないかと。
というか質問しておいて言葉足りな杉。

151:NAME IS NULL
07/10/19 18:16:44
>>150
そういうことか。てっきりYouTubeのタグみたいなのかと思ったぜ。

152:NAME IS NULL
07/10/19 18:32:36 a+9wl6Y6
DBで一部の文字列が検索できなくなりました。
文字コードはUTF-8です。

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

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

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

「風居」で何か特殊なことでも起きているのでしょうか?

153:NAME IS NULL
07/10/19 18:43:18 a+9wl6Y6
追記です。
型はTEXTです。

154:NAME IS NULL
07/10/19 18:53:40
揚げ足とりみたいなことを聞いてすまんが、前まではできてたって意味なの?

155:NAME IS NULL
07/10/19 18:54:39 a+9wl6Y6
>>154
いえ、今回初めてやりました。
検索できなくなりました。 →検索できません。

に訂正します、すみません。

156:NAME IS NULL
07/10/19 19:06:45 a+9wl6Y6
SHOW VARIABLES
で文字コードをチェックしたところ、「ujis」になっていました。

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

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

「居」の文字コードはUTF-8です。

157:NAME IS NULL
07/10/19 20:34:35
「風居」とう文字列に対しての検索はしたの?

158:NAME IS NULL
07/10/19 21:14:17 fKi8KFKE
>>157
ID変わります。

「風居」に関してヒットしました。

159:NAME IS NULL
07/10/19 21:41:14
>>152
バージョンは?


160:NAME IS NULL
07/10/19 21:46:53 fKi8KFKE
肝心なバージョン忘れていました
さくらレンタルサーバーの4.0.2xです。

161:NAME IS NULL
07/10/19 22:57:15
あと大事なこと書いていませんでした。
現在、彼女募集中です。

162:NAME IS NULL
07/10/19 23:16:15
>>161
彼女の仕様は?
レンタルでもいいの?

163:NAME IS NULL
07/10/19 23:20:42
>>162
INSERTどころかSELECTも無理だよ。

164:NAME IS NULL
07/10/19 23:38:11
>>162
できれば居酒屋で働いてる様な娘がいいです

165:NAME IS NULL
07/10/19 23:38:33 fKi8KFKE
>>161
今日好きな子に彼氏ができたとこだ
だからその辺りは突っ込まないでくれ・・・

166:NAME IS NULL
07/10/19 23:43:57 fKi8KFKE
って大阪支部は大阪かwww把握wwww
3人いるみたいだから俺も参加していい?
何か参加資格とかあるのかな?

167:NAME IS NULL
07/10/19 23:45:46 fKi8KFKE
誤爆orz

168:NAME IS NULL
07/10/19 23:55:10
VIPなんぞ覗いてるから
彼女ができないんだよ

169:NAME IS NULL
07/10/19 23:55:54 fKi8KFKE
>>168
元カノなんだけどね・・・
ずるずる引きずってるのよ・・・
だからこんなレベルなんだ・・・

170:NAME IS NULL
07/10/19 23:58:03
もう drop して
新しいテーブルを create しろよ

171:NAME IS NULL
07/10/20 00:01:32 fUFTSHBK
新しいテーブルが作成できないみたい
心のパーミッションエラーだって・・・

172:NAME IS NULL
07/10/20 03:13:49
そもそも4.0はutf8サポートしてないんだけどそのへんどうなの


173:NAME IS NULL
07/10/20 04:55:33
案の定WebProg板から移動してましたね>>152

174:NAME IS NULL
07/10/20 05:13:56 2AwTGoKZ
すいません初心者でよく分からないのですが
ログインページであるIDでログイン後、そのIDの列にセッションIDを登録したいと考えています。
テーブルにはIDがすでに登録されていてSessionidにはNULLが入っている状態です。
教授宜しくお願い致します。

175:NAME IS NULL
07/10/20 06:15:04
すいません意味がわかりません・・・

176:NAME IS NULL
07/10/20 06:27:02
教授は土日休みです

177:NAME IS NULL
07/10/20 06:57:25
update USERTABLE set Sessionid='hogehoge' where id='hemohemo';

178:NAME IS NULL
07/10/20 07:16:24 fUFTSHBK
>>172
それは初耳です・・・

>>173
そのとおりです。

179:NAME IS NULL
07/10/20 09:07:33
>>178
これか。

9.5. Unicode のサポート

MySQL バージョン 4.1 以降、Unicode データを保存するために次の新しいキャラクタセットが用意されています: ucs2 (UCS-2 Unicode キャラクタセット)および utf8 (Unicode キャラクタセットの UTF-8 エンコード)。


180:NAME IS NULL
07/10/20 09:44:58 mSjzHsRr
すみません質問します。
今、テーブル作ってるんですが、フィールドの数が90個くらいになりそうです。
これは異常でしょうか。初心者なので、判断に迷っています。

181:NAME IS NULL
07/10/20 10:31:40
>>180
どんなテーブルかわからんと判断も出来ん。

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

頼むから正規化しろよ 第二正規形
スレリンク(db板)


182:NAME IS NULL
07/10/20 10:33:50
>>180
設計間違ってるで九分九厘間違いないです。

(それ判断できない人が、ガチで90必要な大規模案件やってるわけないのでね)

183:NAME IS NULL
07/10/20 12:23:24
>>180
正規化やってその数なら問題ない
1000のカラム抱えたテーブル扱ってるけど普通に動くし

184:NAME IS NULL
07/10/20 13:00:19
180です  回答ありがとうございます。
テーブルは、ライブの情報を扱うものです。なので、
開催日、開始時間、料金、イベント情報etcの基本情報と
出演者名、出演者のURL、演奏楽器 の出演者情報etcの2種類に分かれます
出演者はイベントごとに1〜10人に分かれて不安定なので正規化・分離するなら
この部分かなぁと思うんですが、、 
この程度なら同じテーブルに入れてもいいのかなぁという気もして、判断しかねてます

185:NAME IS NULL
07/10/20 16:43:44
時刻の取得について質問です。
time_stというところにtimestampが入っていまして
select time_st from member where memname='test';と実行すると
time-st
2007-10-20 16:10:30
と取得できるのですがこれを20071020161030と繋げて取得するにはどのようにすればよいでしょうか?


186:NAME IS NULL
07/10/20 16:49:54
>>185
URLリンク(dev.mysql.com)

187:NAME IS NULL
07/10/20 17:35:14
>>186
ありがとうございました。無事できました〜。

188:NAME IS NULL
07/10/21 00:34:22 VLr/CFtZ
あるテーブルに削除フラグ(1か0がはいります)をalterで追加しようと思っているのですが、
charにしようかintにしようか迷ってます。

通常は、このような削除フラグのようなものは何の型にするのが普通でしょうか?


189:NAME IS NULL
07/10/21 00:48:34
一応BOOLEANがあるらしいよ
URLリンク(dev.mysql.com)


190:NAME IS NULL
07/10/21 15:15:54
まぁtinyintなんだけどな

191:NAME IS NULL
07/10/21 18:34:46
MySQL 4.1.20 Windows

desc テーブル名でテーブルの構成情報が見られますけど、これをテキスト情報に落とすことって
出来ませんかね?


192:NAME IS NULL
07/10/21 19:21:55
>> table.txt

193:NAME IS NULL
07/10/21 19:30:39
mysql < desc.sql > xxxx.txt
で出来るんじゃないの

でもmysqldump使うのが一般的だと思う

194:NAME IS NULL
07/10/21 19:38:07
リダイレクトで見ることが出来ました。お二方、thxです。
Mysqldumpは書いた後、思いつきました(^^;。

195:NAME IS NULL
07/10/21 22:06:09 ORdmYlqR
初心者質問ですいません。
検索等実行時の戻り値に所要時間がありますが、
この値をPerlスクリプトから取得したいです。
でもMySQLのどの値にアクセスしていいのかわからず・・・
よかったらおしえてくださいm(_ _)m

196:>>189
07/10/21 23:46:13
>>189
ありがとうございますm(_ _)m

197:NAME IS NULL
07/10/22 00:17:58
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;


198:NAME IS NULL
07/10/22 16:12:58
mysql5のレプリケーションは、
マスターのDBに対して、スレーブは、すべて既存のDBが消去されて、
マスターのDBが複製されるのでしょうか?

マスターのDBが、スレーブに追加されるような形で複製されて欲しいのですが・・・。

199:NAME IS NULL
07/10/22 17:58:08
MySQLのレプリケーションはSQLが流れるだけだから
マスタにないDB・テーブルがスレーブにあるのは大丈夫。
ただしスレーブにSQLを流す時点で不整合があるとそこでレプリケーションが停止する。


200:195
07/10/22 21:00:30
>>197
ありがとうございます。mysql.ccはまだ読めていないのですが
Time::HiResで計測することができました。
サンプルコードまでいただきたすかりました!


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

5017日前に更新/167 KB
担当:undef