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

    私的良スレ書庫

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

    元スレMySQL 総合 Part18

    mysql スレッド一覧へ / mysql とは? / 携帯版 / dat(gz)で取得 / トップメニュー
    スレッド評価: スレッド評価について
    みんなの評価 :
    タグ : - megab + 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。
    レスフィルター : (試験中)
    ←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitter
    201 : NAME IS - 2010/08/10(火) 22:16:19 ID:??? (+27,+29,-18)
    こういう人こそ仮想化してスナップショット機能を活用するべき
    202 : NAME IS - 2010/08/11(水) 11:32:11 ID:??? (-29,-30,-13)
    >>198

    すいません。落ち着いてそこを見て

    grant all on *.* to root@'%' identified by 'hogegege';

    としたらうまく行きました
    203 : NAME IS - 2010/08/11(水) 15:21:42 ID:??? (+5,+17,+0)
    204 : NAME IS - 2010/08/11(水) 15:23:55 ID:??? (-22,-30,-174)
    質問があります。
    ぜひアドバイスをお願いします。

    point テーブル
    +-------+------------+
    | point | expire |
    +-------+------------+
    | 10000 | 2010-08-10 |
    +-------+------------+
    | 10000 | 2010-08-11 |
    +-------+------------+
    | 10000 | 2010-08-12 |
    +-------+------------+

    point テーブルには、
    ユーザの所持ポイント数 point (unsigned) と、
    そのポイントの有効期限 expire が格納されています。

    「有効期限が近いものから合計○ポイントマイナスする」
    というような命令を単一のクエリで実現することは可能でしょうか?

    たとえば、
    「上記テーブルから合計15000マイナスする」とすると
    以下の状態になってほしいわけです。

    point テーブル
    +-------+------------+
    | point | expire |
    +-------+------------+
    | 0 | 2010-08-10 |
    +-------+------------+
    | 5000 | 2010-08-11 |
    +-------+------------+
    | 10000 | 2010-08-12 |
    +-------+------------+


    お詳しい方、どうぞよろしくお願いします。
    205 : NAME IS - 2010/08/12(木) 02:05:51 ID:??? (+30,+29,-2)
    >>204
    そういう用件のためのプロシージャ
    206 : NAME IS - 2010/08/12(木) 08:06:51 ID:??? (+22,+29,+0)
    プロシージャしかない気がする
    207 : NAME IS - 2010/08/12(木) 09:29:22 ID:??? (+0,+11,-1)
    208 : NAME IS - 2010/08/12(木) 09:32:52 ID:??? (+42,+29,-68)
    >>205,206
    教えていただきありがとうございます!

    調べたのですがいまいち確証が得られていないことがあるのですが、
    プロシージャ内の処理はトランザクションのような保証はないのでしょうか。

    もしないとすれば、おとなしくInnoDBにして
    アプリケーション側でルーチンを組むのがよいのでしょうか。
    209 : NAME IS - 2010/08/12(木) 09:58:19 ID:??? (-29,-29,-21)
    InnoDBにしてストアドプロシージャを使えばいいと思うけど。

    複数レコードをアトミックに更新しないといけないから、
    MyISAMの場合はプロシージャだろうがアプリで手組みだろうが
    最初にLOCK TABLESしないとだめだね。
    210 : NAME IS - 2010/08/12(木) 10:03:07 ID:??? (+33,+29,-24)
    >>208
    > プロシージャ内の処理はトランザクションのような保証はないのでしょうか。
    ストレージエンジン次第。プロシージャかどうかは関係ない。
    215 : NAME IS - 2010/08/12(木) 22:09:06 ID:??? (-18,-30,-105)
    プロシージャについて、もう一点教えていただけないでしょうか。

    一連の処理内でテーブルから値を取得するときは

    DECLARE v_pts INT UNSIGNED;
    SELECT p.point INTO v_pts FROM point_table p LIMIT 1;

    このようにすると理解していますが、
    取得したい型がENUMやSETの場合はどのようにすればよいのでしょうか。

    DECLARE v_pts SET;
    DECLARE v_pts VARCHAR(50);

    としても取得することはできませんでした。
    216 : NAME IS - 2010/08/13(金) 02:20:35 ID:??? (-17,-29,-49)
    今MySQLの勉強をしています。
    で思ったのですが、どうしてINSERT文とUPDATE文では、これほどまで書式が違うんでしょう?
    正直INSERT文の書式に統一して、複数のレコードを一気に更新できるようにしてほしいと思います。
    217 : NAME IS - 2010/08/13(金) 04:29:41 ID:??? (-28,-30,-69)
    >>215
    enumやsetの性格を考えたら、わかるじゃまいか。

    >>216
    update hoge (c1,c2) values (1,2) where cd = 1; つーことすか?
    あんまり変わらないような?w 
    だいたい複数レコードを一気に更新は、現在でも
    218 : 215 - 2010/08/13(金) 10:21:03 ID:??? (+28,+29,-103)
    >>217
    ありがとございました。
    勘違いでして、普通にVARCHARに入れることができました。

    また、カーソルなのですが、ドキュメントとを読むと「読み取り専用」とありますが、
    宣言後に内容を書き換えたり、
    もしくは変数名とCURSORという型だけ宣言しておいて、
    中のSELECT文はあとから代入する、というようなことはできないのでしょうか?
    221 : NAME IS - 2010/08/14(土) 00:29:40 ID:??? (-29,-29,-80)
    >>219
    select a.c1, a.c1+10 from (select 10 c1) a
    サブクエリで得た値を使い回し、という要件を満たしてはいると思う

    >>218>>220の疑問は、やってみれば分かるものだから、がんばってください。
    227 : NAME IS - 2010/08/17(火) 10:42:56 ID:??? (-1,+5,-25)
    つか、例えば小数点以下3桁までしか要らなかったら、1000倍して整数にすれば楽だろ。
    231 : NAME IS - 2010/08/23(月) 19:15:02 ID:??? (-27,-30,-245)

    user_table
    --------------------------------
    id | name | dated
    --------------------------------
    1 | hoge | 2010-08-21
    --------------------------------
    2 | hoge | 2010-08-23
    --------------------------------
    2 | hoge | 2010-08-22
    ....

    thread_table
    --------------------------------
    id |uid |thread| text | dated
    --------------------------------
    1 | 1 | 1 | aaa.. | 2010-08-21
    --------------------------------
    2 | 2 | 1 | ccc.. | 2010-08-23
    --------------------------------
    2 | 1 | 2 | aaa.. | 2010-08-22
    ....


    select
    `b`.`id`,`thread`,`name`,`text`,`b``dated`
    from
    `user_table` `a`,`thread_table` `b`
    where
    `a`.`id`=`b`.`uid`
    order by `dated` desc limit 5;

    thread_tableのthreadの値がユニークで一番更新日が新しいもの順(order by `thread_table`.dated desc)に取り出したいのですがどうすればいいでしょうか?
    distinctやgroup by `thread`を追加しても期待した値が取れませんでした。
    232 : NAME IS - 2010/08/23(月) 20:04:45 ID:??? (-29,-30,-85)
    thread_table をあらかじめソートしたものを
    from user_table a, (select * from thread_table order by dated desc ) b

    結合。group byすればよい。
    group by thread;
    234 : NAME IS - 2010/08/24(火) 15:13:46 ID:??? (-26,-29,-146)
    質問です。

    いろんなテーブルを結合したSQLで、
    その一部にだけFOR UPDATEをかけることってできませんよね?
    そういう場合はクエリを分けるしかないんでしょうか。

    単純な例として、
    ユーザー情報と、それに関連するマスタデータを取りたくて、
    ユーザ情報はロックしたいけどマスタデータはロックしたくないとき、

    1.ユーザー情報だけをSELECT FOR UPDATE
    2.ユーザー情報とマスタデータを結合してSELECT(ロックしない)

    とするのが普通?
    235 : NAME IS - 2010/08/24(火) 18:44:58 ID:??? (-21,-29,-68)
    トランザクションの使用について質問があります。

    これまで、

    SELECT文を実行する場合には、
    トランザクションを入れていなかったのですがこの方針は正しいですか?

    DELETE / INSERT / UPDATE の場合には入れてます。

    236 : NAME IS - 2010/08/25(水) 00:45:23 ID:??? (+30,+29,-37)
    >>235
    SELECTだけでも複数発行する場合に
    途中に他の更新が入り込んで整合性がおかしくなるとかあるじゃん。
    237 : NAME IS - 2010/08/25(水) 01:18:24 ID:??? (+32,+29,-9)
    >>236
    ・・・頻繁に更新・削除のあるシステムの場合には確かにそうですね。
    今後はおとなしく入れます。。。
    238 : NAME IS - 2010/08/25(水) 01:23:25 ID:??? (+32,+29,-26)
    いや、それを言うと全トランザクションをSERIALIZABLEにしないといけない
    よその更新をどこまで見せるかはあくまで要件次第
    239 : NAME IS - 2010/08/25(水) 01:53:03 ID:??? (+32,+29,-43)
    >>238
    画面自体は

    SELECT される頻度が、それ以外よりも大きいのですが
    トランザクションを入れると入れない場合と比較して
    やはりパフォーマンスは落ちますよね?
    240 : NAME IS - 2010/08/25(水) 05:03:54 ID:??? (+22,+29,+0)
    測ってみないと分からん
    241 : NAME IS - 2010/08/26(木) 17:49:17 ID:??? (-26,-29,-84)
    1レコードのサイズについてお聞きしたいのですが
    レコードのサイズによってSQLのスピードが変わってきたりするのでしょうか?

    テキストを保存しようとしているカラムがあるのですが、
    varchar(255)とlongtextで迷っています

    longtextにすればサイズの問題はないのですが、スピードや負荷に影響があるのかどうかが知りたいです

    ご教授よろしくお願いします
    245 : NAME IS - 2010/08/28(土) 00:52:43 ID:??? (-26,-29,-75)
    http://dev.mysql.com/doc/refman/4.1/ja/select.html
    >LIMIT 節を使用すると、SELECT ステートメントで返されるレコード数を制限することができる。LIMIT は 1 つまたは 2 つの数値引数を取る。
    中略
    >引数が 2 つの場合、最初の引数は戻り値として返す最初のレコードまでのオフセットを表し、2 つ目の引数は戻り値として返す最大レコード数を表す。


    最高で40個まで獲ってこいって言ってんだから、32でも不思議は無いわな。
    250 : NAME IS - 2010/09/03(金) 22:02:29 ID:??? (-18,-29,-37)
    初心者ですみません。
    2万件毎に区切られたCSVファイルを10万件分登録するとして、データの追加はどのようにすれば良いのでしょうか?
    サーバーの仕様なのか、INSERTできる件数の上限があるみたいで相当な時間が掛かってしまいそうなので…。
    ←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitterで / mysql スレッド一覧へ
    スレッド評価: スレッド評価について
    みんなの評価 :
    タグ : - megab + 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。

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


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