• ベストアンサー

SQLServerの明示的なロックの仕方。

SQLServerをはじめて使っています。 トランザクションを開始すればそれに合せてロックがかかるのでしょうか? 作成者の意図で明示的にロックはかけられるのでしょうか? できるだけ、詳細に教えていただけると助かります。 もしくは、詳細な説明がのっているサイトを教えてください。 初心者なのでさっぱりわかりません。 よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • jun-1
  • ベストアンサー率29% (18/61)
回答No.2

beginをした時点では単純にトランザクションのスタートを 宣言しただけで、その後の更新系のSQLで更新されたレコードが トランザクションの対象になります(end or rollbackまで)。 また、全ての人に対して排他がかかる(テーブルロック)と いうわけではなく、更新対象のレコードのみ排他がかかる (行ロック)と思います。 (SQLServer2000の場合。以前のバージョンではページロック しかかけられなかったと記憶しています) 私はjavaでSQLServerを使っていますが、javaの場合は、 明示的にbeginせずにコネクションにsetAutoCommit(false) にして、トランザクションの終わりにcommit() or rollback() をしてトランザクション終了、という感じです。

musashinakahara
質問者

お礼

親切に答えて頂きありがとうございました。 今は調査段階のため、どこまで調べたらいいのかも分からず、わかりにくい質問になってしまい申しわけありませんでした。 どういう状況でのロックを上が想定しているかわからないので調査も一苦労です。 使う状況などが見えてきたらまた質問させていただくかもしればせんがよろしくお願い致します。

その他の回答 (1)

  • jun-1
  • ベストアンサー率29% (18/61)
回答No.1

基本的に更新系のSQLを実行すれば対象レコードは排他がかかると 思いますが、Select文ではfor updateつければよかったような。 これはOracleだけかな?

musashinakahara
質問者

お礼

ありがとうございました。 参考にさせて頂きます。

musashinakahara
質問者

補足

トランザクションというのは、どこで排他をかけているのでしょうか? 行のロックとかとは違いがあるのでしょうか? BEGINをしていたら他の人が入ってこれないって感じでいいのでしょうか? 追加質問で申し訳ありません。 よろしくお願い致します。

関連するQ&A