MySQL 総合 Part7

このエントリーをはてなブックマークに追加
529NAME IS NULL
レコードの値を「変更」ではなく「入れ替える」ことはできますか?

AレコードとBレコードの unique を定義しているフィールドで入れ替えを行いたいのですが、

まずAの値を取り出し変数に保存($A)
次にAに使用されていない値を UPDATE 〜 SET して

次にBの値を保存($B)
Bに$Aを UPDATE 〜 SET
最後にAに$B を UPDATE 〜 SET

かなり面倒(アホ)な処理をしていると思うのですが方法はありますでしょうか
530529:2006/04/16(日) 13:14:06 ID:8RWPZyZy
↑もし一度のクエリで不可能ならば、もっとスマートな処理法などを御教示お願いします。
531NAME IS NULL:2006/04/16(日) 15:26:59 ID:???
>>518
「サーバにロードする」の意味が分からないけど、
INSERT を速くしたいならauto_commitをoffにするとか
一時的にINDEXを無効にしてINSERTが終わった後にINDEXを付けるとか
すればいいんじゃね?
532518:2006/04/16(日) 19:38:42 ID:???
>>皆様
Windowsを消去して、Linuxで再構築中です。
なんか、よそさうです。お騒がせしました。
533NAME IS NULL:2006/04/16(日) 19:46:46 ID:???
         _,.r::'::::::::::::::-.、
       r::::_;:---、、;;::-'ー、ヽ
      /':::i'         ヾi
    ,,.r、:::::::i        .: ll
    rr;i:::,r:::::!  _,,,__,  _,,,..._ .l:i
   ヾ:r::;:-、:r  i'tテ;:. i:'tテ:r i::ヽ
    `ヾ::rt'    ´  '  l::. ´ !r'
        ヾ.ィ     -、ノ:.  l
        ./!、   ー-‐;':. /
        / ヾ ヽ、   '  /
      ∧   ヽ ` 7‐r_'/ヽ
     ,r  ヽ、   ` <ニrヽ 〉
   ,r'        -、     ヾ il l、
  r            ̄ t- ヾi: lヽ

    ホーソレデ[Edward Horsorde]
     (1765〜1822 ノルウェー)
534NAME IS NULL:2006/04/16(日) 21:05:03 ID:???
みなさんに質問ですが、MySQLのインストールで
linux:/usr/local/mysql # ./bin/safe_mysqld --with-mysql=usr/local/mysql
と入力しMySQLサーバーを起動させたいのですが、

Starting mysqld daemon with databases from /usr/local/mysql/data
STOPPING server from pid file /usr/local/mysql/data/linux.pid
060416 20:56:36 mysqld ended

となってしまいます。どうすればサーバーに接続できるでしょうか? バージョンは
PHP php-5.1.2
Apache 忘れてしまいました・・・
Mysql mysql-5.0.19  です。
535NAME IS NULL:2006/04/16(日) 21:45:47 ID:???
    , イ)ィ -─ ──- 、ミヽ
      ノ /,.-‐'"´ `ヾj ii /  Λ
    ,イ// ^ヽj(二フ'"´ ̄`ヾ、ノイ{
   ノ/,/ミ三ニヲ´        ゙、ノi!
  {V /ミ三二,イ ,  /,   ,\  Yソ
  レ'/三二彡イ  .:ィこラ   ;:こラ  j{
  V;;;::. ;ヲヾ!V    ー '′ i ー ' ソ
   Vニミ( 入 、      r  j  ,′  
   ヾミ、`ゝ  ` ー--‐'ゞニ<‐-イ
     ヽ ヽ     -''ニニ‐  /
        |  `、     ⌒  ,/
       |    >┻━┻'r‐'´
      ヽ_         |
         ヽ _ _ 」    

  ググレカス [ Gugurecus ]
  ( 2006 〜 没年不明 )
536534:2006/04/16(日) 21:50:00 ID:???
>>535
 ググってみて一通り試してみたのですが駄目でした・・・。
537NAME IS NULL:2006/04/17(月) 00:08:37 ID:???
>>534
ログ見れ
538NAME IS NULL:2006/04/17(月) 00:51:24 ID:???
>>534

060416 20:56:36 mysqld ended となっているので、
サーバーがmysqldの事だったら接続は無理でしょう。

MySQL5系の日本語マニュアルはまだないので、
下記のURLあたりを見ましょう。

2.4.2. MySQL サーバの起動に関する問題
http://dev.mysql.com/doc/refman/4.1/ja/starting-server.html
539NAME IS NULL:2006/04/17(月) 02:03:48 ID:???
auto_incrementってつかっても問題ないですか。
これ読むと危険そう。
http://blog.livedoor.jp/nipotan/archives/7100625.html

phpでmysql使用しているのですが、pear mdbのnextIdつかってます。
540NAME IS NULL:2006/04/17(月) 03:28:42 ID:tXWVnh6W
>>539
ネタ紹介乙
541NAME IS NULL:2006/04/17(月) 11:55:18 ID:???
MySQLのくだ質がないのでここで聞かせてください。

メモリ内のキャッシュを消して新たにHDDからDBを読み込みたい時に、
FLUSHではダメですか?
以下のURL読むとそれでいけそうな感じなのですが、、、
http://www.buena-idea.net/~hironobu/mysql/m-2-12.html
http://dev.mysql.com/doc/refman/4.1/ja/query-cache.html

実際にAとBのホストがNFSでデータを共有していて、
AとBどちらもログインした状態で「片方更新→FLUSH→もう片方FLUSH→select」
とやってみたのですが、古いデータを持ったままなのです。

どなたかMySQLの動きを知っている方いましたら問題点を教えてください。
542529:2006/04/17(月) 11:59:27 ID:???
>>529 の解決方法ありましたら宜しくお願いします。
543NAME IS NULL:2006/04/17(月) 12:42:51 ID:???
>>529
そのアホなやりかたしかねーんじゃねーの。
普通DBは並びなんてかんけーねーし。
並びは order by で作る物だから、並びの重みを定義する
フィールドでも作って、その値を変えたりするべき。
544NAME IS NULL:2006/04/17(月) 15:11:13 ID:bdLyXr1W
>>543
並び(ORDER)ではなく、AとBとで値を入れ替える方法です。
そのフィールドはユニークになっているので、今は下のような流れで変更しています(PHP)


SELECT test FROM table1 WHERE id = $a;
UPDATE table1 SET test='0' WHRER id = $a;

SELECT test FROM table1 WHERE id = $b;
UPDATE table1 SET test=$a_tmp WHRER id = $b;

UPDATE table1 SET test=$b_tmp WHRER id = $a;
545NAME IS NULL:2006/04/17(月) 15:24:24 ID:???
>>541
ホストAでMySQLが動いてて、ホストBでもMySQLが動いてて
両者はNFSで同じデータベースファイルを共有してるって?
そんな動作はMySQLは保証してないんと違う?
クエリキャッシュでテーブルが更新云々言ってるのは、
一つのMySQLサーバプログラムの中の話だと思うが。
546NAME IS NULL:2006/04/17(月) 15:53:25 ID:???
>>544
AとBってなんだよw 定義が絞れてないぞ。
レコード同士の特定フィールドの値を入れ替えるんっしょ?

2,3行目を一体化できる、とか細かいのは置いといて、
結局SQLではそういう処理手順でしょ。