关于TiDB表级锁的疑问

%E5%9B%BE%E7%89%87

最近在看TiDB的表锁实现方式,看到文档中这样表述,意思是在显示事务中无法持有表级锁吗?
文档链接:https://github.com/pingcap/tidb/pull/10343

TiDB 是不支持表级锁的 ,支持相关语法也只是为了兼容 MySQL 。TiDB 在乐观事物模式下 使用 2 阶段提交解决 数据写入的冲突问题。
悲观模式下 会使用 位于 tikv 上的 lock manange 进行 锁排队减少冲突。

乐观模式下 只有在 commit 时候才会真正进行冲突检测。悲观模式下因为引入了 lock manange 这一状态机 所以冲突检测会在 显示事物内完成。
更多相关资料 可以查询
https://book.tidb.io/session1/chapter6/tidb-transaction-mode.html

不支持表级锁是什么意思,因为使用lock table它确实可以让其它session丧失对目标表的操作权限啊? 这难道不是锁住了表吗?

这只是一个 形势上的排他,并不是真正意义上 表锁。及如果你只在一个 tidb serve 上开启了此功能 那么只有开启了 table lock 特性的 tidb server 才支持这个排他判定

开启方式,是通过 开启 tidb -server 的 enable-table-lock 为 ture 支持 lock tables 排他判定。
默认是不开启此功能的

同时这个功能并不是 常规特性,不建议在生产环境中大规模使用。

如果可能可以详细说下咱们使用这个 feature 的场景,看看是否有其他方案更简便的 解决这个问题