PostgreSQL 8.0.0 �����ĵ���PostgreSQL �й� ������ | ||||
---|---|---|---|---|
Prev | Fast Backward | Fast Forward | Next |
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��
Ҫ�������ִ������֣�������ģʽ���Σ���
���� LOCK TABLE a, b; ��Ч�� LOCK TABLE a; LOCK TABLE b;�� ���ǰ��� LOCK TABLE ������������˳��һ����һ��˳�������ġ�
��ģʽ�������������Щ����ͻ����ģʽ�� Section 12.3 ��������
���û��������ģʽ����ôʹ�����ϸ��ģʽ ACCESS EXCLUSIVE��
���� 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 ����ļ��ݡ�