mysql:6701
From: とみたまさひろ <とみたまさひろ <tommy@xxxxxxxxxx>>
Date: Thu, 12 Dec 2002 07:10:03 +0900
Subject: [mysql 06701] Re: 排他処理
とみたです。 On Tue, 10 Dec 2002 02:33:34 +0900 "E-Mail" <tyunn@xxxxxxxxxx> wrote: > MyISAM型のテーブルに対して、更新処理(update,delete、insert)を > 行っている間他のユーザが同テーブルを参照のみできるようにする > といったことを行うことはできるでしょうか? 単一の更新処理であれば、特にロックする必要はないでしょうから、やりたい ことは、「複数の更新処理を行なう間、他のスレッドから更新処理をさせたく ない」ということでしょうか。 WRITE LOCK は、他のスレッドからの検索処理もできなくなっちゃうから、ダ メですよね。 > //---------------------------------------------------- > 同じテーブルで多くの INSERT と多くの SELECT を行う場合、これを解決するには、 > 他のテーブルに行を挿入して、たまに、その一時テーブルから全てのレコードをもう > 一方のテーブルに update します。 > これは次のコードで行えます: > > mysql> LOCK TABLES real_table WRITE, insert_table WRITE; > mysql> insert into real_table select * from insert_table; > mysql> TRUNCATE TABLE insert_table; > mysql> UNLOCK TABLES; > ------------------------------------------------------------//これは、 > http://www.mysql.gr.jp/ 5.3.1からの引用ですがこのような処理が必要になるので > しょうか?よろしくお願いいたします。 更新処理が INSERT だけであれば、これでも良いかもしれないですね。DELETE や UPDATE がある場合は、 SELECT GET_LOCK("lock", 10000); CREATE TEMPORARY TABLE insert_table SELECT * FROM real_table; ...更新処理... RENAME TABLE real_table TO backup_table, insert_table TO real_table; DROP TABLE insert_table; SELECT_RELEASE_LOCK("lock"); というのはどうでしょうか。試してませんが… (^^; 更新用にテーブルを1個作ってるので、素直に WRITE LOCK した方が速かった りするかも…。 -- とみたまさひろ <tommy@xxxxxxxxxx> 日本MySQLユーザ会 http://www.mysql.gr.jp
6678 2002-12-10 02:33 ["E-Mail" <tyunn@xxxx] 排他処理 6679 2002-12-10 03:11 ┣[Sumito_Oda <oda@xxxx] 6680 2002-12-10 10:52 ┃┗["E-Mail" <tyunn@xxxx] 6681 2002-12-10 11:35 ┃ ┗[SUGAWARA Hajime <sug] 6682 2002-12-10 12:01 ┃ ┗["E-Mail" <tyunn@xxxx] 6683 2002-12-10 13:15 ┃ ┗[SUGAWARA Hajime <sug] 6692 2002-12-11 09:06 ┃ ┗["E-Mail" <tyunn@xxxx] 6694 2002-12-11 12:03 ┃ ┗[SUGAWARA Hajime <sug] -> 6701 2002-12-12 07:10 ┗[とみたまさひろ <tomm] 6715 2002-12-14 11:59 ┗["E-Mail" <tyunn@xxxx] Re: : 排他処理