Я начинаю изучать синтаксис MySQL, и теперь я спрашиваю, как блокировать/разблокировать таблицы.
После небольшого исследования кажется, что mysql не предоставляет ни одного ключевого слова "nolock".
Но если я попытаюсь выполнить следующий запрос:
select *from logs NOLOCK order by timestamp desc;
ошибок нет. Итак, существует ли стандартный способ достижения этого?
NOLOCK
не поддерживается MySQL.
Это особенность, характерная для Microsoft SQL Server: https://docs.microsoft.com/en-us/sql/t-sql/queries/hints-transact-sql-table
Вы должны понимать, что, хотя SQL является общепринятым стандартом, каждая компания, предлагающая SQL-совместимый продукт базы данных, внедрила свои собственные расширения для стандартного SQL. Поэтому такой продукт, как Microsoft SQL Server, имеет некоторые синтаксические функции, которые не поддерживаются и не нужны - другими продуктами RDBMS.
MySQL не является Microsoft SQL Server. Это две разные реализации РСУБД.
Как заметил Раймонд, вы случайно использовали NOLOCK
в месте, где MySQL будет интерпретироваться как псевдоним таблицы.
... FROM logs [AS] NOLOCK ...
Стандарт SQL поддерживает добавление ключевого слова AS
при определении псевдонимов таблиц и псевдонимов столбцов. Это может вызвать некоторые неожиданные сюрпризы, хотя это технически легальный синтаксис, чтобы опустить ключевое слово AS
.
select * from logs NOLOCK
является действительным MySQL только потому, что вы связали журналы таблиц с псевдонимом NOLOCK.