נעילות לרוב מתרחשות באופן אוטומטי כתוצאה מפעולת עדכון כלשהי, פקודת הSELECT FOR UPDATE מאפשרת לנו לבצע נעילה ידנית על שורות מסויימות מבלי לבצע פעולות עדכון עליהן.
לפני שנראה כיצד ניתן להשתמש בפקודה זו, אקדים ואומר כי בודדות הסיטואציות בהן נרצה להשתמש בנעילת שורות באופן ידני ויזום. במקרים רבים פעולות מסוג זה יכולות לגרום לנעילות משניות רבות אשר יובילו לפגיעה בביצועים.
SELECT FOR UPDATE
SELECT ... FROM ... WHERE ... FOR UPDATE
בדוגמא זו ניתן לראות כי הסשן העליון ביקש נעילה על שורות 100 – 103, כדקה לאחר מכן הסשן התחתון ננעל כאשר ביקש לבצע עדכון עבור אחת משורות אלו.
SELECT FOR UPDATE NOWAIT
באותה מידה בה פקודת ה SELECT FOR UPDATE יכולה לנעול סשנים אחרים, פקודה זו עלולה גם לנעול את הסשן ממנו היא מורצת.
בדוגמא זו ניתן לראות כי הסשן העליון עדכן את שורה 102, לאחר מספר שניות הסשן התחתון ננעל כאשר ניסה לקחת נעילה על מספר שורות (בינהן שורה 102) באמצעות פקודת הSELECT FOR UPDATE.
במקרים כאלו ניתן להשתמש בפקודת FOR UPDATE NOWAIT :
SELECT ... FROM ... WHERE ... FOR UPDATE NOWAIT
בדוגמא זו ניתן לראות כי הסשן העליון עדכן את שורה 102, מספר שניות לאחר מכן הסשן התחתון ניסה לקחת נעילה על מספר שורות (בינהן גם שורה 102) – אך בפעם זו מכיוון שנעשה שימוש ב FOR UPDATE NOWAIT הנעילה השתחררה באופן מיידי והפקודה בוטלה.
SELECT FOR UPDATE WAIT n
אפשר להנחות את פקודת ה SELECT FOR UPDATE להמתין n שניות לפני שהנעילה תשתחרר והפקודה תבוטל.
SELECT ... FROM ... WHERE ... FOR UPDATE WAIT n
בדוגמא זו הנחנו את הסשן התחתון להמתין 10 שניות לפני שהנעילה כתוצאה מפקודת ה SELECT FOR UPDATE שוחררה והפקודה בוטלה.
SELECT FOR UPDATE SKIP LOCKED
לסיום ניתן להנחות את פקודת ה SELECT FOR UPDATE לדלג על שורות אשר ננעלו ע"י סשנים אחרים
SELECT ... FROM ... WHERE ... FOR UPDATE SKIP LOCKED
בדוגמא זו ניתן לראות כי פקודת ה SELECT FOR UPDATE תפסה נעילה על כל השורות פרט לזו אשר ננעלה קודם לכן ע"י הסשן העליון.