- ベストアンサー
トランザクションの考え方
トランザクションの考え方を教えて下さい。 「データの参照や追加・更新・削除といった処理に矛盾がないことを保証する」という記述を見たのですが、下記の場合も良いのでしょうか。 トランザクションの開始 SELECT * FROM Aテーブル WHERE 項目A = '1' --処理-- UPDATE Aテーブル SET 項目B = '2' WHERE 項目A = '1' トランザクションの終了 開始から終了までの間に他のPCによって SELECT対象のデータが増える可能性があります。 この場合UPDATEするときはやはりSELECTの結果でLOOPするべきなのでしょうか。 上記のようにするとSELECT件数とUPDATE件数は異なってしまうのでしょうか。 環境はVB2005+SQL Server です。
- みんなの回答 (2)
- 専門家の回答
関連するQ&A
- トランザクション中にSELECTした場合について
InnoDBを使っているのですが、 以下の1.から5.の処理の間に、サーバー1.の「テーブルA」へ SELECTを掛けた場合、何か遅い気がします・・原因は何でしょうか? 1.サーバー1でトランザクション開始 2.サーバー1の「テーブルA」をDELETEでを全削除 3.サーバー2から「テーブルA」の新しいデータを取得 4.3.で取得したデータをサーバー1の「テーブルA」へINSERT 5.サーバー1でトランザクション終了 他のトランザクションでDELETEされたレコードに対し、 SELECTすると結果が返るのは遅いでしょうか?
- ベストアンサー
- MySQL
- トランザクション処理について
質問させて下さい。 以下の処理を行なっております。 1. トランザクション処理開始 2. テーブルAからデータをDELETE 3. テーブルBへデータをINSERT 4. トランザクション処理終了 上記処理の場合の「TYPE=InnoDB」指定の仕方が不安です。 現在はロールバックの可能性のあるテーブルAのみ「TYPE=InnoDB」を指定しています。 その状態でコミットもうまくいっているのですが、テーブルBに「TYPE=InnoDB」を 指定しなくてもよいものなのでしょうか。 環境 MySql 4.0.24
- ベストアンサー
- MySQL
- トランザクション中に別のトランザクションは開始できますか?
DBはサイベースを使っています。初心者です。 以下のような動作をしているシステムの一部を改造することになりました。 1)カーソルAオープン 2)トランザクション開始 3)フェッチ 4)1トランザクションでの処理数分終了済みでなければ、3)から繰り返し 5)commit/rollback 6)終了済みでなければ 2)から繰り返し 7)カーソルAクローズ 今回、3)でフェッチしたレコードのある項目をキーとして 別のテーブルを検索しなければならないのですが、 3)の後に、カーソルBオープンとフェッチのみを追加しただけでは問題があると思うのですが、同一プロセスから、トランザクション中に別のトランザクションを開始することは可能なのでしょうか? なお、このトランザクションでは、レコードの追加や削除は行いません。 どうぞよろしくお願いいたします。
- 締切済み
- その他(データベース)
- トランザクションについて
MySQLバージョン4.1.16を使っています。 トランザクションは2つに分けて行う場合と1つで済ませる場合とでは どちらが良い悪いなど違いはあるのでしょうか? できれば1つで済ませれば良いのでしょうが、 2つに分けなければいけない状態の時に、何か注意する点など出てくるのでしょうか? START TRANSACTION; UPDATE table1 SET a=1 WHERE type=1; COMMIT; START TRANSACTION; UPDATE table2 SET b=1 WHERE type=1; COMMIT; それか START TRANSACTION; UPDATE table1 SET a=1 WHERE type=1; UPDATE table2 SET b=1 WHERE type=1; COMMIT;
- ベストアンサー
- MySQL
- PHP+MYSQL BEGIN;とCOMMIT;
下記のSQL文をPHPで書くとどの様になりますでしょうか? オブジェクト指向でお願いします。 BEGIN; // トランザクションA開始 SELECT * FROM users WHERE id = 1 FOR UPDATE; COMMIT; // トランザクションA終了
- 締切済み
- PHP
- 複数のSQL文を一つのトランザクションで行いたい(SQL Server)
Visual Basic 2005 から SQL Server に接続してINSERTやUPDATE処理を行いたいのですが、トランザクション処理の記述方法が分かりません。 コネクションオープン トランザクション開始 クラスA呼び出し(INSERTやUPDATEの処理記述) クラスB呼び出し(INSERTやUPDATEの処理記述) … コミット(またはロールバック) トランザクション終了 コネクションクローズ 上記の様に、いくつかのクラスに分けて記述したINSERTやUPDATEの処理を、一つのトランザクションで行いたいです。 コネクションやトランザクションを引数とすればよいのでしょうか?
- ベストアンサー
- Visual Basic
- C#でトランザクション開始後参照出来ない
言語:C# DB:SQLServer2008 1.トランザクション開始 2.テーブルAをUPDATE 3.色々な処理(省略) 4.テーブルAのUPDATE前の情報を参照 5.参照したテーブルをもとにテーブルBをUPDATE 6.すべての処理が正常だったら全テーブルコミット、1つでも失敗したら全テーブルロールバック 問題となっているのは 4.テーブルAのUPDATE前の情報を参照する際に、テーブルAがロックされていて参照出来ないことです。 トランザクション開始時に分離レベルを設定してみましたが同じ結果でした。 tran = con.BeginTransaction(分離レベル); お分かりになる方ご教授お願いします。
- ベストアンサー
- SQL Server
- Loop文による検索条件の変更
Loop文で検索条件を変えるSQL(plpgsql)を作成しようとしております。 具体的にはあるテーブルから、 select a,b from sample…(1) でデータを取得して、このa,bを用いて、 select * from sample2 where sarch = a and sarch2 = b…(2) 上記SQLを(1)の件数文LOOPさせる。 わからないことは、 ・(1)で取得した、aとbを(2)にどのように入れていくか。 ・(1)の件数をどのように取得してLOOPさせればよいか 以上2点です。 どなたかご教授いただけたらと思います。 参考URLも是非教えていただけたらと思います。 よろしくお願いいたします。
- 締切済み
- PostgreSQL
- 同一トランザクションの中でテーブルの更新結果を参照できるか?
VB5.0+SQL-Serverで、以下のような処理を 検討しているのですが、いい方法がみつかりません。 つまり、同一トランザクションの中で更新結果を 参照することが出来るのでしょうか? ご教授いただけると幸いです。 【検討中の処理】 トランザクション開始(BegenTrans) テーブルA更新 テーブルAの更新結果を参照してテーブルBを更新 (この時点ではトランザクションを終了していないので、 テーブルAの更新結果が参照できない) トランザクション終了(CommitTrans)
- 締切済み
- SQL Server
- トランザクションのネストについて
トランザクションのネストについて お世話になります。 今、ストアドの中でストアドを実行するようなSQLを作成しているのですが、 このときのトランザクション処理について教えていただきたいです。 簡単な流れとしましては Aトランザクション開始(大枠のストアド) ↓ 処理a ↓ Bトランザクション開始 ↓ (Aストアドの中のストアド実行) ↓ Bコミット ↓ 処理b ↓ Aコミット といった感じなのですが、BストアドでコミットするとBストアドをCALLする前の処理aが コミットされてしまいます。 ここはBはBだけでコミットされてほしいのです。 独自で調べた限りでは、「トランザクションのネストはMySQLではできない」ということらしいのですが、 こういった場合、どのようにしたらよいのでしょうか。 もし方法があれば、ご教示のほどお願い致します。 -環境- [DB MySQL 5.0] [OS Windows XP]
- ベストアンサー
- MySQL
- MFC-L2750DWで印刷できません02エラーが表示される。液晶画面のメッセージが表示される。
- Windows10を使用しており、無線LANで接続しています。関連するソフトやアプリはありません。
- ひかり回線を使用しています。ブラザー製品に関するトラブルです。
お礼
>楽観的ロックでループ回すのが一般的かもしれませんね。 こちらの方で対応したいと思います。 >他のトランザクションが挿入しCOMMITしたデータをUPDATE段階で >読み込んでしまいますね。 やはりそうなのですね。 本番で発生されたら大問題でした。 これで自信を持って(!?)修正できます。 分離レベルの方も勉強したいと思います。 ありがとうございました。