LOCK TABLE table_name {READ | [READ LOCAL] | [LOW_PRIORITY] WRITE} UNLOCK TABLE
Команда LOCK TABLES блокирует указанные в ней таблицы для данного потока. Команда UNLOCK TABLES снимает любые блокировки, удерживаемые данным потоком. Все таблицы, заблокированные текущим потоком, автоматически разблокируются при появлении в потоке иной команды LOCK TABLES или при прекращении соединения с сервером. Чтобы использовать команду LOCK TABLES в MySQL,необходимо иметь глобальные привилегии LOCK TABLES и SELECT для заданных таблиц. В MySQL для этого необходимы привилегии SELECT, INSERT, DELETE и UPDATE для рассматриваемых таблиц.
Основные преимущества использования команды LOCK TABLES состоят в том, что она позволяет осуществлять эмуляцию транзакций или получить более высокую скорость при обновлении таблиц.
Если в потоке возникает блокировка операции READ для некоторой таблицы, то только этот поток (и все другие потоки) могут читать из данной таблицы. Если для некоторой таблицы в потоке существует блокировка WRITE, тогда только поток, содержащий блокировку, может осуществлять операции READ и WRITE на данной таблице. Остальные потоки блокируются.
Различие между READ LOCAL и READ состоит в том, что READ LOCAL позволяет выполнять неконфликтующие команды INSERT во время существования блокировки. Однако эту команду нельзя использовать для работы с файлами базы данных вне сервера MySQL во время данной блокировки.
При использовании команды LOCK TABLES необходимо блокировать все таблицы, которые предполагается использовать в последующих запросах, употребляя при этом те же самые псевдонимы, которые будут в запросах! Если таблица упоминается в запросе несколько раз (с псевдонимами), необходимо заблокировать каждый псевдоним!
Блокировка WRITE обычно имеет более высокий приоритет, чем блокировка READ, чтобы гарантировать, что изменения обрабатываются так быстро, как возможно. Это означает, что если один поток получает блокировку READ и затем иной поток запрашивает блокировку WRITE, последующие запросы на блокировку READ будут ожидать, пока поток WRITE не получит блокировку и не снимет ее. Можно использовать блокировки LOW_PRIORITY WRITE, позволяющие другим потокам получать блокировки READ в то время, как основной поток находится в состоянии ожидания блокировки WRITE. Блокировки LOW_PRIORITY WRITE могут быть использованы только если есть уверенность, что в конечном итоге будет период времени, когда ни один из потоков не будет иметь блокировки READ.
Команда LOCK TABLES работает следующим образом: Сортирует все блокируемые таблицы в порядке, который задан внутренним образом, т.е. ``зашит'' (с точки зрения пользователя этот порядок не задан). Блокировка WRITE ставится перед блокировкой READ, если таблицы блокируются с блокировками READ и WRITE. Блокирует одну таблицу единовременно, пока поток не получит все блокировки.
Пример, требующий использования LOCK TABLES для успешного выполнения операций:
LOCK TABLES trans READ, customer WRITE;
SELECT SUM(value) FROM trans WHERE customer_id=some_id;
UPDATE customer SET total_value=sum_from_previous_statement
WHERE customer_id=some_id;
UNLOCK TABLES;
3)Использование представлений для разграничения доступа к данным.
Специальные операторы языка SQL позволяют определять так называемые представления БД, фактически являющиеся хранимыми в БД запросами (результатом любого запроса к реляционной БД является таблица) с именованными столбцами. Для пользователя представление является такой же таблицей, как любая базовая таблица, хранимая в БД, но с помощью представлений можно ограничить или наоборот расширить видимость БД для конкретного пользователя. Поддержание представлений производится также на языковом уровне.
Предложения Sql Определение Данных: CREATE VIEW – создать представление CREATE VIEW view_name AS SELECT column_name(s) FROM table_name WHERE condition DROP VIEW – удалить представление Представление – это та же самая таблица, которая реально не существует (сохраненный внутри СУБД SELECT, которому приписано соответствующее имя; усеченная таблица). Доступ пользователям к таблицам осуществляется через представление. Существует два подхода: храним все, что можно, храним все, что нельзя вычислить Представление позволяет объединить оба подхода. Прежде, чем работать с таблицей она должна выполнить SELECT. При создании представления необходимо разграничить права. Использование: 1.Управление данными, когда надо свести несколько таблиц вместе хорошо использовать представление, т.е. объединить таблицы. 2.разграничение доступа. Безопасность. Пользователь видит только предоставленные ему данные.
Предложения Grant И RevokeGRANT {привилегии} ON {объекты} TO {пользователи} [ WITH ADMIN OPTION]
Привилегии для таблиц и представлений: SELECT UPDATE (может относиться к конкретным столбцам) DELETE INSERT ALL PRIVILEGES – все привилегии
Только для базовых таблиц: ALTER INDEX
Можно отдать права администратора на таблицу. В большинстве СУБД можно добавить привилегии на столбец, но обычно это целая таблица.
Отмена привилегии UPDATE не может относиться к конкретным столбцам