
お世話になります、
さくらのレンタルサーバを使っているのですが
テーブル更新時に更新対象テーブルにロックを
かけようとして、動作確認をしているのですが
phpmyadminから
lock tables *** writeを実行した後
select文を発行するとそのままselectが
動いてしまうのですが、なにかテーブルロックに
関して間違った理解をしているのでしょうか?
伝票NOテーブルのようなものは重複を防止する為に
排他かけないと駄目だと思うのですが、
それとも更新クエリが発行された時に自動で
排他制御がかかるのでしょうか?
わからなくなってきました。
宜しくお願いいたします。
No.2ベストアンサー
- 回答日時:
>>端末(2)でselect ~
をphpから実行するとやはり見えます。
ネットの情報では、MyISAMでもロックされるように思えるのですけどね。レンタルサーバじゃあなく、自分のPC上で似たような環境での再現テストをやられるのがいいかな?と思えます。
>>デッドロックフリーとはデッドロックを
回避していると考えてよいのでしょうか?
そうですね。デッドロックにならないということのようですが、ただ、複数テーブルの関係する処理であれば、デッドロックもありえると思えます。もちろん、MyISAMでロックが機能しないなら、デッドロックにならないけど(笑)
ただ、MyISAMのロックが行ロックじゃあなくテーブルロックとのことですので、更新が多い場合は、使えないと思ったほうがいいと感じます。
P.S.
昔、MSのSQLServerで、ロックエスカレーションからテーブルロックになって、大変なトラブルになった事例がありますので・・・。
最新バージョンのSQLServerの仕様は知らないのですけどね。
>>レンタルサーバじゃあなく、自分のPC上で似たような環境での再現テストをやられるのがいいかな?と思えます。
アドバイス有難うございました、
面倒がらずに最初から自分のPCで確認すれば
よかったです。無事?ロックされました。
ユニークNOの取り出し&更新はMYSQLの外に
出すしかないみたいです。
お世話様でした。
No.1
- 回答日時:
>>lock tables *** writeを実行した後
select文を発行するとそのままselectが
動いてしまうのですが、
lockは他人あるいは、他プロセスやスレッド等にデータを改変されないように、あるいは見られないようにするものですよね?
なので、selectを同じphpmyadminから発行しての動作ならOK.
他のプロセスやブラウザから発行して動作するならなんらかの問題ありと思えますけど。
ちなみに、手元のMySQLを使うRailsアプリで試したら、adminツールからロックすると、ブラウザーからのselectはブロックされ、unlockすると、実行されました。
この回答への補足
>>なので、selectを同じphpmyadminから発行しての動作ならOK.
他のプロセスやブラウザから発行して動作するならなんらかの問題ありと思えますけど。
了解しました。
で、端末(1)からlock tables ** write
端末(2)でselect ~
をphpから実行するとやはり見えます。
ここのサーバはMyISAMしか使えないの
ですがMyISAMでもlockは問題ないのでしょうか?
色々サイトを見ていたらinnoDBじゃないと
いけないようなこととか、MyISAMでlockの
場合はデッドロックフリーになるとかの
記述があって混乱しています。
デッドロックフリーとはデッドロックを
回避していると考えてよいのでしょうか?
なんか色々ややこしくなって申し訳ありません。
宜しくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
SELECT時の行ロックの必要性に...
-
排他ロックしたレコードが、別...
-
SELECT文でのデッドロックに対...
-
SQLServer Insertが遅い
-
AccessShareLock はどの程度気...
-
SELECT文でタイムアウト...
-
accessのロック
-
DB2のロック調査
-
トランザクション中にSELECTし...
-
ADOで排他ロックがうまくいかない
-
SQLServerの明示的なロックの仕...
-
INSERTにおいてロック処理は必要か
-
同一トランザクションの中でテ...
-
デッドロックが発生します。
-
DB2でSelectした時(rollback,c...
-
「マスタ」と「テーブル」の違...
-
3つ以上のテーブルをUNIONする...
-
ACCESSのSQLで、NULLかNULLでな...
-
Access VBA [リモートサーバー...
-
ビューで引数を使いたい
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
SELECT文でのデッドロックに対...
-
SQLServer Insertが遅い
-
SELECT時の行ロックの必要性に...
-
accessのロック
-
AccessShareLock はどの程度気...
-
Oracleの排他制御について教え...
-
更新ロックとデッドロック
-
INSERTにおいてロック処理は必要か
-
DB2のロック調査
-
排他ロックしたレコードが、別...
-
トランザクションとlast_insert_id
-
SELECT文でタイムアウト...
-
トランザクション中にSELECTし...
-
デッドロックが発生します。
-
ExcelからAccess2013DBを更新す...
-
UPDATE文で発生するデッドロッ...
-
トランザクション処理について
-
DB2でSelectした時(rollback,c...
-
パススルークエリでのロックに...
-
SELECT FOR UPDATE にトランザ...
おすすめ情報