我开始学习MySQL语法,现在我问如何锁定/解锁表。
经过一番研究,mysql似乎没有提供一个“nolock”关键字。
但是如果我尝试执行以下查询:
select *from logs NOLOCK order by timestamp desc;
没有发生错误。那么,有没有一种标准方法可以实现这一目标?
最佳答案
NOLOCK
不是 MySQL 支持的选项。
这是 Microsoft SQL Server 特有的功能:https://learn.microsoft.com/en-us/sql/t-sql/queries/hints-transact-sql-table
您必须了解,尽管 SQL 是通用标准,但每个提供 SQL 兼容数据库产品的公司都实现了自己对标准 SQL 的扩展。因此,像 Microsoft SQL Server 这样的产品具有一些其他 RDBMS 产品不支持且不需要的语法功能。
MySQL 不是 Microsoft SQL Server。它们是 RDBMS 的两种不同实现。
正如 Raymond 上面评论的那样,您无意中在 MySQL 将其解释为表别名的地方使用了 NOLOCK
。
... FROM logs [AS] NOLOCK ...
SQL 标准支持在定义表别名和列别名时将 AS
关键字设为可选。尽管省略 AS
关键字在技术上是合法的语法,但这可能会导致一些奇怪的意外。
关于MySQL - 选择表中的行时没有锁定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48966568/