SQL Reference Contents
lock - exclusive lock a table
lock classname
lock exclusive locks a table inside a transaction. The classic use for
this is the case where you want to select some data, then update it inside
a transaction. If you don't exclusive lock the table before the select
, some other user may also read the selected data, and try and do their
own update , causing a deadlock while you both wait for the other to release
the select -induced shared lock so you can get an exclusive lock to do
the update.
Another example of deadlock is where one user locks one table,
and another user locks a second table. While both keep their existing
locks, the first user tries to lock the second user's table, and the second
user tries to lock the first user's table. Both users deadlock waiting for
the tables to become available. The only solution to this is for both
users to lock tables in the same order, so user's lock aquisitions and
requests to not form a deadlock.
--
-- Proper locking to prevent
deadlock
--
begin work;
lock mytable;
select * from mytable;
update
mytable set (x = 100);
end work;
begin(l)
, end(l)
, select(l)
.
Table of Contents