Компьютерные вирусы и способы борьбы с ними
Рефераты >> Информатика >> Компьютерные вирусы и способы борьбы с ними

Команда, показанная ниже, возвращает всю информацию, содержащуюся внутри таблицы personal_info. Заметьте, что для этого мы используем символ звёздочки. Таким образом, мы как бы имеем в виду "Выбрать всё из таблицы personal_info".

SELECT *

FROM personal_info

В другом случае, пользователь мог бы хотеть ограничить атрибуты (поля), которые возвращаются из базы данных. Для примера, департамент по персоналу может потребовать список last names всех работников компании. следующая SQL команда будет возвращать только эту информацию:

SELECT last_name

FROM personal_info

И в заключение, оператор WHERE может использоваться для ограничения записей, возращаемых вам, по определённому критерию. Например, можно вывести записи по персоналу только для высокооплачиваемых работников. Следующая команда возвращает все данные, хранящиеся в таблице personal_info, которые удоветворяют условию, что зарплата у них больше чем $50,000:

SELECT *

FROM personal_info

WHERE salary > $50000

UPDATE. Команда UPDATE используется для модификации хранящейся в таблице информации, причём как целой кучи, так и индивидуально по одной записи. Каждый год наша компания увеличивает зарплату своим сотрудником на 3% в соответствии увеличения стимости жизни. Следующая команда SQL используется для быстрого выполнения этой операции для всех работниов, хранящихся в базе данных:

UPDATE personal_info

SET salary = salary * 1.03

В другом же случае, наш новый работник Bart Simpson продемонстрировал верх производительности и выполнения своего (так и чешется написать супружеского .) служебного долга. И за это менеджер желает осчатливить его повышением на $5,000. Здесь оператор WHERE служит для выделения только одного Bart'а в качестве повышения зарплаты:

UPDATE personal_info

SET salary = salary + $5000

WHERE employee_id = 12345

DELETE. Команда DELETE вместе с оператором WHERE может удалить запись об этом работнике из таблицы personal_info:

DELETE FROM personal_info

WHERE employee_id = 12345

34. Многопользовательскийрежим. Транзакции. Блокировки. Журнал транзакция.

Основное требование к многопользовательским СУБД - обеспечение непротиворечивости данных в системе, при сохранении максимальной производительности и конкуренции в доступе к данным для пользователей.

Конкуренция в доступе к данным означает, что каждый из пользователей независим от остальных пользователей в потребности обработки данных. Система, во избежание порчи данных, самостоятельно устанавливает очередность работы с данными для пользователей. В случае необходимости пользователи могут ожидать своей очереди для работы с данными. Одной из главной целей многопользовательской СУБД является максимальное уменьшение этого времени ожидания до такой степени, чтобы оно (в идеале) стало незаметным для пользователя.

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

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

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

Несмотря на различия в реализации, серверы СУБД используют общие способы управления данными и доступом к ним.

Транзакции

Многопользовательские системы широко используют понятие транзакций. Транзакция - это логическая единица работы, которая состоит из одного или нескольких SQL-выражений. Группа выражений отмеченных как транзакция рассматривается как единое и неделимое целое. В случае если в одном из выражений обработки данных происходит ошибка, то транзакция отменяется целиком. Таким образом, система возвращается в состояние предшествующее началу транзакции, обеспечивая при этом физическую и логическую непротиворечивость данных.

Например, мы пытаемся модифицировать таблицу при помощи оператора UPDATE. В одном из столбцов этим оператором устанавливается недопустимое значение с точки зрения правил целостности для этой таблицы Срабатывание ограничителя приведет к тому, что сервер СУБД не позволит выполнить такую модификацию и известит нас ошибкой, а механизм контроля транзакций вызывает отмену всего выполняемого выражения и производит откат к предыдущему состоянию таблицы, сохраняя, таким образом, целостность и непротиворечивость данных. В данном примере транзакция работает с одним SQL-выражением. В случае если выражений несколько, то откатывается результат работы всех выражений составляющих единую транзакцию.

Чтобы транзакциями можно было пользоваться, в системе должен быть включен режим регистрации транзакций. После этого система сохраняет информацию о предыдущих состояниях объектов в системе в так называемых журналах транзакций. Журналы транзакций - это специальные файлы, управляемые сервером СУБД, в которых записываются все изменения произошедшие с момента начала транзакций для всех транзакций в системе.

Если происходит явное сохранение изменений в системе (по команде COMMIT) или неявное сохранение изменений (по завершению группы SQL-выражений, формирующих транзакцию или по завершению сеанса пользователя), то все изменения произошедшие с момента начала транзакции вносятся в систему, и информация о данной транзакции удаляется из журнала.

Для облегчения управления системой в режиме регистрации транзакций существует возможность задания так называемых промежуточных точек сохранения. Промежуточная точка сохранения по команде SAVEPOINT <имя_точки_останова> явно помечает состояние системы и предоставляет возможность восстановления состояния БД на момент ее сохранения по команде ROLLBACK. В данном случае ROLLBACK <имя_точки_останова> откатывает систему к указанной точке. Обычно промежуточных точек сохранения для одного пользователя может быть несколько.

В случае если транзакция по каким-то причинам не может быть завершена, то происходит неявный откат. Его причиной, могут быть, например, ошибка при выполнении одного из SQL-выражений, составляющих транзакцию, или обрыв связи с инициатором транзакции. При этом по информации из журнала восстанавливается предыдущее состояние объектов, которые пыталась модифицировать текущая транзакция, после чего информация о транзакции удаляется из журнала. Откат может быть и явным - по команде ROLLBACK.

Данная схема справедлива для Oracle, где транзакция начинается с выполнением первого оператора, прочие сервера могут работать по-другому. Например в Informix DS, транзакция начинается явно, при помощи команды BEGIN WORK.


Страница: