MySQL - 选择表中的行时没有锁定

标签 mysql locking

我开始学习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/

相关文章:

linux - 如何在mysql中使用myisam引擎优化包含10亿行、固定行格式的表?

C++ 锁定后读取文件

java - 如何锁定文件

php - Laravel - 多主键

mysql - 未处理的拒绝 SequelizeDatabaseError : Cannot add foreign key constraint - Sequilize $ node

结果集返回大量数据时的java堆大小问题

java - 如何锁定公共(public)实用程序类中的各个方法?

mysql - 在高并行连接上只选择一个表行

sql-server - SQL 过程的运行时间差异很大

mysql - 如果表中存在行,则在 SQL 中使用另一个表值