Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Язык структурированных запросов для работы с СУБД PostgreSQL. Учебное пособие

.pdf
Скачиваний:
0
Добавлен:
15.08.2026
Размер:
1 Мб
Скачать

1.11. ТРАНЗАКЦИИ

Под транзакцией принято понимать последовательность операций, выполняемых над базой данных и переводящих базу данных из одного непротиворечивого состояния в другое непротиворечивое состояние [3].

Транзакциям присущи следующие свойства:

атомарность (Atomicity);

согласованность (Consistency);

изолированность (Isolation);

долговечность (Durability).

Свойство атомарности (Atomacity) выражается в том, что транзакция должна быть выполнена в целом или не выполнена вовсе.

Свойство согласованности (Consistency) означает, что по мере выполнения транзакций данные переходят из одного согласованного состояния в другое согласованное состояние. Транзакции не разрушают взаимной согласованности данных.

Свойство изолированности (Isolation) заключается в том, что конкурирующие за доступ к базе данных транзакции физически обрабатываются последовательно изолированно друг от друга, но для пользователя выглядят так, как будто выполняются параллельно.

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

Возможны следующие два варианта завершения транзакции: фиксация транзакции и откат транзакции.

Фиксация транзакции – в результате этой операции обеспечивается запись на диск изменений в базе данных, которые были сделаны в процессе выполнения транзакции. Это означает, что результаты выполнения транзакции станут видимыми для других пользователей базы данных.

Откат транзакции означает аннулирование всех изменений данных в базе данных, которые были сделаны операторами SQL в теле текущей незавершенной транзакции. Транзакционный блок создается с помощью команды BEGIN. Оператор «Commit» выполняется в случае успешного завершения обработки информации, объединенной в транз-

41

акцию. Его выполнение фиксирует изменения, внесенные в базу данных текущей транзакции. Оператор «Rollback» прерывает выполнение текущей транзакции и отменяет изменения, проведенные в ходе выполнения этой транзакции.

Пример 15. В таблице book из примера 5 необходимо установить новое значение поля «gorod» для книги «Математика». Зафиксировать транзакцию. Ниже приведена последовательность команд, с помощью которых это можно сделать:

BEGIN;

UPDATE book SET gorod= 'Омск' WHERE kniga='Математика'; SELECT gorod FROM book WHERE kniga='Математика'; COMMIT;

Результат выполнения команд для примера 15 приводится на рис. 38.

Рис. 38. Фиксация транзакции

Пример 16. В таблице book из примера 15 необходимо установить новое значение поля «gorod» для книги «Механика». Посмотреть результат. Выполнить откат транзакции. Далее приводятся соответствующие команды:

BEGIN;

UPDATE book SET gorod= 'Томск' WHERE kniga='Механика';

42

SELECT gorod FROM book WHERE kniga='Механика'; ROLLBACK;

SELECT gorod FROM book WHERE kniga='Механика';

Результат выполнения команд для примера 16 приводится на рис. 39.

Рис. 39. Откат транзакции

1.12.КОНТРОЛЬНЫЕ ВОПРОСЫ

1.Какая команда используется для создания таблиц в среде СУБД

PostgreSQL?

2.Какая команда дает возможность выполнять редактирование данных в таблицах?

3.Каким образом можно изменить структуру таблиц?

43

4.С помощью какой команды можно удалять записи в таблицах?

5.Какой параметр является обязательным при создании нового пользователя?

6.С помощью какой команды можно изменить пароль пользова-

теля?

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

8.Какой параметр устанавливает срок действия пароля пользова-

теля?

9.Какая команда используется для переключения из одной базы данных в другую?

10.Что необходимо выполнить для изменения атрибутов базы данных?

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

внастоящий момент?

12.Какой параметр осуществляет переименование базы данных?

13.Кто имеет право удалить таблицу?

14.Можно ли в одной команде удалить сразу несколько таблиц?

15.С какой целью используется параметр CASCADE?

16.Какое сообщение будет выдано при успешном выполнении операции удаления таблицы?

17. Какая команда дает возможность добавлять новый столбец

втаблицу?

18.Какое действие изменяет владельца таблицы?

19.Что необходимо указать после ключевого слова FROM?

20.С помощью какого ключевого слова задается критерий отбора обновляемых записей?

21.Когда задаются ограничения полей?

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

23.Какая команда позволяет включать ограничения в существующую таблицу?

24.Что означает использование ключевого слова ALL в запросе?

25.Какое ключевое слово обеспечивает группировку записей по заданному критерию?

26.Какимобразомможновыполнитьсортировку результатовзапроса?

44

27.Как можно задать ограничение максимального количества возвращаемых записей?

28.Какое ключевое слово определяет поле или выражение, значения которого должны входить в итоговый набор не более одного раза?

29.В каких случаях необходимо использовать значение «infinity»?

30.Опишите результат выполнения команды:

CREATE VIEW STUD_VIEW AS SELECT * FROM STUDENT;

31.Какими свойствами обладает транзакция?

32.С помощью какой команды можно выполнить откат транз-

акции?

33.Опишите результат работы команды COMMIT.

34.Какая команда означает начало работы транзакционного блока?

1.13. ТЕСТЫ

1. В каком случае изменяется структура таблицы реляционной базы данных?

1

 

При удалении одной записи

3

При удалении одного из полей

 

 

таблицы

 

 

таблицы

2

 

При удалении нескольких

4

При добавлении одной записи

 

 

записей таблицы

 

 

таблицы

 

2. Какая команда дает возможность создать нового пользователя?

 

 

 

 

 

 

1

 

CREATE USER

 

3

DROP USER

 

 

 

 

 

 

2

 

ALTER USER

 

4

Нет правильного ответа

 

 

 

 

 

 

3. Какая команда создает новую базу данных?

 

 

 

 

 

1

 

CREATE DATABASE

3

ALTER DATABASE

 

 

 

 

 

2

 

DROP DATABASE

4

Нет правильного ответа

 

 

 

 

 

 

45

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

1

 

ALTER DATABASE

3

RENAME TO

 

 

 

 

 

2

 

RENAME DATABASE

4

Нет правильного ответа

 

 

 

 

 

 

5. С помощью какой команды можно вставить данные в таблицу?

 

 

 

 

 

1

 

ALTER TABLE

3

INSERT TABLE

2

 

INSERT INTO

4

Нет правильного ответа

 

 

 

 

 

 

6. Какое ключевое слово добавляет новое поле в таблицу?

 

 

 

 

 

1

 

RENAME

3

ADD

2

 

INSERT

4

Нет правильного ответа

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

1

 

WHERE

3

SET

 

 

 

 

 

2

 

ONLY

4

Нет правильного ответа

 

 

 

 

 

 

8. Какая команда позволяет удалять записи из таблиц?

 

 

 

 

 

1

 

DROP

3

REMOVE

 

 

 

 

 

2

 

DELETE

4

Нет правильного ответа

 

 

 

 

 

9. Укажите опцию, использование которой позволяет исключить возможность вывода одинаковых строк в запросе.

1

LIKE

3

DISTINCT

2

LIMIT

4

Нет правильного ответа

 

 

 

 

46

10. С помощью какого ключевого слова можно выполнить группировку записей по заданному критерию?

1

 

ORDER BY

3

 

HAVING

2

 

GROUP BY

4

 

Нет правильного ответа

 

11. Какой параметр определяет порядок сортировки по возраста-

нию?

 

 

 

 

 

 

 

 

 

1

 

DESC

3

 

ASC

2

 

UPPER

4

 

Нет правильного ответа

 

12. С помощью какой команды можно сформировать представле-

ние?

 

 

 

 

 

 

 

 

 

1

 

CREATE TABLE

3

 

INSERT

2

 

CREATE VIEW

4

 

Нет правильного ответа

 

13. Какое ключевое слово предоставляет пользователю право со-

здания и удаления пользователей?

 

 

 

 

 

 

 

 

 

1

 

CREATEUSER

3

 

NOCREATEDB

2

 

CREATEDB

4

 

Нет правильного ответа

 

14. С помощью какой команды можно удалить таблицу?

 

 

 

 

 

 

1

 

REMOVE TABLE

3

 

DROP TABLE

2

 

DELETE TABLE

4

 

Нет правильного ответа

 

15. С помощью какой команды можно отменять изменения, прове-

денные в ходе выполнения транзакции?

 

 

 

 

 

 

 

1

 

COMMIT

3

 

DELETE

2

 

ROLLBACK

4

 

Нет правильного ответа

47

16. Установите соответствие

между командой и ее действием

(с помощью стрелки).

 

 

 

 

 

 

Команда

 

 

Действие

DROP TABLE

 

 

Удалить таблицу

 

 

 

 

CREATE TABLE

 

 

Создать представление

ALTER TABLE

 

 

Создать таблицу

CREATE VIEW

 

 

Изменить представление

 

 

 

 

ALTER VIEW

 

 

Удалить представление

 

 

 

 

COMMIT

 

 

Изменить таблицу

 

 

 

 

DROP VIEW

 

 

Откат транзакции

ROLLBACK

 

 

Фиксация транзакции

 

 

 

Удалить строку

 

 

 

 

48

2. БЕЗОПАСНОСТЬ БАЗ ДАННЫХ

Базы данных (БД) обычно используют для хранения различных данных, что налагает на использование баз некоторые ограничения. Отдельные записи или таблицы могут быть видны только некоторым пользователям, и даже к таблицам, видимым всем, есть разные уровни допуска: не всем разрешено добавлять новые данные или изменять уже существующие. У каждого пользователя есть определенные права доступа к таблицамидругимобъектамБД, такимкаксхемыилифункции[8].

Предпочтительнее не присваивать роли непосредственно пользователям, а использовать промежуточную роль (ROLE), для которой назначаются права. Затем она присваивается подходящим пользователям. Например, роль clerk может иметь права для вставки и обновления данных в таблице user_account, но только права для вставки данных в таблицу audit_log.

С другой стороны, требуется, чтобы только определенные люди могли иметь доступ к БД и пользователь не мог видеть, что делают в БД остальные (если, конечно, он не администратор или аудитор), чтобы пользователи не могли передавать права, которые были им даны.

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

2.1. УПРАВЛЕНИЕ ПРАВАМИ ПОЛЬЗОВАТЕЛЕЙ

На работающем сервере все пользователи подразделяются как минимум на две группы: администраторы и конечные пользователи. Причем администраторы могут делать все (являются суперпользова-

49

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

Не очень разумно давать простым пользователям право создавать или изменять определения объектов БД, а значит, они не должны иметь права create для всех схем, включая public.

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

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

Чтобы отнять все права на таблицу mysecrettabie у пользователя userwhoshouldnotseeit, необходимо выполнить следующую SQL-ко- манду:

REVOKE ALL ON mysecrettabie FROM userwhoshouldnotseeit;

Однако таблица все еще остается открытой для пользователей через роль PUBLIC, поэтому следует также записать:

REVOKE ALL ON mysecrettabie FROM PUBLIC;

По умолчанию у всех пользователей есть права (SELECT, INSERT, UPDATE, DELETE, TRUNCATE, REFERENCES и TRIGGER) на все вновь созданные таблицы посредством специальной роли PUBLIC. Чтобы определенный пользователь больше не мог получить доступ

ктаблице, права на нее необходимо отнять и у этого пользователя,

иу роли PUBLIC.

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

50

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]