お世話になります、
さくらのレンタルサーバを使っているのですが
テーブル更新時に更新対象テーブルにロックを
かけようとして、動作確認をしているのですが
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で質問しましょう!
似たような質問が見つかりました
- Oracle SQL update方法 2 2022/06/22 14:07
- その他(データベース) 更新クエリをリンクデータベーステーブルに実行し実行時エラー3362固有インデックスに重複する値が含ま 1 2022/09/21 11:44
- MySQL PhpMyAdminで作成して実行せよ。 東京23区を、皇居を中心とした4つのエリア(南東, 南西, 1 2023/06/11 11:58
- その他(Microsoft Office) エクセルでテーブルの最終行が自動追加されない 1 2023/01/04 15:09
- Access(アクセス) アクセスの更新クエリでカレントレコードのみ更新したい 1 2022/06/02 23:32
- SQL Server [SQLServer] テーブル名からカラム名を取得する 1 2022/08/23 21:20
- Oracle sqlで質問です。 Aテーブルの情報をBテーブルに更新かけたいです。 やりたいことは、Bテーブルの受 1 2023/05/17 11:17
- MySQL PHPとMySQLを使った掲示板の作り方 1 2022/06/02 13:00
- MySQL クエリを、PhpMyAdminで作成して実行するとき、まず、テーブルのバックアップを作成してから行う 1 2023/05/29 16:38
- PostgreSQL PostgressからMySQL(MariaDB)へ構造を変更する際のTimestamp等について 2 2023/04/04 12:09
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Oracleの排他制御について教え...
-
SELECT時の行ロックの必要性に...
-
INSERTにおいてロック処理は必要か
-
UPDATE文で発生するデッドロッ...
-
accessのロック
-
SELECT文でのデッドロックに対...
-
SQLServerの明示的なロックの仕...
-
同一トランザクションの中でテ...
-
AccessShareLock はどの程度気...
-
SQLServer Insertが遅い
-
SELECT文でタイムアウト...
-
DB2のロック調査
-
同時書き込み
-
SELECT FOR UPDATE にトランザ...
-
排他ロックしたレコードが、別...
-
「マスタ」と「テーブル」の違...
-
データの二重表示の原因
-
Access VBA Me.Requery レコー...
-
3つ以上のテーブルをUNIONする...
-
accessのエクスポートエラーに...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
SELECT時の行ロックの必要性に...
-
SELECT文でのデッドロックに対...
-
Oracleの排他制御について教え...
-
accessのロック
-
AccessShareLock はどの程度気...
-
INSERTにおいてロック処理は必要か
-
SELECT文でタイムアウト...
-
同時書き込み
-
MongoDBのデータ更新はDBを排他...
-
DB2のロック調査
-
SQLServer Insertが遅い
-
更新ロックとデッドロック
-
UPDATE文で発生するデッドロッ...
-
SELECT FOR UPDATE にトランザ...
-
DB2でSelectした時(rollback,c...
-
ExcelからAccess2013DBを更新す...
-
トランザクション中にSELECTし...
-
SQL Server2005で変換デッドロ...
-
デッドロックが発生します。
-
max+1で初番する場合 for updat...
おすすめ情報