MySQL 総合 Part13 ..
[2ch|▼Menu]
446:NAME IS NULL
08/03/27 19:47:28
>>442
っていうか、show variables like 'datadir';


447:NAME IS NULL
08/03/27 21:07:09
下記のようなSQLを書いた場合、
何故か id が 0 のものが抽出されてしまいます。
なぜでしょうか?
また、回避法はありますでしょうか?
※検索に利用する為、0と検索された場合はidが0のものが抽出されるようにしたいので
AND id <> 0
は使わないでやりたいです。

SELECT * FROM users WHERE id = 'うんこ'



448:442
08/03/27 21:16:49
ありがとうございます。
ある意味オラクルよりややこしいですね。


449:NAME IS NULL
08/03/27 21:33:34
>>447
usersのCREATE TABLEみせて

450:NAME IS NULL
08/03/27 23:15:04
>>449
こちらになります。

create table users (
index int(11) not null auto_increment,
id int(11) default '0' not null ,
pw varchar(40) not null ,
PRIMARY KEY (index)
);

451:NAME IS NULL
08/03/27 23:40:57
数値と文字列比べちゃダメでしょ。

452:NAME IS NULL
08/03/27 23:45:22
とりあえず、
SELECT cast('hoge' as signed);
を実行してみればいいと思うよ。

453:NAME IS NULL
08/03/27 23:51:10
その場をしのぎたいだけなら、idを文字列にキャストして比較すればいいよ。

SELECT * FROM users WHERE cast(id as char(11)) = 'うんこ';

でもこれだと、idにインデックスが張ってあっても
インデックスが使われないかもしれない。

というか、列にindexとidがあるのがそもそもおかしい。
普通、indexなんて名前付けずに、idにして、
idはnameとかuserとかにして、varcharとかcharにするのが普通じゃないかな。

CREATE TABLE Users (
id int(11) UNSIGNED NOT NULL AUTO_INCREMENT
, user_name char(11) NOT NULL DEFAULT '0'
, pw varchar(40) NOT NULL
, PRIMARY KEY (id)
);

454:NAME IS NULL
08/03/28 10:38:32
>>451
数値に対して文字列で比較しても、そもそも型自体が異なるので絶対合致しないもの、と思っておりました。
しかし何故か0のものが抽出されてしまった為、疑問に思いました。

>>452
実行してみました。0が返ってきました。
要するに、数値型のカラムに対して文字列で比較しようとすると、
mysql内部で自動的に cast('hoge' as signed) のような形に変換され、
その結果返ってきた0で抽出条件を掛けてしまう、という事でしょうか?

>>453
ありがとうございます。
期待した通りの結果が返ってきました。
>indexとidがあるのがそもそもおかしい
こちら当方も感じました(他の方が作ったものの修正をしています)。
あと、CREATE TABLE で主キーに UNSIGNED を付ける辺り、なるほどと思いました。
大変勉強になりました、ありがとうございます。

455:NAME IS NULL
08/03/28 12:57:05
MySQLのコマンドラインツール(mysql.exe)のログを取る方法はありませんか?
一度に大量のSQLスクリプトを実行するとログが流れてしまって、
エラーが出ていても気づかないということがあるんです。

456:NAME IS NULL
08/03/28 13:01:59
リダイレクトしてファイルに落とせば?

457:NAME IS NULL
08/03/28 13:07:56
>要するに、数値型のカラムに対して文字列で比較しようとすると、
>mysql内部で自動的に cast('hoge' as signed) のような形に変換され、
>その結果返ってきた0で抽出条件を掛けてしまう、という事でしょうか?

型が違うと、いちど失敗してから変換が発生するから、
明示的に変換するのに比べてオーバーヘッドが発生することだけ頭の片隅にでも置いておけば、
その理解で大体OK

458:NAME IS NULL
08/03/28 13:52:28
>>456
mysql -u username -p database < hoge.sql 1>>log.txt 2>>err.txt
でいけました!ありがとうございました。

459:NAME IS NULL
08/03/28 14:14:57
URLリンク(www.mysql.gr.jp)
あなたが使用している PHP, MySQL のライブラリ(libmysql.dll, libmysqlclient)
の標準キャラクターセットは何かご存じですか?

とありますが、標準キャラクターセットを調べる方法はあるのでしょうか?

460:NAME IS NULL
08/03/28 15:19:09
正規表現の置き換えはできますでしょうか?
イメージとしては以下のような感じです。

hogeテーブル(id=1)のnameに'A([0-9]+)'があった場合、
(SELECT rep FROM rep_table WHERE id=$1)
と置き換える
A1の場合だと(SELECT rep FROM rep_table WHERE id=A1)

よろしくお願いします。

461:NAME IS NULL
08/03/28 15:40:00
正規表現使いたいときも確かにあるが、
その例の場合単に第一正規化されてないだけじゃ?
idを分割すればそういうのも簡単に実現できるだろ。

SELECT rep FROM rep_table R
WHERE EXISTS (
SELECT * FROM hoge H WHERE H.kind = 'A' AND H.id = R.id)
AND R.kind = 'A';

みたいな。

462:NAME IS NULL
08/03/28 15:56:00
>>461さん
レスありがとうございます。

hoge.nameにはA1A3...見たいな感じでA([0-9]+)に複数マッチする可能性があります。(1つもマッチしない場合もあります)
それらすべてを(SELECT rep FROM rep_table WHERE id=$1)の形でとりたいのです。
現状ではプログラム側で、マッチした場合、そのつどSELECTで取得しています。
preg_replace_callback('/A([0-9]+)/','_preg_rep',$query);
function _preg_rep($matches) {
$sql =
"SELECT rep FROM rep_table WHERE id='$matches[1]'";
..
}
わかりづらい質問ですみませんがよろしくお願いします。


463:NAME IS NULL
08/03/28 16:01:21
意図が伝わらなかったかな。
要は、テーブル定義(というか設計)見直せば?ってこと。
正規表現を使わなくても、テーブルさえちゃんとしてれば
461で示したSQLで実現できるよね?

もし変更が不可能だとしても、
idから部分文字列を切り出すとかすれば十分実現可能。

464:NAME IS NULL
08/03/28 16:04:00
どうしても正規表現が使いたいなら、
URLリンク(dev.mysql.com)
ここを参考にすればいい。
でも、正規表現はそこそこ重い処理だから、
RDBMSでは極力使わないほうがいい。

465:NAME IS NULL
08/03/28 17:53:51
>>459
PHPでmysqldに接続して(mysqld側の起動オプションで、charset絡みを何も指定せずに)
show variables like '%char%' ;

で、clientとconnectのところ。

466:NAME IS NULL
08/03/28 20:02:50 t4tLBd+a
>>455
tee

467:NAME IS NULL
08/03/28 22:31:08
>>466
tee log.txt でコンソールに表示されるログがすべて記録されるんですね。ありがとうございます。

468:NAME IS NULL
08/03/29 00:05:43
% mysql hogehoge | tee log.txt

469:NAME IS NULL
08/03/29 12:17:05
% mysql hogehoge | tee -a log.txt

470:NAME IS NULL
08/03/29 23:35:55 3fgyplCn
為になるHP
URLリンク(u.aniota.info)

471:NAME IS NULL
08/03/31 05:40:50 0Cxuk5my
同一テーブルをサブクエリでselectしてdelete出来ないので
テンポラリテーブルを使おうと思いますが、
テンポラリテーブルを削除する前に
何らかの形で操作側のプロセスが死んだ場合、
テンポラリテーブルだらけになるんじゃないかと思うのですが、
そのあたりはどうなってるのでしょうか?

472:NAME IS NULL
08/03/31 11:24:38
>>471
 接続が終了するとDROPされるから問題ないんじゃね?
URLリンク(dev.mysql.com)


473:NAME IS NULL
08/03/31 22:16:20 cXmxkjaY
RHEL 5 + MySQL5.0.26で構築してます。

disk容量の監視をしているのですが、
たまに / の下が圧迫されているようです。

どうやら
/tmpの下にキャッシュファイル?をMySQLが作っているようなのですが
どのタイミングでどのようなファイルを吐いているのかわかりません。

Order by などではテンポラリファイルをつくるようですが
前回 Diskが圧迫されたときには、Order byではなく
600万件ほどのテーブルから、uniqueデータのdeleteを繰り返していました。(対象は100万件程)

/tmpの下ってMySQLは何を吐きますか?
delete,updateをするときでも吐きますか?



474:NAME IS NULL
08/03/31 22:57:45 C7l3mT1c
環境の移行をしているのですが、
DB更新処理が既存と同じように動かず困っております。
#新環境の方がバージョンが古いのは気にしないで下さい。

○旧環境
 OS     - CentOS release 5
 perl    - 5.8.8
 DBI     - 1.52
 DBD::mysql - 4.005

○新環境
 OS     - Red Hat Enterprise Linux ES release 3
 perl    - 5.8.0
 DBI     - 1.52
 DBD::mysql - 2.1021


【現象】
 update で、更新先が更新元と同じ値だった場合
 (結局レコードの値は何も更新されなかった場合)、
 excute() の戻り値が、

 旧環境:1
 新環境:0E0

 となります。
 新環境でも 1 となるようにしたいのですが、
 何がマズいのでしょうか?


475:NAME IS NULL
08/04/01 10:38:18
>>473
show variables like 'tmpdir';
デフォルトは確か /tmp
作られるのは最適化されていないクエリを発行した場合

476:NAME IS NULL
08/04/01 10:40:09
>>475
mysqlというよりかは、DBIの問題じゃね?

477:NAME IS NULL
08/04/01 10:40:47
↑ おっと、>>474 へのレスだ

478:NAME IS NULL
08/04/01 11:16:33
>>474
DBD::mysqlのバージョンが違うからたぶんそれだな。
バージョン合わせるわけにはいかんの?


479:NAME IS NULL
08/04/01 16:05:23 cwXA9zGK
大変低レベルの質問で恐縮です。

web上のDBを触るのは初めてです。
レンタルサーバー上のMysqlのサービスを利用しようとしています。
接続方法に「アドレス=localhost  内部からの接続のみ許可 」 とあったのですが、
ファイルを操作するときと同じように
FTPツールでサーバーに接続すればいいのでしょうか?
クライアントにMysqlをダウンロードしておいて、
作ったテーブルをサーバーにアップロードするのでしょうか?
UP先は/public_html以下でいいのでしょうか

accessとOracleの使用経験があるのでSQL文は多少分かります。
今回はそれ以前の問題というか…webのことはさっぱりですみません

※こちらが相応しくなければ該当スレお教えください

480:NAME IS NULL
08/04/01 16:12:32
perl/php などのスクリプトに接続IDとパスを書いて
そのmysql、この場合はlocalhostみたいだから鯖にphp置いてそこから
接続にいく感じ
ftpはそういうスクリプトを上げるときにつかうけど
mysqlにつかうときはバックアップを取るときくらいか

481:使ってるのはPython-SQLObject
08/04/01 19:10:39
ここでいいのかよくわかりませんが、疑問・質問等のスレッドがなかったのでここに書きます。使っているのはMySQLなのでここに書きますがデーターベース全般についてです。

ユーザー
+名前
+役割(役割テーブル)
役割
+名前
+説明

のように作る場合に役割を別のテーブルとして定義するとします、これは理解できるのですが。


+住所
住所
+都道府県
+市町村とかそれ以外

のようにデーターベースでは分けるでしょうか?
Pythonのようなオブジェクト指向言語で組み立てれば「駅」オブジェクトは「住所」インスタンスを持つことになると思うので、このようなテーブル構造を思いついたのですが「駅」には固有の「住所」しか当てはまらないので別テーブルにする利点が無い。
「住所」なんてテーブルだと「家」というテーブルを作ったときにこのテーブルからも「住所」を参照することになって「住所」テーブルには「駅」「家」二つのテーブルの住所が記録されることになって美しくない。このような場合どのようにするのがベストでしょうか?
乱文・長文で失礼いたしました、気に触ったらスルーしてください。

482:NAME IS NULL
08/04/01 19:48:45
とりあえず、リレーショナル理論とか正規化について勉強すれば?
RDBMSとかSQLは、オブジェクト指向だとか、
手続き型だとかとは全然違うことがわかると思う。

483:NAME IS NULL
08/04/01 20:36:08
>482
ここまでオブジェクト指向とにていると、どうしてもそれで考えてしまいますorz
おっしゃるとおり、やはりデーターベースの考え方をしっかり学んだほうがいいようですねorz
URLリンク(www.oreilly.co.jp)
のものを読んでみようと思います。ありがとうございました。



484:NAME IS NULL
08/04/01 22:15:46 ZI2HJoUM
test BETWEEN '100' AND '1000'

で、100〜1000の間を抽出出来ますが、
「100〜1000以外」というNOTにしたい場合、どうすればいいのでしょうか?


485:NAME IS NULL
08/04/01 22:21:36
そこでなぜ引用符をつける。

486:474
08/04/01 22:27:15 GR+VJpfB
> 478

やっぱ、DBD::mysql 怪しいっすよね〜

実は新環境と同じ環境ってのが別にあって、
そいつは自分では触れない環境なのですが
そこではちゃんと動いてるらしく、
バージョンは変えたくないらしいのです。。

487:NAME IS NULL
08/04/01 22:30:35
SELECT hoge FROM Nanika WHERE test BETWEEN 100 AND 1000;

SELECT N1.hoge FROM Nanika N1
WHERE N1.test NOT IN (
SELECT N2.test FROM Nanika N2
WHERE 100 AND 1000
);

・・・ごめんなさい。

SELECT hoge FROM Nanika WHERE test < 100 OR test > 1000;

488:484
08/04/01 22:47:34
すみません、単純に
test NOT BETWEEN '100' AND '1000'

で、目的の結果を得ることが出来ました。お騒がせしました。


489:NAME IS NULL
08/04/02 11:15:13
>>486
ChangeLogのこれかな。

2003-06-22 Rudy Lippan <rlippan@remotelinux.com> (2.9002)
* Changed the default behaviour of mysql_found_rows, so now
'UPDATE table set field=?' will return the number of rows matched
and not the number of rows physically changed. You can get the old
behaviour back by adding "mysql_found_rows=0" to the dsn passed
to connect.

490:NAME IS NULL
08/04/03 16:45:12
mysqlをインストールして適当にデータを入れてみたのですが、このデータをhtml上に呼び出すのってどうすればいいのでしょうか?

491:NAME IS NULL
08/04/03 16:47:14
これまた大味な

492:490
08/04/03 16:54:27
SQLでselectしてデータを取り出すというのは分かるのですが、それをどうやったらページ上に表示できるのかなぁと
javascriptみたいにhtml上に直接かけるわけでもないですし

493:NAME IS NULL
08/04/03 17:03:12
PHP、CGI、JSP、ASP、ASP.NET
さぁ、好きなのをお選び。

494:NAME IS NULL
08/04/03 17:07:39
>>493
MySQLからSQLでデータを取り出し、それからさらにPHPなどでHTMLに渡すという事でしょうか?
めんどくさいですね・・・

495:490
08/04/03 17:13:13
phpを使う場合はphpの中にSQLを書く事ができるんですね

496:NAME IS NULL
08/04/03 17:14:52
他でも一緒だよ
とりあえず、これ以上はスレ違い、というより板違いな気が

497:NAME IS NULL
08/04/03 17:32:17
それが面倒だと思うなら、Flashから直接SQLサーバと通信してください。
サーバ系は一切必要なくなりますよ。

URLリンク(asql.mooska.pl)

498:NAME IS NULL
08/04/03 23:08:13
SQLでデータベースからデータをselectした後、そこからさらにデータを絞り込む事はできますか?
具体的に言いますと、抜き出したデータの5行目〜10行目だけを選択するという感じなのですが、可能でしょうか?

499:NAME IS NULL
08/04/03 23:20:23
可能です

500:NAME IS NULL
08/04/03 23:38:14
>>499
それってSQLだけで可能ですか?

501:NAME IS NULL
08/04/04 02:01:41
WebProgの質問スレにいた、車のデータベースの人?

502:NAME IS NULL
08/04/04 05:27:22
>>500
可能です

503:NAME IS NULL
08/04/04 05:44:09
>>502
マジで?

504:NAME IS NULL
08/04/04 06:26:05
マジで

505:NAME IS NULL
08/04/04 09:53:27
ストアドプロシージャ

506:NAME IS NULL
08/04/04 10:25:42
ストアドプロシージャはSQLじゃないだろ。
というか、なんで5〜10行目が必要なんだ?
それは何かがおかしい気がする。

507:NAME IS NULL
08/04/04 11:55:27
>>502
ありがとうございます

>>501
えっと・・・何のことでしょうか?

508:NAME IS NULL
08/04/04 12:57:49
>>498
limit

509:NAME IS NULL
08/04/04 13:42:21
uniqueキーを削除したいのですがテーブル定義時に
UNIQUE KEY(`hoge_id`,`sequence`)
としてしまいました。
この場合どうやって削除すればいいのでしょうか?

510:NAME IS NULL
08/04/04 14:27:21
>>509
drop index

511:NAME IS NULL
08/04/04 19:34:13
>>493
PHPだってCGIだろ
知ったか乙

512:NAME IS NULL
08/04/04 20:13:39
PHPとCGIは区別するべき
知ったかぶりはどっちだか

513:NAME IS NULL
08/04/04 21:04:28
PHPはSSIだな

514:486
08/04/05 10:35:42 C1KIQxkZ
> 489

それだ!!!
ありがとうございます。

きっと新環境と同じ環境の DBD::mysql は、
2.9002以降が入ってるんだろうな〜
確認してみます。

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




515:NAME IS NULL
08/04/05 15:23:56 gepjJM1m
質問させて下さい。
バックアップについての質問なのですが、テンプレで紹介して頂いているphpMyBackupProを使用してみました。

MySQL5.0.45、phpMyBackupPro2.1、phpMyAdmin2.10.3、PHP5
を使用しています。

phpMyBackupProを使ったデータのバックアップ時に大きいDB(300MB程)のバックアップができません。
数MB程のDBなら何事もなくバックアップできています。
また、何も設定を変えずともphpMyAdminであれば全てのDBをバックアップできることを確認しています。

この状況で、phpMyBackupProの拡張設定:PHP 時間制限 (秒)を600秒にし、
php.iniでmax_execution_time = 600、max_input_time = 600にし、
apacheを再起動したのですが、phpMyBackupProの挙動はかわりありません。

純粋なSQLの質問ではないのでどこに質問したらいいのか迷ったのですが
総合と言うことで質問させて頂きました。

色々調べてみたのですが私には検討がつかず困っています。
お力添え頂けないでしょうか。
宜しくお願い致します。

516:515
08/04/05 16:03:48
すみません、php.iniをmemory_limit = 512Mとすることで解決できました。
自己レスですが失礼致します。

517:NAME IS NULL
08/04/06 07:05:21 UtTMq1DC
教えて頂けますでしょうか。
MySQLのSQL文チューニングに関してもっと知りたいのですが
EXPLAINの見方や、primary、index、unique、複合index等に詳しいサイト、もしくはオススメの本などありますでしょうか?
やっと時間ができたので調べたいなと思っています。

518:NAME IS NULL
08/04/06 09:57:59
教えてください
MySQL始めようと思っています
とりあえず趣味程度で勉強も兼ねて
フォームとかレポートとかを作るのに必要なものは何ですか?
お勧めは何ですか?
当方はAccessしか使ったことなく、そういった知識がありません。

519:NAME IS NULL
08/04/06 12:00:06
>518
フォームもレポートもSQLに関係ない気がするんだけど
それは僕が初心者だからなのでしょうか?

とりあえず使用目的と環境とフロントエンド次第じゃねーの?

520:NAME IS NULL
08/04/06 12:03:00
関係あるかどうかも解らないアフォウです
MySQLのデータをフォームで入出力更新したり、レポートで集計してプリントしたりするためには
何を用意すれば良いですか?

521:NAME IS NULL
08/04/06 12:51:24
フォームを作ったり、データを集計して出力するプログラム。

522:NAME IS NULL
08/04/06 14:34:18
お勧めは何ですか?

523:NAME IS NULL
08/04/06 14:39:38
用途と環境と貴方の知識による。

524:NAME IS NULL
08/04/06 15:36:28
フロントエンドって何ですか?
用途:個人事業で使うデータを扱いたいんだけど、1万件前後、あと簡単な計処理と、3人いる愛人とのプレイデータ管理もしたいです
環境:年々、温暖化が進行してる気がします
知識:Accessを使いこなせる程度と英検1級

525:NAME IS NULL
08/04/06 19:14:05
以前から終わってる ってことだよ

526:NAME IS NULL
08/04/06 20:14:26
インデックスにはユニークID、PRIMARY KEY、インデックスなどがありますが、これって全部同じものですか?

527:524
08/04/06 21:25:16
教えてください<m(__)m>

528:NAME IS NULL
08/04/07 01:40:05
>>526
ちがうよ

529:NAME IS NULL
08/04/07 07:22:36
>527
質問者本人以外に答える必要はないと思うんだ

530:NAME IS NULL
08/04/07 15:35:41
>>528
どのように違うのでしょうか?

531:NAME IS NULL
08/04/07 15:40:35
>>530
用途も意味も何もかも全部ちがうよ

532:NAME IS NULL
08/04/08 00:15:31
人生の選択も含めて全部ちがう

533:NAME IS NULL
08/04/09 11:06:13 rr+k5v3w
MySQLのストアドプロシージャで質問です。

引数を可変にしたいんですが、どうしたらよいでしょうか?

call sp ( 123, 445);
でも
call sp (123);
でも動作する。
445が指定されていれば内部で取得できる。
ということがしたいです。

534:NAME IS NULL
08/04/09 14:19:54
>>517
URLリンク(www.oreilly.co.jp)

535:NAME IS NULL
08/04/09 19:26:18
>>533
なんでそんなことしたいん?
NULLでも渡しておけば?


536:NAME IS NULL
08/04/10 00:35:24 9S23/fv1
MySQL5.1でlock tablesに関する質問なのですが、
lock tables
単一テーブルに対するsql文
unlock tables
とすると、TOPコマンドでのロードアベレージが2前後から一気に30前後になってしました。
ただ、サイトの表示自体は早くなっている感があります。
この場合、ディスクが足を引っ張っているのかデッドロックになっているのか
そもそもロードアベレージは下がると期待していたのですがとまどっています。
同様事例の参考資料が見つからず途方に暮れております。
宜しければアドバイスお願いできないでしょうか。お願いします。

537:NAME IS NULL
08/04/10 09:50:41
すみません、質問させてください。
MySQL5.0を使用しているマシンで、ほぼ毎日午前3時前後に下記のようなエラーログが出力されます。
特に午前3時と指定して実行している処理はないと思うのですが、
下記はどのような場合に出力されるエラーなのでしょうか?

080407 3:15:28 InnoDB: ERROR: the age of the last checkpoint is 188694697,
InnoDB: which exceeds the log group capacity 156653568.
InnoDB: If you are using big BLOB or TEXT rows, you must set the
InnoDB: combined size of log files at least 10 times bigger than the
InnoDB: largest such row.
080408 3:11:29 InnoDB: ERROR: the age of the last checkpoint is 156654082,
InnoDB: which exceeds the log group capacity 156653568.
InnoDB: If you are using big BLOB or TEXT rows, you must set the
InnoDB: combined size of log files at least 10 times bigger than the
InnoDB: largest such row.

538:533
08/04/10 11:21:47 zXvXwiNf
>535
デバッグフラグを立てたいのさ。
通常は使用しないから引数を意識させたくない。

539:NAME IS NULL
08/04/10 13:30:20
hoge_tbl
--------------------
id   time
1   21:00
1   22:00
1   21:00
1   23:00
1   12:00
1   21:00
1   21:00
...
--------------------
こんなログを保存しているテーブルがあるとして
時間ごとのアクセス数を取得したいのですがどのような書き方があるでしょうか?

とり方としては
-------------------------
id   time   cnt
1     01   52
1     02   41
1     03   12
1     04   9
1     05   4
...
-------------------------
もしくは
------------------------------
id  01  02  03  04 .....
1   52  41  12   9
------------------------------
どちらでもかまいません。(可能であれば後者)

以下は自分なりに書いてみたものです。

SELECT
DISTINCT(id),
(SELECT COUNT(*) FROM hoge_tbl WHERE id=a.id and DATE_FORMAT(time,'%H') = '01') As `01`,
(SELECT COUNT(*) FROM hoge_tbl WHERE id=a.id and DATE_FORMAT(time,'%H') = '02') As `02`,
....
FROM hoge_tbl a
WHERE id=1;

一応、自分で書いたSQL文でもできましたがidが複数あり処理に時間がかかりすぎるため熟練者さまのご意見を聞ければと思います。
長文になりましてすみませんがよろしくお願いいたします。

540:NAME IS NULL
08/04/10 14:20:32
>>539
SELECT DATE_FORMAT(time,'%H') as TH
FROM hoge_tbl a
WHERE id=1
GROUP BY TH
ORDER BY TH

これでtimeにインデックスがあっても多分効くはずです。
(DATE_FORMAT()書式は未検証)

541:540
08/04/10 14:22:01
誤> SELECT DATE_FORMAT(time,'%H') as TH
修正> SELECT DATE_FORMAT(time,'%H') as TH, COUNT(*)

542:NAME IS NULL
08/04/10 14:46:03
>>540
ありがとうございます!
こちらの環境で試してみたところ3倍以上の高速化を実現できました!

本当にありがとうございます!

543:NAME IS NULL
08/04/10 15:12:05 9ckzVTRD
mysqlで別のdbを、mysqladmin -u root -p hogeしたあとに、

select * from users limit 1;

すると、
ERROR 1033 (HY000): Incorrect information in file: './gege/users.frm'

となったのですが、復旧するにはどのようにすればよいでしょう。
よろしくお願いいたします。

544:NAME IS NULL
08/04/10 15:24:24
MySQLにかぎったことではないのですが、
列や制約を追加したり消したりするALTERについてなんですが、
これって一昔前はありませんでした?
40代の元技術者の方に話を聞いたところ、
テーブルの設計は後から変更できないので慎重にやらないといけない。
というようなことを聞いたんですが。

545:NAME IS NULL
08/04/10 15:57:09
>>544
設計の規約の上での話じゃないの?
機能的には可能でも、「できるんだからしちゃっておk」ってスタンスで居ると
後々収集が付かなくなるという

546:NAME IS NULL
08/04/10 16:48:02
こんなことってできますか?

WHERE句に当てはまる
powerの合計値と、すべてのmessageを連結してさせたものを取得したいです。

power   message
 101   五月雨
 32    孔雀
 43    春菊
  4    春雨

こんなテーブルだったら
power  message
 180   春雨孔雀春菊五月雨

こんな形で取り出したいです。
連結させる順序は指定できなくてもいいです。

547:544
08/04/10 16:54:48
>>545
そういうことでしたか。言葉の意味を取り違えていたようですね。
レスどうもありがとうございます。

548:NAME IS NULL
08/04/10 21:44:38
目的:バックアップスケジュールを設定したい
OS:XP SP2
MySQL 5.0
password storage methodをObscuredにした
Write Log File for Scheduled Backupsにチェックを入れた

Administrator1.2.12のバックアップで、
schedule this backup projectをチェックするとAttentionが出てしまいます。
オプションのconnectionsを設定すればいいと思うのですが、
その設定を教えてください。

549:NAME IS NULL
08/04/10 22:28:58
>>546
select sum(power),group_concat(message separator '') from hoge

550:NAME IS NULL
08/04/11 00:00:40 13YgqV5Q
バイナリログってバックアップ対象ですか?
巨大だから外したいんですが・・

551:NAME IS NULL
08/04/11 11:23:51
>>550
っていうか不要なBINログは定期的に消す。オレのメモを嫁。
◆mysql masterのレプリケーション バイナリログの削除方法
・スレーブ側で現在参照中のバイナリログを参照する
show slave status;
・マスタ側でそのファイル名を指定してその番号以前のファイルを削除する
※指定したファイルは残るらしい
show master logs;
purge master logs to 'xxx-bin.nnn';


552:NAME IS NULL
08/04/11 15:30:05
ありがとうございました
レプリケーションしてないのですが、何となくバイナリログ取ってました
レプリケーションしない場合はとる必要ないですよね

553:NAME IS NULL
08/04/11 16:13:58
カラムの型をBIGINT unsigned にしたのですが、最大値が2147483647までしか入りません。
create show tableでもBIGINT unsigned に変わっていることは確認できました。
何が原因なのでしょうか?

554:NAME IS NULL
08/04/11 16:50:22
MyISAMしか使っていないはずなのに、
datadirの中にibdata1があります。
なんですこれは?

555:NAME IS NULL
08/04/12 02:06:27
>>551
--expire_logs_days も良いかも。

556:NAME IS NULL
08/04/12 03:14:08
質問させて下さい。
クエリを分割するにはどうのようにすれば良いでしょうか?
MySQL5.0.45でinnodbを使用しているのですが、サブクエリーを使うような長くて少し複雑なクエリを発行しています。
EXPLAINで確認したところ、上手くindexを使ってくれません。
1クエリー1テーブル1インデックスの制約にひっかかってしまいます。

myisamならロックテーブルをかけて
URLリンク(d.hatena.ne.jp)
のようにすれば一つの処理として完結させられると思うのですが
innodbでのやり方がわかりません。
色々調べてみたのですがそのような記述を見つけることができませんでした。
アドバイス頂けないでしょうか。
宜しくお願い致します。

557:NAME IS NULL
08/04/12 08:06:58 +PKJZE04
質問です
MyQSL Query Browser 1.2.12
を使おうと思ってるんですが
接続時にエラーが出ます
Could not connr\ect totha specified instance
MySQL Error Number 2003
Cant connect to MySQL server on localhost [10061]

if you want rocheck the network connection please click the Ping button.

誰か対処法をお願いします


558:554
08/04/12 08:48:12
削除しても起動時に作成されます
アイドリング的に、前もって作成されるみたいですね

559:NAME IS NULL
08/04/12 12:35:30
>>557

そのまんまだよ。

(1)ネットワークを確認
(2)MySQLサーバの起動確認

560:NAME IS NULL
08/04/12 16:06:33 k8Kacv++
すみません、質問させてください
delete文がうまくいったかどうか、確認する方法ないですか?
select の場合、$rs = select文実行 などとして$rsの中身を見て
確認してるんですが、deleteの場合はどうしたらいいんでしょう?
どなたかアドバイスお願いします

561:NAME IS NULL
08/04/12 20:19:02 AD6GVloA
phpMyAdmin

562:NAME IS NULL
08/04/12 21:19:46
>>560
プログラミング言語は何?

563:NAME IS NULL
08/04/12 23:17:39 IYNGfhn4
myisamchkのテストをしたいのですが
うまく壊れたファイルがありません
インデックスを壊すにはどうしたらいいですか?

564:NAME IS NULL
08/04/13 00:33:22 4TX2K7e+
稼働中のdb引っ張ってきたらうまいこと壊れてましたが
テーブルのメンテナンスってどうしてます?
チェック→引っかかったら、修復前のファイルを保存
→修復→修復できたら修復前のファイルを削除・
修復できなかったら管理者にメール
こんな感じですか?

565:560
08/04/13 03:31:23 t+wHgJcY
>>562
ごめんなさい 書き忘れてました
php5で作っています

566:NAME IS NULL
08/04/13 08:42:41
>>565
普通に mysql_query() の戻り値を調べるのじゃダメなの?

567:NAME IS NULL
08/04/13 15:27:41
サーバを ./configure --prefix=/usr/local/mysql --with-charset=ujis --with-extra-charsets=all で
make

phpMyAdminでみるとメインページに UTF−8

MySQL の文字セット: UTF-8 Unicode (utf8) ←どこに依存ですか?

568:NAME IS NULL
08/04/13 23:00:38 i44zPYKS
URLリンク(dev.mysql.com)
ここを見るとバックアップ前にFLUSH TABLESをしろと書いていますが
/etc/init.d/mysql stop
でサーバを止めた時は、
自動的にFLUSH TABLESも行われていると考えていいのでしょうか?

569:NAME IS NULL
08/04/14 02:22:05
>>568
考えていい。

570:NAME IS NULL
08/04/14 03:52:51
>>1に紹介されているサイトをささっと見てきたんだけど
実際の画面とか見たかったんだけどどこにあるのかわかんなかった
初心者でも直感的に使えそうなの?
マウス操作でドロップしてデータを入力していくとか
違った文字数の入力も可能なのかな?
1行の構成が日本語で約100文字と約300文字の2種類あり
この2種類で1ページとして2万ページくらい自動入力したい
初心者なんですが直感だけでいけますか?

571:NAME IS NULL
08/04/14 18:56:36
下記の様なテーブルがあったとします。
(即席で作ったリストなので細かい事は気にしないで下さいませ)

no type
-----------
1  friend
1  friend
1  family
2  family
2  friend
3  friend
3  friend
3  family
3  family

この時、カラム[no]でGROUP BYを掛けてしまうと、

1 friend
2 family
3 friend

という風になってしまいます。
これをそれぞれのtypeごとにGROUP BYを掛けて下記のように抽出したいです。

1 friend
1 family
2 family
2 friend
3 friend
3 family

どのようなSQLを書けばこのように抽出されますでしょうか?
どうかご教授の程宜しくお願い致します。

572:NAME IS NULL
08/04/14 19:03:28
>>571
distinct

573:NAME IS NULL
08/04/14 19:09:39
DISTINCTも同じ重複削除の為、真ん中のと同じ結果になってしまいます

574:NAME IS NULL
08/04/14 19:18:02
重複してないじゃん。真ん中の結果になるわけなし。 なるならSQLの誤り。

575:NAME IS NULL
08/04/14 19:32:40
SELECT DISTINCT(no) FROM hoge
というSQLではない?

576:NAME IS NULL
08/04/14 19:58:06
select distinct no,type from hoge

577:NAME IS NULL
08/04/14 20:12:08
うわ、こんな書き方できたなんて。。。
SELECT DISTINCT(no), DISTINCT(type) FROM hoge
とかやって、エラー出るからDISTINCTって一つしか指定できないもんだと思ってた。
ありがとうございます!

578:NAME IS NULL
08/04/14 21:42:25
>DISTINCTも同じ重複削除の為
ってあたり危ないな。
GROUP BYは重複削除のためにあると思ってないか?

579:NAME IS NULL
08/04/14 22:06:24
GROUP BYは集計ですよね、まとめた後にCOUNTとかSUMとか。
でも、DISTINCTもそういう計算が無いバージョンのGROUP BYと思ってた。

580:NAME IS NULL
08/04/15 01:12:39
>>577
つうかdistinctで括弧使う変な書き方初めてみたわ

581:NAME IS NULL
08/04/15 08:42:18
>>577
その書き方俺も初めて見た
関数じゃないのに勘違いしてないか?

582:NAME IS NULL
08/04/15 12:38:16
下のようなテーブルがあったとして
IDごとにアクセス端末がいくつあるか(今日の)カウントした値をとりたいのですがどんな方法がいいでしょうか?

table_log
---------------------------
id   ua     time
1   a  2008-04-07
2   s  2008-04-07
1   i  2008-04-07
1   i  2008-04-07
2   a  2008-04-07
4   i  2008-04-07
1   s  2008-04-07
1   i  2008-04-07
1   i  2008-04-06
.................

SELECT
 (SELECT COUNT(*) FROM table_log WHERE id=a.id and ua='i' and time="2008-04-07") As 'i',
 (SELECT COUNT(*) FROM table_log WHERE id=a.id and ua='i' and time="2008-04-07") As 'a',
 (SELECT COUNT(*) FROM table_log WHERE id=a.id and ua='i' and time="2008-04-07") As 's'
 (SELECT COUNT(*) FROM table_log WHERE id=a.id and time="2008-04-07") As 'all'
FROM table_log a
WHERE id = 1;

こんな感じでとっているのですが1つのIDに12秒くらいかかります。

583:NAME IS NULL
08/04/15 12:56:16
select id,ua,count(*) from table_log where time="2008-04-07" group by id,ua order by id,ua;

584:NAME IS NULL
08/04/15 17:28:33 WrDaLq3k
mysqldumpでリモート接続先のdumpを取得しています。
今回、新たにstored procedureを導入しました。
dumpデータにプロシージャも含めるめ、-Rをつけて実行しましたが
リモート接続ではプロシージャのdumpがとられていません。

たぶん、権限の問題ではないかと思いますが、プロシージャのdumpに
必要な権限とはなんでしょうか?

ちなみに現在は、
SELECT,
LOCK TABLES,
EXECUTE,
CREATE ROUTINE,
ALTER ROUTINE ON
を与えています。


585:NAME IS NULL
08/04/16 01:34:54
カラムの型をBIGINT unsigned にしたのですが、最大値が2147483647までしか入りません。
create show tableでもBIGINT unsigned に変わっていることは確認できました。
何が原因なのでしょうか?

586:NAME IS NULL
08/04/16 10:56:03
>>585
クライアントは何使ってるの? それがintにしか対応してないって可能性はない?

587:584
08/04/16 11:47:23
どうやら権限の問題ではなく、定義者の問題のよう。
SPを作成したユーザ=definerがdumpできるようです。
なのでリモート接続するユーザを明示的にdefinerしてやれば
dumpできました。
ただ、SPを実行する際にdefinerの権限で動作する(sudo definerみたいなもん?)
ようなのでSP内でtemporaryテーブルや、insert, deleteを行っていたら
その権限がリモート接続するユーザに対して必要になる。
dumpだけの最小限の権限を考えていたのでちょっと困った。

588:584
08/04/16 12:09:44
もっと調べてみると
SQL SECURYTY でdefiner, invokerが指定で着るみたい。
つまり、定義者はリモート接続するユーザで
セキュリティ的には実行者とすることで
解決できそうな予感。

589:NAME IS NULL
08/04/16 14:02:02 Li0u4etG
質問なのですが、MySQL5のレプリケーション、マスタ-スレーブ構成時における
マスタ-スレーブ間のデータの同期間隔はどれくらいなのでしょうか?
調べていく内に仕組み等はわかるようになったのですが、同期間隔に関して詳しく書いている資料を発見できませんでした。
スレーブ側はクエリーログを受け取って順次実行していくので、同期間隔はハード性能に依存するところが大きいのでしょうか?
この変の挙動についてお詳しい方がおられましたら是非教えて頂けませんでしょうか。

590:NAME IS NULL
08/04/16 19:33:33 QEaTF0YF
データベースで
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| kokyaku |
| mysql |
+--------------------+
3 rows in set (0.00 sec)

mysql> use kokyaku
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> insert into address (id,name,zip,city,addr,tel,date) values(1,'山田花子','100-0000','東京都千代田区','千代田1-1-1',012-345-6789',now()) ;
と入れたんですが、ちゃんと入力が完了しません。
Query OKがでないんですが、どうしたらいいですか?
あとReading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

これってなに?

591:NAME IS NULL
08/04/16 20:25:14
>>590
電話番号カラムの記述をよく見てみ

592:NAME IS NULL
08/04/16 20:28:36
>>589
気にしたことないけど、ネットワーク速度よりかはスレーブ側の更新クエリの
速度に引っ張られるんじゃないかな。

593:NAME IS NULL
08/04/16 20:34:04
>>589
何を使ってるかしらぬが、処理側の変数がオーバーフローしてるんじゃね?

594:NAME IS NULL
08/04/16 20:35:15
↑ 585 へのレスだった。

595:NAME IS NULL
08/04/16 21:31:19
URLリンク(mirror.provenscaling.com)

READMEにデュアルライセンスって書いてあるのですが
購入しないとインストールできない仕組みになっているのですか?

596:NAME IS NULL
08/04/16 22:54:41
すいません、意味が分からないので質問変えます

公式では5.0.51aまでしかDLできないので、URLにある5.0.58が非常に気になります。
インストールして使用することに問題はないのでしょうか?

597:NAME IS NULL
08/04/17 00:05:56
>>596
>>595のリンク先はEnterpriseで有償
Community Serverは無償

598:NAME IS NULL
08/04/17 03:47:31
MySQL Conference & Expo 2008からカキコ

599:590です。
08/04/17 08:37:37 xQuLnTlv
insert into address (id,name,zip,city,addr,tel,date) values (1,'山田花子','100-0000','東京都千代田区',' 千代田1-1-1','012-345-6789',now())
;
これでいくかな?


600:NAME IS NULL
08/04/17 08:44:00 k/clcQ5/
MySQL5.0+php5でシステムを組んでいるのですが、
Out of memory (Needed xxxxxx bytes)
のエラーが頻繁に出て対処に困っています。

メモリーは2GBで、アクセス数は1時間で4000PV位です。
メモリーはサーバーの仕様でこれ以上増やせないのですが、
my.cfのどこかの設定値を変更して対応することは可能でしょうか?
宜しくお願いします。

601:NAME IS NULL
08/04/17 09:41:28
>>600
エラーを吐いてるのは mysqld?クライアント側?

602:NAME IS NULL
08/04/17 09:52:46
>>600
多分php.iniのココ。
memory_limit = **M

603:NAME IS NULL
08/04/17 09:54:21 k/clcQ5/
>>601
phpから、DBにコネクションを確立した後、SQL文を実行した際に発生しています。
ちなみに、このエラーの発生頻度は約30回/日です。PVは6万PV/日、実行SQL数80万SQL/日です。

宜しくお願いします。

604:Zeno ◆5nZQbNmQPs
08/04/17 16:22:49 dYEsVLTe

Sun Microsystems が MySQL のソースコードをクローズするらしいな。
つまり、 MySQL がオープンソースではなくなるということだ。
買収した会社が Sun 故にこうなることは予想できていたが、その実行が予想より早くなりそうだ。
Sun は本気で死ね。

Sun to Begin Close Sourcing MySQL
URLリンク(developers.slashdot.org)



605:NAME IS NULL
08/04/17 16:49:44
>>603
大量のクエリ結果を配列にぶち込んでるからじゃね?

606:NAME IS NULL
08/04/17 19:02:36 wr9HmqHR
初心者です。
しょうもない質問ですが、みんな結合テーブルを使ったselectとかバキバキ
利用してるんでしょうか?
URLリンク(www.techscore.com) を見て今勉強してます
これは、結果的にどういうメリットがあるんでしょう?
複数回クエリする必要がなくなる→負荷とエラーの発生率が下がる ということですか?


607:NAME IS NULL
08/04/17 19:54:13
example.jp からのみ許可するMysqlユーザを作成して
example.jp からアクセスしてみたら、

Host 'example.com' is not allowed to connect to this MySQL server

ってエラーが出た。
example.com ってどこから読んでるの?
OSはLinuxって
hostname しても example.jp ってちゃんと表示されるんだけど。
逆引きしてもちゃんとexample.jp になるし。
どなたかヘルプミー

608:NAME IS NULL
08/04/17 20:07:21
> example.jp からのみ許可するMysqlユーザを作成して

ここの作業間違ったんだろうが。


609:NAME IS NULL
08/04/17 20:07:45
>>606
正規化を勉強しなさい。

610:NAME IS NULL
08/04/17 20:10:22
>>608
グローバルIPに対し接続を許可するつもりかい?

611:NAME IS NULL
08/04/17 20:40:54
>>607

そのうちわかるよw

localhostとかいろいろトライ。

612:NAME IS NULL
08/04/17 21:04:35
>>604
Mickosがはっきり否定してるぞ
URLリンク(developers.slashdot.org)

It is not a quesiton of close sourcing any existing code,
nor anything in the core server.
Everything we have released under GPL continues to be under GPL,
and the core server will always be under GPL (or some other FOSS licence).

613:606
08/04/17 21:36:42 wr9HmqHR
>>609
ありがとうございます。
正規化は勉強しているつもりなんですが、気になったので上記の質問をさせてもらいました。
引き続いての質問で恐縮ですが、

SELECT 受注表.納品日,商品表.商品名
FROM 受注表,商品表
WHERE 受注表.納品日 = '20010401'
AND 受注表.商品コード = 商品表.商品コード ;

とあるとき、受注表テーブルまたは商品表テーブルのどちらかがカラの時は
何も結果が返ってこないと考えていいのでしょうか?
かりに商品表テーブルがカラの時、「受注表.納品日」だけでも
戻ってくるということはないと考えていいのかな、と。
ためしに似たようなものを実行して試したんですが、何も戻ってきませんでした
自分のテストミスなのか・それでOKなのかわからないので教えてください すみません

614:606
08/04/17 21:43:59 wr9HmqHR
すみません >>613
>ためしに似たようなものを実行して試したんですが、何も戻ってきませんでした
という部分ですが、
WHERE 受注表.納品日 = '20010401'
AND 受注表.商品コード = 商品表.商品コード ;
はもちろんのこと、二行目を削除して
WHERE 受注表.納品日 = '20010401';
だけでやっても何も戻ってきませんでした
こういうものなんでしょうか?

615:NAME IS NULL
08/04/17 23:40:59
GPLなのにclosedに出来るの?

616:NAME IS NULL
08/04/18 03:12:10
MySQL、新機能追加は有償版の「MySQL Enterprise」だけを対象に
URLリンク(www.technobahn.com)

Linuxを代表するオープンソースベースのリレーショナルデータベース管理システムのMySQL
が近くソースコードの公開を停止する方向で準備を進めていることが16日、米カリフォル
ニア州サンタクララで開催中のMySQLコンファレンスの席上で明らかとなった。


617:NAME IS NULL
08/04/18 06:10:56 KIEogQYQ
MySQLオワタ

618:NAME IS NULL
08/04/18 06:49:14
Sunノバビッチ!

619:NAME IS NULL
08/04/18 11:28:11
すみません、ご教授いただきたいのですが、

◆現状
XOOPS使用の為、MySQL4.0.27を文字コードEUCで稼働

◆やりたいこと
→1台のサーバで、XOOPS・OpenPNEの稼働

◆困っていること
→OpenPNEが文字コードUTF-8の為、文字コードUTF-8のデータベースを用意しなければならないが
  1台のサーバに入っているMySQLで、データベースごとに文字コードを変えられるか分からない

宜しくお願い致します。

もう1台別のサーバを用意して、そっちでUTF-8のMySQLを用意した方が無難ですかね・・・

620:NAME IS NULL
08/04/18 12:30:23
>>619
変えられる

621:NAME IS NULL
08/04/18 12:33:57
>>614
受注表.納品日 = '20010401' にマッチするデータあるの?
リレーションの前に1テーブルで自在にクエリできるようになれば。

622:619
08/04/18 12:45:41
>>620
ありがとうございます。

すみません、教えて君で申し訳ないのですが、がんばってググってはみたのですが、
どうも目的の事象を見つけられず具体的にはどうしたらいいのか分からず困ってます。
普通に CREATE DATABASE `DBNAME` DEFAULT CHARACTER SET utf8 ; でいいのかと思ったのですが、
ERROR 1064: You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'DEFAULT CHARACTER SET utf8' at line 1
と、エラーを吐かれてしまって・・・

宜しくお願い致します。

623:NAME IS NULL
08/04/18 13:08:05
>>622
データベースは
create database hoge character set 'utf8';
テーブルは
create table hoge (.. ) ENGINE=MyISAM DEFAULT CHARSET=utf8;


624:619
08/04/18 13:48:35
>>623
ありがとうございます。

create database hoge character set 'utf8'; で、やってみたのですがダメでした・・・

エラーは同じ、
ERROR 1064: You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'character set 'utf8'' at line 1
です。

最初のインストール時のオプション指定が影響したりとかってしますか?
ちなみに、こんな感じでインストールしてます。

./configure \
--prefix=/usr/local \
--localstatedir=/var/mysql/data \
--with-mysqld-user=mysql \
--enable-assembler \
--with-mysqld-ldflags=-static \
--with-client-ldflags=-static \
--disable-shared \
--enable-local-infile \
--with-extra-charsets=all \
--with-charset=ujis \
--with-collation=ujis_japanese_ci \
--without-debug \
--without-bench

宜しくお願い致します。


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

5396日前に更新/244 KB
担当:undef