Вопрос о синхронизации / блокировке запросов MySQL

У меня есть быстрый вопрос, который я не могу найти в Интернете, потому что не уверен, что использую правильную формулировку или нет.

База данных MySql автоматически синхронизирует запросы или поступает примерно в одно и то же время? Например, если я отправляю запрос на вставку чего-либо в базу данных, в то время как другое соединение отправляет запрос на выбор чего-либо из базы данных, MySQL автоматически блокирует базу данных во время вставки, а затем разблокирует, когда это сделано, позволяя выберите запрос, чтобы получить к нему доступ? Спасибо

Возможный дубликат В чем разница между MyISAM и InnoDB?

Madhur Bhaiya 02.11.2018 17:36

"если я отправляю запрос на вставку чего-либо в базу данных в то же время, когда другое соединение отправляет запрос на выбор чего-либо из базы данных, MySQL автоматически блокирует базу данных во время вставки, а затем разблокирует, когда это будет сделано, разрешив запрос выбора чтобы получить к нему доступ? »Лучший ответ MySQL никогда не блокирует базу данных, таблица может быть заблокирована в зависимости от используемого движка таблиц, как прокомментировал @MadhurBhaiya.

Raymond Nijland 02.11.2018 17:42

@RaymondNijland Я предполагаю, что мой следующий вопрос будет заключаться в том, что если пользователь блокирует таблицу запросом LOCK, а затем другое соединение пытается получить доступ к этой таблице, будет ли запрос другого соединения просто ждать, пока таблица не будет разблокирована? Или запрос просто вернет ошибку

Jeb 02.11.2018 17:45

«если пользователь блокирует таблицу с помощью запроса LOCK, тогда другое соединение пытается получить доступ к этой таблице, будет ли запрос другого подключения просто ждать, пока таблица не будет разблокирована? Или запрос просто вернет ошибку», ответить на @Jeb сложно, потому что MySQL позволяет получать несколько блокировок READ для одной и той же таблицы из разных подключений / сеансов.

Raymond Nijland 02.11.2018 17:55
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
1
4
494
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ключом к пониманию того, как работает современный движок базы данных, такой как InnoDB, является Управление параллелизмом с несколькими версиями или MVCC. Это то, как одновременные операции могут выполняться параллельно, а затем согласовываться в согласованное «представление» базы данных при полной фиксации.

Если вы когда-либо использовали Git, вы знаете, как можно параллельно выполнять несколько обновлений одной и той же базы, но до тех пор, пока все они могут быть полностью объединены, конфликта нет. База данных работает точно так же, где вы можете начать транзакцию, применить кучу операций и зафиксировать ее. Если они применяются без конфликта, фиксация успешна. Если есть проблема, транзакция откатывается, как будто ее никогда не было.

Эта способность одновременно выполнять несколько операций - вот что делает механизм базы данных с поддержкой транзакций действительно мощным. Это важный компонент, необходимый для соответствия КИСЛОТНЫЙ стандарт.

MyISAM, исходный движок MySQL 3.0, не имеет ни одной из этих функций и блокирует всю базу данных при любой операции INSERT, чтобы избежать конфликта. Это работает так, как вы думали.

При создании базы данных в MySQL у вас есть выбор движка, но по умолчанию вы должны использовать InnoDB. На самом деле нет никаких причин использовать MyISAM, поскольку любые интересные функции этого движка (например, полнотекстовые индексы) были перенесены в InnoDB.

Ответ принят как подходящий

Do MySql databases automatically synchronize queries coming in at around the same time?

да.

Подумайте об этом так: одновременных запросов не существует. MySQL всегда сначала выполняет одну из них, затем вторую. (Это не совсем так; сервер намного сложнее. Но он надежно обеспечивает иллюзию последовательных запросов для нас, пользователей.)

Если из одного соединения вы выполняете один запрос INSERT или один запрос UPDATE, а из другого соединения вы выдаете SELECT, ваш SELECT получит согласованные результаты. Эти результаты будут отражать состояние данных до или после изменения, в зависимости от того, какой запрос был выполнен первым.

Вы даже можете делать такие вещи (операции чтения-изменения-записи) и поддерживать согласованность.

 UPDATE table 
    SET update_count = update_count + 1, 
        update_time = NOW()
  WHERE id = something

Если вам необходимо выполнить несколько операций INSERT или UPDATE, как если бы они были одним целым, вам нужно будет использовать механизм InnoDB, и вам нужно будет использовать транзакции. Транзакция заблокирует операции SELECT, пока она выполняется. Научить вас использовать транзакции выходит за рамки ответа на вопрос о переполнении стека.

Другие вопросы по теме