LOCK

Name

LOCK -- ��ȷ������һ����

Synopsis

LOCK [ TABLE ] name [, ...] [ IN lockmode MODE ] [ NOWAIT ]

���� lockmode ����������֮һ��

    ACCESS SHARE | ROW SHARE | ROW EXCLUSIVE | SHARE UPDATE EXCLUSIVE
    | SHARE | SHARE ROW EXCLUSIVE | EXCLUSIVE | ACCESS EXCLUSIVE

����

LOCK TABLE ��ȡһ����������Ҫʱ�ȴ��κγ�ͻ�����ͷš� ��������� NOWAIT��LOCK TABLE �����ȴ�������Ҫ������ ������޷�������ȡ��������ô�������˳����ҷ���һ��������Ϣ�� һ����ȡ������������ͻ��ڵ�ǰ��������²���һֱ���֡� ��û�� UNLOCK TABLE ����������������β�ͷš���

��Ϊ��Щ�����˱�������Զ���������ʱ��PostgreSQL ���Ǿ�����ʹ����С���Ƶ���ģʽ��LOCK TABLE ��Ϊ������Ҫ���ϸ�����ij����ṩ�ġ� ���磬����һ��Ӧ���� Read Committed �������ύ�����뼶������������ ��������Ҫ��֤�ڱ��е���������������й����ж����ڡ�Ҫʵ�����Ŀ�ģ� ������ڲ�ѯ֮ǰ�Ա�ʹ�� SHARE ��ģʽ���������� �������������ݲ��������޸IJ���Ϊ�κθ���һ���ĶԱ�Ķ������ṩʵ�ʵĵ�ǰ״̬�����ݣ� ��Ϊ SHARE ��ģʽ���κ�д������Ҫ�� ROW EXCLUSIVE ģʽ��ͻ�� ������� LOCK TABLE name IN SHARE MODE ��佫�ȵ����в��е�д�����ύ��ؾ���ִ�С���ˣ�һ�����ø�������ô�Ͳ������δ�ύ��д������

��������� Serializable ���ɴ��л������뼶��ʵ�����Ƶ�Ч����ʱ�� �������ִ���κ� SELECT �������޸����֮ǰ����һ�� LOCK TABLE ��䡣 һ���ɴ��л����������ͼ�������һ�� SELECT ���������޸���俪ʼ��ʱ�򶳽�ס�� �Ժ�� LOCK TABLE ����Ȼ��ֹ������д — �������ܱ�֤�����ȡ�Ķ�����Ӧ����ύ����ֵ��

���һ�����������׼���޸�һ�����е����ݣ���ôӦ��ʹ�� SHARE ROW EXCLUSIVE ��ģʽ�������� SHARE ģʽ�� �����ͱ�֤����ʱ��ֻ��һ��������������С����������Ϳ��ܻ������� ���������е�������ܶ����� SHARE ģʽ��Ȼ����ͼ���ı��е�����ʱ�� ����������ʵ��ִ�и��µ�ʱ����Ҫ ROW EXCLUSIVE ��ģʽ�� ���������޷��ٴλ�ȡ�����������ע�⣬һ�������Լ������ǴӲ���ͻ�ģ� ���һ����������ڳ��� SHARE ģʽ������ʱ������ ROW EXCLUSIVE ģʽ — ���Dz������κ������������ SHARE ģʽ��ʱ�����󡣣� Ϊ�˱�����������������Ӧ�ñ�֤����ͬ��˳�����ͬ�Ķ����������� ���ң�����漰������ģʽ����ô����Ӧ�����������������ϸ����ģʽ��

�й���ģʽ���������Եĸ�����Ϣ����ο� Section 12.3��

����

name

Ҫ�������ִ������֣�������ģʽ���Σ���

���� LOCK TABLE a, b; ��Ч�� LOCK TABLE a; LOCK TABLE b;�� ���ǰ��� LOCK TABLE ������������˳��һ����һ��˳�������ġ�

lockmode

��ģʽ�������������Щ����ͻ����ģʽ�� Section 12.3 ��������

���û��������ģʽ����ôʹ�����ϸ��ģʽ ACCESS EXCLUSIVE��

NOWAIT

���� LOCK TABLE ��ȥ�ȴ��κγ�ͻ�����ͷţ� ����޷����ȴ�����ȡ��Ҫ������������˳���

ע��

LOCK TABLE ... IN ACCESS SHARE MODE ��Ҫ��Ŀ������� SELECT Ȩ�ޡ�����������ʽ�� LOCK ��Ҫ UPDATE ��/�� DELETE Ȩ�ޡ�

LOCK TABLE ֻ����һ���������ڲ����� ��BEGIN...COMMIT������Ϊ�������������ʱ�����ϱ��ͷš� �������������������� LOCK TABLE ���Զ�����һ���԰�����������˸����ڻ�ȡ֮�����ϱ�������

LOCK TABLE ֻ����������������Щ�� ROW �������������ôʲ�������Щģʽ����ͨ��Ӧ��Ӧ�����Ϊ�û���ͼ��һ���������ı��л�ȡ�м������� ͬ�� ROW EXCLUSIVE ģʽҲ��һ���ɹ���ı����� ����һ��Ҫ��ס��ֻҪ���漰�� LOCK TABLE�� ��ô������ģʽ������ͬ�����⣬����ֻ����������������ͻ�Ĺ��� �й���λ�ȡһ���м�������Ϣ������� Section 12.3.2 �� SELECT ����ο�ҳ�� FOR UPDATE �Ӿ� ��Ϣ��

����

��ʾ����һ��������ϲ���ʱ���������ı���ʹ�� SHARE ������

BEGIN WORK;
LOCK TABLE films IN SHARE MODE;
SELECT id FROM films 
    WHERE name = 'Star Wars: Episode I - The Phantom Menace';
-- �����¼û�з�����ؾ�
INSERT INTO films_user_comments VALUES 
    (_id_, 'GREAT! I was waiting for it for so long!');
COMMIT WORK;

��ִ��ɾ������ʱ��һ���������ı���� SHARE ROW EXCLUSIVE ����

BEGIN WORK;
LOCK TABLE films IN SHARE ROW EXCLUSIVE MODE;
DELETE FROM films_user_comments WHERE id IN
    (SELECT id FROM films WHERE rating < 5);
DELETE FROM films WHERE rating < 5;
COMMIT WORK;

������

�� SQL92 ��׼����û��LOCK TABLE ������ʹ�� SET TRANSACTION ��������ǰ����ļ��� PostgreSQL Ҳ֧����������� SET TRANSACTION ��ȡ��ϸ��Ϣ��

���� ACCESS SHARE��ACCESS EXCLUSIVE���� SHARE UPDATE EXCLUSIVE ��ģʽ�⣬ PostgreSQL ��ģʽ�� LOCK TABLE ��䶼����Щ�� Oracle ����ļ��ݡ�