- ベストアンサー
SQLServerの明示的なロックの仕方。
SQLServerをはじめて使っています。 トランザクションを開始すればそれに合せてロックがかかるのでしょうか? 作成者の意図で明示的にロックはかけられるのでしょうか? できるだけ、詳細に教えていただけると助かります。 もしくは、詳細な説明がのっているサイトを教えてください。 初心者なのでさっぱりわかりません。 よろしくお願いいたします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
beginをした時点では単純にトランザクションのスタートを 宣言しただけで、その後の更新系のSQLで更新されたレコードが トランザクションの対象になります(end or rollbackまで)。 また、全ての人に対して排他がかかる(テーブルロック)と いうわけではなく、更新対象のレコードのみ排他がかかる (行ロック)と思います。 (SQLServer2000の場合。以前のバージョンではページロック しかかけられなかったと記憶しています) 私はjavaでSQLServerを使っていますが、javaの場合は、 明示的にbeginせずにコネクションにsetAutoCommit(false) にして、トランザクションの終わりにcommit() or rollback() をしてトランザクション終了、という感じです。
その他の回答 (1)
- jun-1
- ベストアンサー率29% (18/61)
基本的に更新系のSQLを実行すれば対象レコードは排他がかかると 思いますが、Select文ではfor updateつければよかったような。 これはOracleだけかな?
お礼
ありがとうございました。 参考にさせて頂きます。
補足
トランザクションというのは、どこで排他をかけているのでしょうか? 行のロックとかとは違いがあるのでしょうか? BEGINをしていたら他の人が入ってこれないって感じでいいのでしょうか? 追加質問で申し訳ありません。 よろしくお願い致します。
お礼
親切に答えて頂きありがとうございました。 今は調査段階のため、どこまで調べたらいいのかも分からず、わかりにくい質問になってしまい申しわけありませんでした。 どういう状況でのロックを上が想定しているかわからないので調査も一苦労です。 使う状況などが見えてきたらまた質問させていただくかもしればせんがよろしくお願い致します。