ACCESS EXCLUSIVE 模式
保证其所有者(事务)是可以访问该表的唯一事务。ALTER TABLE,DROP TABLE,TRUNCATE,REINDEX,CLUSTER,VACUUM FULL命令会自动请求这种锁。在LOCK TABLE命令没有明确声明需要的锁模式时,它是缺省锁模式。
示例:
--创建测试表
DROP TABLE IF EXISTS omm2.company;
CREATE TABLE omm2.company(
id int4 PRIMARY key NOT NULL
,name varchar(10) NOT NULL
,age int4 NOT NULL
,address varchar(20) NOT NULL
,salary float4 NOT NULL
);
--初始化数据
INSERT INTO omm2.company VALUES (1, 'Paul', 32, 'California', 20000);
INSERT INTO omm2.company VALUES (2, 'Allen', 25, 'Texas', 15000);
INSERT INTO omm2.company VALUES (3, 'Teddy', 23, 'Norway', 20000);
INSERT INTO omm2.company VALUES (4, 'ZhangSan', 30, 'BeiJing', 30000);
--启动一个事务
START TRANSACTION;
LOCK TABLE omm2.company IN ACCESS EXCLUSIVE MODE;
DELETE FROM omm2.company WHERE name ='Allen';
COMMIT;
解析:
“START TRANSACTION;”:启动一个新的事务。在数据库中,事务是一组一起执行的SQL语句,要么全部成功,要么全部失败。这确保了数据的一致性。
“LOCK TABLE omm2.company IN ACCESS EXCLUSIVE MODE;”:对omm2.company表进行了排他性锁定。在此模式下,其他会话不能对表进行读写操作,直到这个事务结束。这样可以防止在删除操作过程中其他事务对表产生干扰。
“DELETE FROM omm2.company WHERE name ='Allen'; ”:从omm2.company表中删除了所有名为'Allen'的记录。
“COMMIT;”:这行代码提交了前面的事务。在事务中执行的任何更改(在本例中是删除操作)在提交后才会永久保存在数据库中。
总的来说,这段代码删除了名为'Allen'的所有记录,并确保这个操作在提交之前不会被其他事务干扰。




