暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

GaussDB LOCK TABLE-ACCESS EXCLUSIVE 模式示例

db_user 2023-10-18
144

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'的所有记录,并确保这个操作在提交之前不会被其他事务干扰。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论