LOCK
限制对数据库表的访问。此命令只在事务块内部运行时才有意义。
LOCK 命令在“ACCESS EXCLUSIVE”模式下获取表级别的锁定;如果需要,会等待所有冲突的锁定释放。通过这种方式明确地锁定表时,会导致从其他事务或会话尝试对表执行的读取和写入操作等待。当一个用户明确地锁定表时,会阻止另一个用户从该表中选择数据或在该表中加载数据。当包含 LOCK 命令的事务完成后,会释放锁定。
引用表的命令会隐式地获取限制性较低的表锁定,例如写入操作。例如,如果某个用户尝试从表中读取数据,而另一个用户正在更新该表,那么读取的数据将是已提交的数据的快照。(在某些情况下,如果查询违反了可序列化隔离规则,则将停止。) 请参阅 管理并发写入操作。
一些 DDL 操作(例如 DROP TABLE 和 TRUNCATE)会创建独占锁定。这些操作会阻止读取数据。
如果发生锁定冲突,Amazon Redshift 会显示错误消息,对启动冲突事务的用户发出提示。收到锁定冲突的事务将会停止。每次发生锁定冲突时,Amazon Redshift 会将一个条目写入到 STL_TR_CONFLICT 表。
语法
LOCK [ TABLE ] table_name [, ...]
参数
- TABLE
-
可选关键字。
- table_name
-
要锁定的表的名称。通过使用逗号分隔的表名列表可以锁定多个表。您不能锁定视图。
示例
begin; lock event, sales; ...