Если бы я мог заблокировать несколько таблиц, было бы плохо?

Давайте создадим страницу.php

query1 query2 query3 

Есть ли способ заблокировать несколько таблиц, поэтому, если один пользователь посещает Page.php, а второй пользователь открывает эту страницу немного позже, второму пользователю нужно будет дождаться выполнения всех запросов первого пользователя.

И что еще более важно, будет ли он сильно замедлять работу сайта, если одновременно будет несколько сотен пользователей на одной странице?

Спасибо.

Вы можете использовать блокировку на уровне строк, чтобы соединение блокировалось для других пользователей.

 BEGIN TRAN UPDATE table1 set locked = 1; //table locks are only taken out when data is written, you could possibly also use lock hints. UPDATE table2 set locked = 1; UPDATE table3 set locked = 1; //Tables are locked, do whatever you need here, other users hitting the page will block at the first update statement until this connection hits the commit or rollback update table1 set locked = 0; update table2 set locked = 0; update table3 set locked = 0; COMMIT 

Обратите внимание, что оператор select никогда не вызывает блокировку строки или таблицы, хотя вы можете использовать блокирующие подсказки, чтобы заставить ее заблокировать строку. Лучше всего просто коснуться строки, установив значение в строке себе или добавив другой столбец.

Базы данных работают хорошо, потому что они поддерживают параллелизм. Каждый раз, когда вы вызываете то, что будет одновременно вести себя последовательно, вы понесете штраф за производительность. В некоторых случаях это может быть хорошо, это действительно зависит от того, что вы на самом деле делаете с ним.

Я больше парень SQL Server, но это довольно общие концепции СУБД, для получения дополнительной информации я бы посмотрел:

Уровни изоляции транзакций http://dev.mysql.com/doc/refman/5.0/ru/set-transaction.html

Заблокировать подсказки http://www.xaprb.com/blog/2006/08/05/how-to-give-locking-hints-in-mysql/

Механизмы блокировки строк / таблиц http://dev.mysql.com/doc/refman/5.5/en/internal-locking.html

Есть ли способ заблокировать несколько таблиц

Вы можете сделать это, используя таблицы блокировки , но это замедлит вашу страницу вниз

И что еще более важно, будет ли он сильно замедлять работу сайта, если одновременно будет несколько сотен пользователей на одной странице?

Это будет замедлять вашу страницу, если вы это сделаете.

http://dev.mysql.com/doc/refman/5.0/en/lock-tables-restrictions.html :

Вы также можете избежать блокировки таблиц в некоторых случаях, используя функции консультативного блокирования пользовательского уровня GET_LOCK () и RELEASE_LOCK (). Эти блокировки сохраняются в хеш-таблице на сервере и реализуются с помощью pthread_mutex_lock () и pthread_mutex_unlock () для высокой скорости. См. Раздел 11.14 «Различные функции».

Я все еще думаю, что другие люди говорят, что вы должны просто использовать транзакции .


PS: Чего вы пытаетесь достичь, я уверен, что есть лучший способ добиться этого. Возможно даже без блокировок / транзакций.