次の例は、行ハッシュ ロックの正しい使い方を示しています。
CREATE TABLE customer ( cust_id INTEGER, phone INTEGER, fax INTEGER, telex INTEGER) PRIMARY INDEX (cust_id), UNIQUE INDEX(fax), INDEX(telex); CREATE TABLE sales ( custcode INTEGER, zip INTEGER, salesvol INTEGER);
ユーザーA:
BEGIN TRANSACTION; LOCKING ROW EXCLUSIVE SELECT phone FROM customer WHERE cust_id=12345; UPDATE customer SET phone=3108292488 WHERE cust_id=12345;
ユーザーAのEXCLUSIVE行ハッシュ ロックは、別のユーザーによる同じ行のアクセスを防ぎます。
次の文では、ユーザーAの行ハッシュWRITEロックは、LOCKING TABLEと連携してユーザーBによる同じ行のアクセスを防ぎます。
ユーザーA:
BEGIN TRANSACTION; LOCKING TABLE sales FOR READ, LOCKING ROW FOR WRITE SELECT telex FROM customer WHERE fax=0; UPDATE customer SET telex=0 WHERE fax=0; SELECT zip FROM sales WHERE custcode=111; SELECT salesvol FROM sales WHERE custcode=222; ... END TRANSACTION;
ユーザーB:
BEGIN TRANSACTION; LOCKING ROW FOR WRITE SELECT * FROM customer WHERE cust_id=12345 INSERT INTO customer (12345, 3108284422, 3108684231, 5555); END TRANSACTION;
ユーザーBのLOCKING ROW FOR WRITE修飾子文は、ユーザーAのトランザクションが終わるまで待ってから完了します。