¾�ΥС�������ʸ�� �� 17 | 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9.6 | 9.5 | 9.4 | 9.3 | 9.2 | 9.1 | 9.0 | 8.4 | 8.3 | 8.2 | 8.1 | 8.0 | 7.4 | 7.3 | 7.2

LOCK

̾��

LOCK -- �ơ��֥�Υ��å�

����

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�Ϥ�����¤ζ������å���ɬ�פʾ��Τ�����Ѱդ���Ƥ��ޤ��� �㤨�С����ץꥱ������󤬳�Υ��٥�READ COMMITTED�ǥȥ�󥶥�������¹Ԥ������Υȥ�󥶥������δ�����ơ��֥�Υǡ����ΰ�������μ¤ˤ���ɬ�פ��������ͤ��Ƥߤޤ��� �����ã�����뤿��ˡ��䤤��碌�¹����˥ơ��֥����Τ�SHARE���å��⡼�ɤ���Ѥ��뤳�Ȥ��Ǥ��ޤ��� ����ˤ�ꡢ�ǡ�����Ʊ�����ѹ������Τ��ɤ�������ʹߤΥơ��֥���ɤ߼�����ꤵ���뤳�Ȥ��Ǥ��ޤ��� �ʤ��ʤ�SHARE���å��⡼�ɤϽ񤭹���¦����������ROW EXCLUSIVE���å��ȶ��礹��Τ�LOCK TABLE name IN SHARE MODEʸ�ϡ�ROW EXCLUSIVE��Ʊ���ݻ������ƤΥ��ߥåȤޤ��ϥ�����Хå�����Τ��ԤĤ���Ǥ��� ���Τ褦�ˡ����٥��å����������ȡ����ߥåȤ���Ƥ��ʤ����֤ν񤭹��ߤϤʤ��ʤꡢ�桼�������å���������ޤ�ï��񤭹��ߤ򳫻Ϥ��뤳�ȤϤǤ��ޤ���

���ꥢ�饤���֥��Υ��٥�ǤΥȥ�󥶥������¹���ˤ����Ʊ�ͤθ��̤�����ˤϡ����Ƥ�SELECTʸ�ȥǡ��������Ѥ�ʸ��¹Ԥ�������LOCK TABLEʸ��¹Ԥ���ɬ�פ�����ޤ��� ���ꥢ�饤���֥�ʥȥ�󥶥������¦���黲�Ȥ���ǡ����ξ��֤ϡ��ǽ��SELECTʸ�ޤ��ϥǡ���������ʸ�����Ϥ��줿�����Ǹ��ꤵ��ޤ��� �ȥ�󥶥��������Ǹ��LOCK TABLE��ԤäƤ�Ʊ���񤭹��ߤ��ɤ��ޤ������ȥ�󥶥��������ɤ߹����оݤΥǡ��������ߥåȤ��줿�ǿ����ͤ��б����Ƥ��뤫���ݾڤ���ޤ���

���Τ褦�ʥȥ�󥶥������ǥơ��֥���ǡ������ѹ�������ϡ�SHARE�⡼�ɤǤϤʤ�SHARE ROW EXCLUSIVE���å��⡼�ɤ���Ѥ���ɬ�פ�����ޤ��� ����ˤ�äơ����μ�Υȥ�󥶥������Ʊ����ʣ���¹Ԥ���뤳�Ȥ��ʤ��ʤ�ޤ��� SHARE ROW EXCLUSIVE����Ѥ��ʤ��ȡ��ǥåɥ��å���ȯ�������ǽ��������ޤ��� �Ĥޤꡢ2�ĤΥȥ�󥶥�������ξ����SHARE�⡼�ɤ����������ΤΡ��ºݤ˹�����Ԥ������ROW EXCLUSIVE�⡼�ɤ�������뤳�Ȥ��Ǥ��ʤ��褦�ʾ��֤ˤʤ��ǽ��������ޤ��� (�ȥ�󥶥�����󼫿ȤΥ��å��϶��礷�ʤ��Τǡ��ȥ�󥶥�������SHARE�⡼�ɤ��ݻ����Ƥ������ROW EXCLUSIVE��������뤳�Ȥ��Ǥ��ޤ��� ��������¾�Υȥ�󥶥������SHARE�⡼�ɤ��ݻ����Ƥ�����ˤ�ROW EXCLUSIVE��������뤳�ȤϤǤ��ޤ���) �ǥåɥ��å�����򤹤뤿��ˡ��μ¤����ƤΥȥ�󥶥�������Ʊ�쥪�֥������Ȥ��Ф���Ʊ��ν��֤ǥ��å���������Ƥ��������� �ޤ���1�ĤΥ��֥������Ȥ��Ф���ʣ���Υ��å��⡼�ɤ�ƤӽФ���硢�ȥ�󥶥������Ͼ�˺Ǥ����¤ζ����⡼�ɤ�ǽ�˼������ʤ���Фʤ�ޤ���

���å��⡼�ɤȥ��å��������ˤˤĤ��ƤΤ��ܺ٤ˤĤ��Ƥ���12.3�򻲾Ȥ��Ƥ���������

�ѥ�᡼��

name

���å������¸�Υơ��֥��̾���Ǥ� (�������޽���̾�Ǥ��)��

LOCK a, b;�Ȥ������ޥ�ɤ�LOCK TABLE a; LOCK TABLE b;��Ʊ���Ǥ��� �ơ��֥��1��1��LOCK�ǻ��ꤵ�줿���֤ǥ��å�����ޤ���

lockmode

���Υ��å��⡼�ɤǡ�����������å������礹����å����������ꤷ�ޤ��� ���å��⡼�ɤˤĤ��Ƥϡ���12.3���������ޤ���

���å��⡼�ɤ���ꤷ�ʤ���硢��äȤ����¤�����ACCESS EXCLUSIVE�����Ѥ���ޤ���

NOWAIT

LOCK TABLE�����礹����å��γ������Ե����ƤϤʤ�ʤ����Ȥ���ꤷ�ޤ��� ���ꤷ�����å�(ʣ����)���Ե����뤳�Ȥʤ��������˳����Ǥ��ʤ���硢�ȥ�󥶥������ϥ��ܡ��Ȥ��ޤ���

����

LOCK TABLE ... IN ACCESS SHARE MODE�ˤϡ��оݥơ��֥��SELECT���¤�ɬ�פǤ��� ¾�η�����LOCK�ˤϡ�UPDATE��DELETE�����뤤�Ϥ���ξ���θ��¤�ɬ�פǤ���

LOCK TABLE�ϥȥ�󥶥������֥��å�����(BEGIN/COMMIT���ȹ礻)�ǤΤ�ͭ���Ǥ��� ���äơ��ȥ�󥶥�����󤬽�λ����ȥ��å���������ޤ��� �ȥ�󥶥������֥��å��γ�����LOCK TABLE���ޥ�ɤϤ��Υ��ޥ�ɤΤߤΥȥ�󥶥�������������ޤ��Τǡ����Υ��å��ϼ����夹���˺������ޤ���

LOCK�ϥơ��֥��٥�Υ��å��Τߤ򰷤��ޤ��� ���Τ��ᡢ�⡼��̾��ROW���ޤޤ��Τ�Ŭ�ڤǤϤ���ޤ��� �����Υ⡼��̾�ˤ�äơ����å����줿�ơ��֥���Ǥιԥ�٥�Υ��å���������褦�Ȥ��Ƥ���ȡ��̾�ϲ�ᤵ��Ƥ��ޤ��Ǥ��礦�� �ޤ���ROW EXCLUSIVE�⡼�ɤ϶�ͭ��ǽ�ʥ��å��Ǥ��� LOCK TABLE�˴ؤ��Ƥϡ����ƤΥ��å��⡼�ɤ�Ʊ����̣����äƤ��뤳�Ȥ����դ��Ƥ��������� �㤦�Τϡ��ɤΥ⡼�ɤ��ɤΥ⡼�ɤȶ��礹�뤫�Ȥ�����§�����Ǥ��� �ºݤιԥ�٥���å��γ�����ˡ�ˤĤ��Ƥ�SELECT�ޥ˥奢��ڡ�������12.3.2��FOR UPDATE ���򻲾Ȥ��Ƥ���������

��

���������ơ��֥�ؤ�������Ԥʤ��ݤˡ��ץ饤�ޥꥭ���ơ��֥�ؤ�SHARE���å���������ޤ���

BEGIN WORK;
LOCK TABLE films IN SHARE MODE;
SELECT id FROM films 
    WHERE name = 'Star Wars: Episode I - The Phantom Menace';
-- �쥳���ɤ��ʤ����ROLLBACK���Ƥ���������
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;

�ߴ���

ɸ��SQL�ˤ�LOCK TABLE�Ϥ���ޤ��� ��������˥ȥ�󥶥�������Ʊ������٥����ꤹ��SET TRANSACTION����Ѥ��ޤ��� PostgreSQL�Ϥ���⥵�ݡ��Ȥ��Ƥ��ޤ��� �ܺ٤�SET TRANSACTION�򻲾Ȥ��Ƥ���������

ACCESS SHARE��ACCESS EXCLUSIVE��SHARE UPDATE EXCLUSIVE���å��⡼�ɤ������PostgreSQL�Υ��å��⡼�ɤ�LOCK TABLE��ʸ��Oracle�Τ�Τȸߴ���������ޤ���