mysql:13830
From: Tecchi <Tecchi <mugen_ml@xxxxxxxxxx>>
Date: Mon, 26 Mar 2007 18:12:00 +0900
Subject: [mysql 13830] Re: テーブルのロックについて
こんにちは。 加藤です。 用語や基本的な考えに抜けている部分があるみたいで説明がうまく出来ませんでした。 すみません。 言い換えてもまだ的外れかもしれませんが。 テーブルAを以下のように作ったとします。 ストレージエンジンはMyISAMとInnoDBのいずれかです。 トランザクションの分離レベルというのはまだよく分からないのでデフォルトのままです。 CREATE TABLE A ( ユーザID integer NOT NULL, コメント varchar(20), 登録日 datetime, PRIMARY KEY (ユーザID) ) 各PCから MyISAMの場合は INSERT A SET ユーザID=aaa,コメント=xxxx,登録日=yyyy/mm/dd hh:mm:ss; INSERT A SET ユーザID=bbb,コメント=xxxx,登録日=yyyy/mm/dd hh:mm:ss; INSERT A SET ユーザID=ccc,コメント=xxxx,登録日=yyyy/mm/dd hh:mm:ss; のように実行してInnoDBの場合は BEGIN; INSERT A SET ユーザID=ddd,コメント=xxxx,登録日=yyyy/mm/dd hh:mm:ss; INSERT A SET ユーザID=eee,コメント=xxxx,登録日=yyyy/mm/dd hh:mm:ss; INSERT A SET ユーザID=fff,コメント=xxxx,登録日=yyyy/mm/dd hh:mm:ss; ・・・ COMMIT; のようにまとめて実行したとします。 IDは各PCで重複しないように生成するので単独のINSERT文ではエラーにならないとします。 これが同時に複数PCから実行された場合に ・INSERTしようとしたレコードはロックしなくても全て正しく書き込まれるか ・ロックせずに同時に書き込もうとしてテーブルが壊れてしまうような事はないのか ・MyISAMとInnoDBで違いはあるのか という事です。 UPDATEについても同様で 例えば2台のPCからIDの違うレコード(ID=aaaとID=bbb)を SELECT * FROM A WHERE ID=aaa; (or ID=bbb;) のようにして呼び出して画面に表示した後更新する UPDATE A SET コメント=yyyyy,登録日=yyyy/mm/dd hh:mm:ss WHERE ID=aaa; (or ID=bbb;) の文を同時に実行した場合に ・ID=aaa,bbbのレコードは正しく更新されるのか ・テーブルが壊れる事はないのか という事です。 よろしくお願いします。 -- Tecchi <mugen_ml@xxxxxxxxxx> -------------------------------------- [10th Anniversary] Check Out the Special Final Sale http://pr.mail.yahoo.co.jp/10thann/
13814 2007-03-22 20:32 [<ml_mysql@xxxxxxxxxx] Mysql の出力を、UTF8に変換できない 13815 2007-03-22 21:24 ┗["TOYOSHIMA,Masayuki"] 13816 2007-03-23 15:55 ┗[Tecchi <mugen_ml@xxx] テーブルのロックについて 13817 2007-03-23 21:30 ┣["T.Hirotsu" <hirotsu] 13818 2007-03-24 02:51 ┃┗[Tecchi <mugen_ml@xxx] 13824 2007-03-26 08:47 ┗[YuGo <yu.gotou@xxxxx] -> 13830 2007-03-26 18:12 ┗[Tecchi <mugen_ml@xxx] 13831 2007-03-26 22:01 ┣["T.Hirotsu" <hirotsu] 13832 2007-03-27 15:11 ┗[YuGo <yu.gotou@xxxxx] 13833 2007-03-27 19:14 ┗[Tecchi <mugen_ml@xxx]