Permite ao usu??rio obter explicitamente um bloqueio de tabela, exclusivo ou compartilhado, na tabela especificada. O bloqueio da tabela permanece at?? o t??rmino da transa????o corrente.
N??o ?? poss??vel bloquear tabelas do sistema com esta instru????o.
LOCK TABLE nome-da-tabela IN { SHARE | EXCLUSIVE } MODE
Uma vez que alguma tabela esteja bloqueada em um dos modos, a transa????o n??o obter?? bloqueios subseq??entes no n??vel-de-linha. Por exemplo, se uma transa????o bloquear toda a tabela V??OS no modo compartilhado para ler os dados, e uma determinada instru????o desta transa????o necessitar bloquear uma determinada linha no modo exclusivo para poder atualizar a linha, o bloqueio anterior no n??vel-de-tabela for??a o bloqueio no modo exclusivo ser no n??vel-de-tabela tamb??m.
Se o bloqueio especificado n??o puder ser obtido porque outra conex??o j?? possui um bloqueio na tabela, ser?? lan??ada uma excess??o no n??vel-de-instru????o (SQLState X0X02) ap??s ser esgotado o tempo limite de impasse.
-- bloquear toda a tabela no modo compartilhado -- para evitar um n??mero grande de bloqueios de linha LOCK TABLE V??OS IN SHARE MODE; SELECT * FROM V??OS WHERE AEROPORTO_ORIGEM > 'OOO'; -- bloquear toda a tabela no modo exclusivo -- para uma transa????o que ir?? atualizar muitas linhas, -- mas onde nenhuma instru????o atualizar?? isoladamente um -- n??mero suficiente de linhas para obter um bloqueio -- da tabela no modo exclusivo. -- No sistema de bloqueio no n??vel-de-linha, a transa????o -- iria requerer um n??mero grande de bloqueios e poderia -- causar um impasse. LOCK TABLE DISPONIBILIDADE_HOTEL IN EXCLUSIVE MODE; UPDATE DISPONIBILIDADE_HOTEL SET QUARTOS_RESERVADOS = (QUARTOS_RESERVADOS + 2) WHERE ID_HOTEL = 194 AND DATA_DE_RESERVA = DATE('1998-04-10'); UPDATE DISPONIBILIDADE_HOTEL SET QUARTOS_RESERVADOS = (QUARTOS_RESERVADOS + 2) WHERE ID_HOTEL = 194 AND DATA_DE_RESERVA = DATE('1998-04-11'); UPDATE DISPONIBILIDADE_HOTEL SET QUARTOS_RESERVADOS = (QUARTOS_RESERVADOS + 2) WHERE ID_HOTEL = 194 AND DATA_DE_RESERVA = DATE('1998-04-12'); UPDATE DISPONIBILIDADE_HOTEL SET QUARTOS_RESERVADOS = (QUARTOS_RESERVADOS + 2) WHERE ID_HOTEL = 194 AND DATA_DE_RESERVA = DATE('1998-04-12'); -- se a transa????o necessitar bloquear a tabela antes de -- atualiz??-la, dever?? obter um bloqueio exclusivo antes -- de selecionar para evitar impasses. LOCK TABLE PESSOAS IN EXCLUSIVE MODE; SELECT MAX(ID_PESSOA) + 1 FROM PESSOAS; -- INSERT INTO PESSOAS . . .