のくす牧場
コンテンツ
牧場内検索
カウンタ
総計:127,062,269人
昨日:no data人
今日:
最近の注目
人気の最安値情報

    私的良スレ書庫

    不明な単語は2ch用語を / 要望・削除依頼は掲示板へ。不適切な画像報告もこちらへどうぞ。 / 管理情報はtwitter
    ログインするとレス評価できます。 登録ユーザには一部の画像が表示されますので、問題のある画像や記述を含むレスに「禁」ボタンを押してください。

    元スレMySQL 総合 Part13

    mysql スレッド一覧へ / mysql とは? / 携帯版 / dat(gz)で取得 / トップメニュー
    スレッド評価: スレッド評価について
    みんなの評価 :
    タグ : - 1064 + - limit + 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。
    レスフィルター : (試験中)
    ←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitter
    402 : NAME IS - 2008/03/23(日) 14:06:44 ID:??? (+2,-30,-70)
          \ │ /
           / ̄\
         ─( ゚ ∀ ゚ )─
           \_/
          / │ \
        ○○○   ○○○
       ○,,・ω・○  ○・ω・,,○
        ○○○   ○○○ o
     o~(,_uuノ    とuu_,)ノ

         FREE TIBET
    403 : NAME IS - 2008/03/23(日) 22:28:01 ID:??? (-1,-29,-1)
    >>402
    NO TIBET!
    FREE CHINA!!

    404 : NAME IS - 2008/03/23(日) 23:30:16 ID:??? (-6,-30,-150)
    >>401
    一旦 utf8 で作ったテーブルの charset を eucjpms に変えても、カラムの charset は utf8 のまま。
    手っ取り早いのはテーブルを作り直すこと。

    もしかしたら、
    alter table xxx convert to charset eucjpms;
    でも出きるかもしれないけど、やったことないからわからん。
    405 : NAME IS - 2008/03/24(月) 10:54:10 ID:??? (+36,-30,-26)
    >>400
    データベースの初期化からやり直したらどう?
    mysql_install_db --user=mysql
    406 : NAME IS - 2008/03/24(月) 17:10:55 ID:??? (+2,-29,-74)
    mysqlhotcopy でデータベースコピーしたあと
    mysqldの再起動以外でデータベース読み込ませる方法ないでしょうか。
    常時起動させているものなので極力再起動は避けたいです。
    407 : NAME IS - 2008/03/24(月) 18:30:46 ID:??? (-1,-29,-6)
    >>406
    やったことは無いけど、mysqladmin refresh でどう?
    408 : NAME IS - 2008/03/24(月) 20:08:29 ID:??? (+3,-30,-132)
    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 'group
    varchar(40),

    こんなエラーメッセージが出ましたが、どういうことですか?
    409 : NAME IS - 2008/03/24(月) 20:10:30 ID:??? (-2,-25,-4)
    SQL文も晒してね
    410 : NAME IS - 2008/03/24(月) 21:41:31 ID:??? (+3,-30,-152)
    reate table entry(
    mail varchar(15),
    domain varchar(15),
    is_a_group bool,
    name varchar(20),
    group varchar(40),
    post varchar(20),
    prefecture varchar(8),
    station varchar(20),
    adress varchar(40),
    tel1 int(4),
    tel2 int(4),
    tel3 int(4),
    birthday date,
    industry varchar(40),
    type varchar(40),
    job varchar(20),
    user varchar(20),
    agree bool
    );
    411 : NAME IS - 2008/03/24(月) 21:53:10 ID:??? (+3,-30,-174)
    reate table entry(
    'mail' varchar(15),
    'domain' varchar(15),
    'is_a_group' bool,
    'name' varchar(20),
    'group' varchar(40),
    'post' varchar(20),
    'prefecture' varchar(8),
    'station' varchar(20),
    'adress' varchar(40),
    'tel1' int(4),
    'tel2' int(4),
    'tel3' int(4),
    'birthday' date,
    'industry' varchar(40),
    'type' varchar(40),
    'job' varchar(20),
    'user' varchar(20),
    'agree' bool
    );
    412 : NAME IS - 2008/03/24(月) 22:32:30 ID:??? (+41,+18,+1)
    ありがとうございます。
    413 : NAME IS - 2008/03/25(火) 00:35:21 ID:VYc3xvqf (+29,+29,-32)
    ファイルをキャッシュするのにmysqlを使おうと思います
    ファイルパスをキーにしてインデックスを張ることになるかと思いますが
    そうなると255文字程度の長さは必要になります
    そんな長いインデックスは実用的なのでしょうか?
    414 : NAME IS - 2008/03/25(火) 09:00:49 ID:??? (+57,+29,-48)
    そんなときは、数値でID付けてそのIDを結合したものにインデックス張るといいよ。
    415 : 390 - 2008/03/25(火) 10:29:09 ID:??? (+67,+29,-59)
    >>405
    ありがとうございます。
    「MySQL入門以前」という本を見ながらやっているのですが、
    「データベースの初期化」というのは書いておらず、まだ一度もやっていません。
    もうすこしよく勉強して、はじめからやり直してみようと思います。
    ありがとうございました。
    416 : NAME IS - 2008/03/25(火) 11:52:42 ID:??? (-1,-29,-9)
    ファイルパスからmd5とかでhash値出せばそれなりに実用になる
    417 : NAME IS - 2008/03/25(火) 12:17:57 ID:rCxdFsPn (+22,+27,-43)
    ファイルパスにmd5使うって超いいじゃん
    バッティングすることなんて天文学的確率だろ
    キャッシュ用途としては充分じゃね?
    418 : NAME IS - 2008/03/25(火) 16:02:40 ID:??? (+10,-12,+0)
    Winnyがそうだから
    419 : NAME IS - 2008/03/25(火) 17:11:37 ID:??? (+21,-30,-62)
    レコードの電話番号フィールドに「012-3456-7890」のような文字列が入ってるとして、
    「01234567890」でもselect文で検索できるような方法はありますか?

    concatのようなselect文中に挿入してレコードの文字列を置き換え(削除)つつ検索できたら
    とても幸せなのですが、何かありますでしょうか?
    420 : NAME IS - 2008/03/25(火) 17:50:42 ID:??? (+2,-29,-5)
    >>419
    お幸せに・・
    select * from hoge where REPLACE(tel,"-", "")="01234567890"
    421 : NAME IS - 2008/03/25(火) 17:51:36 ID:??? (+3,-29,-28)
    >>419
    フィールドが半角のみ確実なら正規表現 REGEXP 使えるよ
    422 : 419 - 2008/03/25(火) 20:55:10 ID:??? (-1,-30,-13)
    __________
       ||
       ||     ⊂⊃
       ||    ∧ ∧  >>420さん >>421さん
       ||    (  ⌒ ヽ ありがとう、幸せになれると思います
     ∧||∧   ∪  ノ
    (  ⌒ ヽ 彡  V
     ∪  ノ  フワーリ
      ∪∪
    423 : NAME IS - 2008/03/25(火) 23:29:33 ID:fL5GORe0 (+0,+0,+0)
    質問で申し訳ないのですが、こんなトリガを書きました。

    create TRIGGER Ins_T101
    BEFORE INSERT ON `T101_BizUnit`
    FOR EACH ROW
    BEGIN
    DECLARE PrevVer integer DEFAULT 0;
    DECLARE InsVer integer DEFAULT 0;
    DECLARE PrevExpiration_Date DATE DEFAULT CURRENT_DATE;
    DECLARE PrevRecords integer DEFAULT 0;
    SELECT COUNT(`ID`) into PrevRecords from `T101_BizUnit` src WHERE src.`Category` = NEW.`Category` AND src.`ID` = NEW.`ID` limit 1;
    SET InsVer = NEW.`Version`;
    IF PrevRecords > 0 THEN
    IF InsVer = 1 THEN
    select max(`Version`) into PrevVer from `T101_BizUnit` where `Category` = NEW.`Category` and `ID` = NEW.`ID` limit 1;
    SET NEW.`Version` = PrevVer + 1 ;
    SET PrevExpiration_Date = NEW.Register_Date - 1;
    END IF;
    UPDATE `T101_BizUnit` SET `Expiration_Date` = PrevExpiration_Date
    WHERE `Category` = NEW.`Category` and `ID` = NEW.`ID` AND `Version` = PrevVer;
    END IF;
    END;

    で登録自体はうまくいったのですが、テーブルに↓こんな感じで、

     mysql> insert into T101_BizUnit set `Category` = 1, `ID` = 4, `Register_Date` = '2008-03-25';

    Insertを試みると、↓のように怒られてしまいます。

     ERROR 1442 (HY000): Can't update table 'T101_BizUnit' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.

    基本的に、トリガというのは呼び出し元がいじっているテーブルそのものはいじれないのが
    仕様なのでしょうか?
    よろしかったらご意見お聞かせください。
    424 : NAME IS - 2008/03/26(水) 12:35:25 ID:??? (+99,+29,-54)
    質問です。
    データベース名にアンダーバーを入れるとなぜかたまにエラーになります。
    たとえば「user_address」と言うデータベースを作るとなぜかエラーになる。
    前後を区切りたいときは普通アンダーバーで区切ると思っていたのですがたまにエラーになるのでやめます。
    普通はどの文字で区切るのかわかりません。
    というかアンダーバー以外で区切る方法他にいい案ありますか?
    425 : 423 - 2008/03/26(水) 13:42:35 ID:??? (+0,+29,-73)
    >>423 自己解決しますた。
    http://dev.mysql.com/doc/refman/5.1/ja/routine-restrictions.html

    ストアド ファンクションまたはトリガ内では、その関数やトリガを実行したステートメントが
    ( 読み取り、または書込みに ) すでに使用しているテーブルを改変することはできない。

    うぎゃー! 役に立たねージャン!
    別テーブルに意図する操作内容を逃がして、定時トリガとかで反映させるくらいしか
    アイディアが浮かばない。
    どうしたらいいか、引き続きアイディア募集中!
    426 : NAME IS - 2008/03/26(水) 15:22:47 ID:??? (+68,-3,-6)
    >>424
    なんでエラーなるの?エラーの内容は?
    427 : 424 - 2008/03/26(水) 15:36:15 ID:??? (+74,+29,-11)
    >>426
    エラーというかデータベースが作れなかった。
    何度やっても作れなかったがアンダーバー外したら作れた。
    428 : NAME IS - 2008/03/26(水) 16:39:55 ID:??? (+48,-23,-17)
    >>427
    それは、mysqlというよりかはOSのファイルシステムの問題じゃね。
    429 : 424 - 2008/03/26(水) 19:32:52 ID:??? (+64,+29,-27)
    >>428
    まあそういうことになります。
    どこで聞くべきかわからなかったので
    とりあえずmysqlでエラーがでたのでここで聞いてみました。
    失礼しました。
    430 : NAME IS - 2008/03/26(水) 20:55:26 ID:??? (+4,-30,-60)
    質問です。
    CREATE TABLE でPARTITION(TABLESPACEとか)を指定しなかったら
    テーブルデータはどこに格納されるのでしょうか?
    432 : NAME IS - 2008/03/26(水) 23:01:48 ID:??? (+3,-10,+1)
    >>431
    having
    433 : NAME IS - 2008/03/27(木) 11:11:21 ID:??? (+0,-29,-5)
    >>425
    別テーブルに書き込んで、SELECTするときにJOINするとかどうよ?
    434 : NAME IS - 2008/03/27(木) 13:02:47 ID:??? (+10,-24,-6)
    >>430
    ん?何が知りたい?データディレクトリ?
    436 : - 2008/03/27(木) 13:56:58 ID:??? (+13,-30,-174)
    seqtable
    ---------------------------
    id   seq   notes
    a    1    ほげ1
    a    2    ほげ2
    a    3    ほげ3
    b    1    ふが1
    b    2    ふが2
    b    3    ふが3
    ....
    b   100    ふが100
    ---------------------------
    IDごとにseqが振られているテーブルなんですが、
    delete table seqtable WHERE id='b' and (seq=77||seq=97);
    したあとに
    ID:bの連番の欠番を低い順から抜き出すことはできますでしょうか?
    (欠番がない場合は最大値+1を返してくれるようにしたいです。)
    最大値は以下で取れるので
    SELECT (MAX(seq)+1) As max FROM seqtable WHERE id='b';
    >ID:bの連番の欠番を低い順
    をお願いします。
    437 : NAME IS - 2008/03/27(木) 14:09:24 ID:4i6HCVKz (+47,+16,-1)
    438 : - 2008/03/27(木) 14:53:09 ID:??? (+64,+29,-4)
    >437さん
    ありがとうございます!
    上のものでやりたいことは完璧にできました
    439 : NAME IS - 2008/03/27(木) 15:14:54 ID:??? (+27,+12,-12)
    >>435
    テーブルの定義見せて。
    441 : NAME IS - 2008/03/27(木) 17:22:48 ID:??? (-12,-29,-35)
    >>440
    入力した文字コードとテーブルの文字コードが合っていないに一票
    442 : NAME IS - 2008/03/27(木) 18:48:04 ID:??? (+61,-29,-185)
    >>434
    データベースのデータがOS上のどこに
    保管されているのか知りたいです。

    例えば、Oracleの場合、tablespaceの
    容量を超えてデータを入れようとすると
    エラーになります。(自動拡張OFFで)
    その場合は、tablespaceに対して
    物理的なデータファイルを追加して
    領域拡張してやるのですが、
    MySQLの場合は、あちこち調べても
    その部分の説明がほとんどされて
    おらず、不思議に思っています。

    DISKの領域がゆるす限りいくらでもデータを登録できるのか?
    そうだとしてもDISK上のどのパーティション(Windowsなら
    どのドライブ)に存在するのか知っていないと最大のデータ
    格納量も予測できず、不安ではないかと思うのですが。

    443 : NAME IS - 2008/03/27(木) 19:11:34 ID:??? (+68,+29,-49)
    >>442
     どこに置かれるかはここに書いてるよ。
    http://dev.mysql.com/doc/refman/5.1/ja/installation-layouts.html
    「データベース」って書かれてるとこね。

     んで、実際のファイルは使っているストレージエンジンによります。
    http://dev.mysql.com/doc/refman/5.1/ja/storage-engines.html
     普通はMyISAMかInnoDBなので、該当の部分を読んでください。
    444 : NAME IS - 2008/03/27(木) 19:13:09 ID:??? (+9,-24,-6)
    >>442
    つ http://dev.mysql.com/doc/refman/5.1/ja/storage-engines.html
    ここらへんをよく読もう。

    各table typeによって格納される場所は異なる。
    445 : NAME IS - 2008/03/27(木) 19:14:00 ID:??? (+51,+28,-1)
    かぶった・・・orz
    446 : NAME IS - 2008/03/27(木) 19:47:28 ID:??? (+4,-30,-26)
    >>442
    っていうか、show variables like 'datadir';
    447 : NAME IS - 2008/03/27(木) 21:07:09 ID:??? (+7,-30,-119)
    下記のようなSQLを書いた場合、
    何故か id が 0 のものが抽出されてしまいます。
    なぜでしょうか?
    また、回避法はありますでしょうか?
    ※検索に利用する為、0と検索された場合はidが0のものが抽出されるようにしたいので
    AND id <> 0
    は使わないでやりたいです。

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

    448 : 442 - 2008/03/27(木) 21:16:49 ID:??? (+57,+29,-1)
    ありがとうございます。
    ある意味オラクルよりややこしいですね。
    449 : NAME IS - 2008/03/27(木) 21:33:34 ID:??? (+5,-29,-14)
    >>447
    usersのCREATE TABLEみせて
    450 : NAME IS - 2008/03/27(木) 23:15:04 ID:??? (+3,-30,-64)
    >>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)
    );
    ←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitterで / mysql スレッド一覧へ
    スレッド評価: スレッド評価について
    みんなの評価 :
    タグ : - 1064 + - limit + 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。

    類似してるかもしれないスレッド


    トップメニューへ / →のくす牧場書庫について