Version: latest

Locks

To ensure database data consistency, you can execute the LOCK TABLE statement to prevent other users from modifying tables.

For example, an application needs to ensure that data in a table is not modified during transaction running. For this purpose, tables can be locked. This prevents data from being concurrently modified.

The LOCK TABLE statement is useless outside a transaction block, because the lock would remain held only to the completion of the statement.

Syntax

LOCK [ TABLE ] name  IN lock_mode MODE

Parameter Description

  • name

    Specifies the name of the table to be locked.

  • lock_mode

    Specifies the lock mode. The basic modes are as follows:

    • ACCESS EXCLUSIVE

      Guarantees that the holder is the only transaction accessing the table in any way. It is the default lock mode.

    • ACCESS SHARE

      Indicates the lock mode for reading tables without modifying them.

Examples

Obtains an ACCESS EXCLUSIVE lock on a table when going to perform a delete operation.

-- Create a sample table.
openGauss=# CREATE TABLE graderecord  
             (  
             number INTEGER,  
             name CHAR(20),  
             class CHAR(20),  
             grade INTEGER
             );
-- Insert data.
openGauss=# insert into graderecord values('210101','Alan','21.01',92);  
insert into graderecord values('210102','Ben','21.01',62);  
insert into graderecord values('210103','Brain','21.01',26);  
insert into graderecord values('210204','Carl','21.02',77);  
insert into graderecord values('210205','David','21.02',47);  
insert into graderecord values('210206','Eric','21.02',97);  
insert into graderecord values('210307','Frank','21.03',90);  
insert into graderecord values('210308','Gavin','21.03',100); 
insert into graderecord values('210309','Henry','21.03',67);  
insert into graderecord values('210410','Jack','21.04',75);  
insert into graderecord values('210311','Jerry','21.04',60);

-- Start the process.
openGauss=# START TRANSACTION;

-- Provide the example table.
openGauss=# LOCK TABLE graderecord IN ACCESS EXCLUSIVE MODE;

-- Delete the example table.
openGauss=# DELETE FROM graderecord WHERE name ='Alan';

openGauss=# COMMIT;