Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lektsii_poslednyaya_versia_po_BD.doc
Скачиваний:
7
Добавлен:
01.03.2025
Размер:
3 Мб
Скачать
☆

Резервное копирование и восстановление

Резервное копирование и восстановление можно выполнить с помощью утилит (например, Enterprise Manager в MS SQL Server), мастера или команд T-SQL. Для размещения архивных копий должно быть создано логическое устройство (которое может быть отдельным физическим устройством).

Резервное копирование выполняется для каждой БД индивидуально и может производиться несколькими способами.

Полное резервное копирование обеспечивает архивирование всех данных базы, размещенных как в группах файлов, так и в отдельных файлах. Этот способ наиболее часто используется для архивирования БД небольшого размера. В других случаях надо использовать выборочное копирование или копирование групп файлов.

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

Резервное копирование журнала транзакций обеспечивает архивирование и усечение журнала.

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

Восстановление БД после сбоев обеспечивается с помощью журнала транзакций. Основным принципом согласованной политики записи изменений в журнал и в БД является то, что запись об изменении объекта БД должна попадать во внешнюю память журнала раньше, чем измененный объект оказывается во внешней памяти БД. Протокол журнализации (и управления буферизацией) называется WAL (Write Ahead Log – «пиши сначала в журнал»).

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

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

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

Процесс восстановления БД зависит от типа архива. При восстановлении из дифференциального архива или из архива журнала транзакций необходимо предварительно восстановить БД из последнего полного архива. Для правильного восстановления БД на основе файлов или группы файлов необходимо использовать резервную копию журнала транзакций.

Существуют общие требования к системе восстановления данных в СУБД.

1. Пользователь не должен осуществлять рестарт транзакций или повторный ввод данных. Восстановление должно проходить на базе транзакции с помощью отмены или изменения отдельных транзакций.

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

3. При выполнении процедур автоматизированного восстановления пользователь не должен анализировать состав данных и выбирать сами процедуры.

Для восстановления БД в составе СУБД имеются следующие средства:

·   программы ведения системного журнала регистрируют операции над БД;

·   программы архивации используются для регулярного получения копий БД для последующего ее восстановления;

·   программы восстановления применяются для возврата БД или некоторых ее частей в состояние, предшествующее возникновению отказа;

·   программы отката ликвидируют последствия выполнения определенной транзакции в БД;

·   программы записи контрольных точек и повторного исполнения позволяют ускорить восстановление.

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

Контрольная точка выполняется командой CHECKPOINT при завершении работы сервера, а также в соответствии с установленным интервалом контрольных точек и включает выполнение следующих операций:

·   запись на диск всех страниц, измененных к началу контрольной точки;

·   запись в журнал транзакций списка незавершенных транзакций;

·   запись в журнал транзакций всех измененных страниц;

·   регистрация завершения контрольной точки в базе данных (а не в журнале транзакций).

Лекция 6

Средства защиты данных

Средства защиты данных

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

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

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

Использование параметров запуска. Способ позволяет задать стартовую форму, которая автоматически открывается при открытии БД. При этом можно скрыть окно БД и установить собственную кнопочную форму. Пользователь может выполнять с БД действия, которые допускает интерфейс.

Использование пароля. Простым способом защиты является установка пароля для открытия БД. При каждом открытии БД будет появляться диалоговое окно, в которое требуется ввести пароль. Может быть установлен единый пароль для всех пользователей, но наиболее гибким является способ, при котором пароль присваивается каждому пользователю. Для каждого пользователя могут быть определены объекты, доступ к которым он получает.

Запрещение репликации БД. Репликация позволяет пользователям создавать копию общей БД, которая может быть использована для нелегального распространения реплицированных данных.

Запрещение установки паролей и настройки параметров запуска пользователями. СУБД должна иметь механизмы, не позволяющие любым пользователям устанавливать пароль на БД, иначе ее невозможно будет открыть. Желательно иметь механизм установки запрета на изменение параметров запуска, определяющих настраиваемые меню, панели инструментов и стартовую форму.

При работе в многопользовательской среде большое значение приобретает понятие пользователь базы данных - владелец определенного набора объектов БД.

Пользователи системы могут быть разделены на классы. В системе любого размера всегда имеются суперпользователи – пользователи, которые автоматически имеют большинство (или все) привилегий и могут передать свой статус суперпользователя кому-нибудь с помощью привилегии или группы привилегий. Администратор базы данных (DBA) является термином, наиболее часто используемым для такого суперпользователя и для привилегий, которыми он обладает.

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

Пользователи могут объединяться в группы. Группа пользователей – это пользователи, наделенные одинаковым набором привилегий. Один и тот же пользователь может входить в разные группы. Каждый пользователь имеет специальное идентификационное имя или номер (Authorization ID).

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

Процесс управления пользователями можно разбить на три главных этапа:

·   сначала необходимо создать учетную запись пользователя в БД;

·   далее пользователя необходимо наделить привилегиями сообразно задачам, которые пользователь будет решать в рамках БД;

·   после того как доступ к данным пользователю будет уже не нужен, необходимо либо удалить из БД его учетную запись, либо отменить предоставленные ему привилегии.

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

С БД могут работать многие пользователи. Однако не всем пользователям следует разрешать выполнять любые действия. Поэтому пользователям предоставляются привилегии. Привилегия – это право пользователей на выполнение определенных операций над объектами некоторого типа.

Привилегии в разных литературных источниках классифицируются по-разному. Например, привилегии БД можно разделить на две категории:

·     системные привилегии;

·     объектные привилегии.

Системные привилегии контролируют общий доступ к БД. К ним относятся право создавать таблицы и другие объекты, а также право администрировать БД.

Объектные привилегии связаны с конкретным объектом БД. Объектная привилегия логически состоит из трех частей:

·     объект, к которому применяется привилегия;

·     разрешенные привилегией операции;

·     пользователь, которому дана привилегия.

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

Пользователь, создавший таблицу, является ее владельцем. Это означает, что пользователь имеет все привилегии в созданной им таблице и может передавать привилегии в этой таблице другим пользователям.

Для пользователя таблицы могут быть назначены следующие привилегии:

·   разрешение выполнять запросы в таблице;

·   разрешение выполнять вставку новой строки в таблице;

·   разрешение выполнять обновление значений полей в таблице;

·   разрешение выполнять удаление записей в таблице;

·   разрешение определить внешний ключ.

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

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

Лекция 7

Введение в SQL

Что такое SQL (Structured Query Language)?

SQL (Structured Query Language) — язык структурированных запросов.

SQL (Structured Query Language, язык структурированных запросов) — это специальный язык, используемый для определения данных, доступа к данным и их обработки. Язык SQL относится к непроцедурным (nonprocedural) языкам — он лишь описывает нужные компоненты (например, таблицы) и желаемые результаты, не указывая, как именно эти результаты должны быть получены. Каждая реализация SQL является надстройкой над процессором базы данных (database engine), который интерпретирует операторы SQL и определяет порядок обращения к структурам БД для корректного и эффективного формирования желаемого результата.

Стандарт SQL определяется ANSI — American National Standarts  Institute (Американским Национальным Институтом Стандартов) и в настоящее время принят ISO — International Standarts  Organization (Международной Организацией по Стандартизации).

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

Что можно делать с помощью SQL?

  • SQL позволяет создавать таблицы данных.

  • SQL позволяет хранить данные.

  • SQL позволяет получать данные.

  • SQL позволяет изменять данные.

  • SQL позволяет изменять структуру таблиц.

  • SQL позволяет объединять данные.

  • SQL позволяет выполнять вычисления.

  • SQL позволяет обеспечивать защиту данных.

Команды SQL

Команды SQL разделяются на следующие группы:

  • Команды языка определения данных — DDL (Data Definition Language). Эти SQL команды можно использовать для создания, изменения и удаления различных объектов базы данных.

  • Команды языка управления данными — DCL (Data Control Language). С помощью этих SQL команд можно управлять доступом пользователей к базе данных и использовать конкретные данные (таблицы, представления и т.д.).

  • Команды языка управления транзакциями — TCL (Тгаnsасtiоn Соntrol Language). Эти SQL команды позволяют определить исход транзакции.

  • Команды языка манипулирования данными — DML (Data Manipulation Language). Эти SQL команды позволяют пользователю перемещать данные в базу данных и из нее.

Типы данных SQL

Типы данных SQL

Типы данных SQL разделяются на три группы: - строковые; - с плавающей точкой (дробные числа); - целые числа, дата и время.

  1. Типы данных SQL строковые

    Типы данных SQL

    Описание

    CHAR(size)

    Строки фиксированной длиной (могут содержать буквы, цифры и специальные символы). Фиксированный размер указан в скобках. Можно записать до 255 символов

    VARCHAR(size)

    Может хранить не более 255 символов.

    TINYTEXT

    Может хранить не более 255 символов.

    TEXT

    Может хранить не более 65 535 символов.

    BLOB

    Может хранить не более 65 535 символов.

    MEDIUMTEXT

    Может хранить не более 16 777 215 символов.

    MEDIUMBLOB

    Может хранить не более 16 777 215 символов.

    LONGTEXT

    Может хранить не более 4 294 967 295 символов.

    LONGBLOB

    Может хранить не более 4 294 967 295 символов.

    ENUM(x,y,z,etc.)

    Позволяет вводить список допустимых значений. Можно ввести до 65535 значений в SQL Тип данных ENUM список. Если при вставке значения не будет присутствовать в списке ENUM, то мы получим пустое значение. Ввести возможные значения можно в таком формате: ENUM ( 'X', 'Y', 'Z')

    SET

    SQL Тип данных SET напоминает ENUM за исключением того, что SET может содержать до 64 значений.

  2. Типы данных SQL с плавающей точкой (дробные числа) и целые числа

    Типы данных SQL

    Описание

    TINYINT(size)

    Может хранить числа от -128 до 127

    SMALLINT(size)

    Диапазон от -32 768 до 32 767

    MEDIUMINT(size)

    Диапазон от -8 388 608 до 8 388 607

    INT(size)

    Диапазон от -2 147 483 648 до 2 147 483 647

    BIGINT(size)

    Диапазон от -9 223 372 036 854 775 808 до 9 223 372 036 854 775 807

    FLOAT(size,d)

    Число с плавающей точкой небольшой точности.

    DOUBLE(size,d)

    Число с плавающей точкой двойной точности.

    DECIMAL(size,d)

    Дробное число, хранящееся в виде строки.

  3. Типы данных SQL — Дата и время

Типы данных SQL

Описание

DATE()

Дата в формате ГГГГ-ММ-ДД

DATETIME()

Дата и время в формате ГГГГ-ММ-ДД ЧЧ:ММ:СС

TIMESTAMP()

Дата и время в формате timestamp. Однако при получении значения поля оно отображается не в формате timestamp, а в виде ГГГГ-ММ-ДД ЧЧ:ММ:СС

TIME()

Время в формате ЧЧ:ММ:СС

YEAR()

Год в двух значной или в четырехзначном формате.

Типы данных MySQL

Типы данных MySQL разделяются на следующие типы:

  • Числовые типы данных

    Типы данных

    Байт

    От

    До

    TINYINT

    1

    -128

    127

    SMALLINT

    2

    -32768

    32767

    MEDIUMINT

    3

    -8388608

    8388607

    INT

    4

    -2147483648

    2147483647

    BIGINT

    8

    -9223372036854775808

    9223372036854775807

  • Типы данных даты и времени

    Типы данных

    Значение «Ноль»

    DATETIME

    ’0000-00-00 00:00:00′

    DATE

    ’0000-00-00′

    TIMESTAMP

    00000000000000 (длина зависит от количества выводимых символов)

    TIME

    ’00:00:00′

    YEAR

    0000

  • Символьные Типы данных

Типы данных

Макс. размер

Байт

TINYTEXT или TINYBLOB

2^8-1

255

TEXT или BLOB

2^16-1 (64K-1)

65535

MEDIUMTEXT или MEDIUMBLOB

2^24-1 (16M-1)

16777215

LONGBLOB

2^32-1 (4G-1)

4294967295

Типы данных Oracle

Типы данных Oracle разделяются на следующие группы:

  • СНAR – фиксированные текстовые строки до 2000 байт. Значение типа CHAR дополняется до указанной длины пробелами.

  • VARCHAR 2 — текстовые строки переменной длины до 4000 байт.

  • NUMBER — числовые данные.

  • DECIMAL — числовые данные

  • DATE — используется для хранения дат.

  • RAW — используется для хранения двоичных данных до 2000 байт.

  • LONG — используется для хранения текстовых данных длиной до 2 ГБ

  • LONG RAW — используется для хранения двоичных данных до 2 ГБ

  • ROWID — используется для хранения идентификаторов ROWID базы данных Oracle в специальном формате (адреса строк таблицы).

  • BLOB — сохраняется до 4 ГБ двоичных данных. Данные этого типа хранятся вне таблицы, а в таблице Oracle находятся лишь указатели на объекты

  • CLOB, NCLOB — сохраняется до 4 ГБ текстовых данных. NCLOB – это тип данных NLS большой фиксированной длины (NLS означает National Language Set – набор для национальных языков – и используется для работы в Oracle на языках, отличных от английского. В английском для хранения одного символа нужен 1 байт, а в некоторых языках мира с наборами больших символов (японском, китайском, корейском), языках, где текст читается справа налево (арабский, иврит) для хранения одного символа требуется несколько байт). Данные этого типа хранятся вне таблицы, а в таблице находятся лишь указатели на объекты.

  • BFILE — сохраняется до 4 ГБ неструктурированных данных, причем в файлах операционной системы (внешние файлы).

ANSI SQL стандарт распознает только текст и число, в то время как большинство коммерческих программ используют другие специальные типы, такие как DATЕ и TIME — фактически почти стандартные типы. Некоторые пакеты также поддерживают такие типы, как, например, MONEY и BINARY. Типы данных, распознаваемые с помощью ANSI, состоят из строк символов и различных типов чисел, которые могут классифицироваться как точные числа и приблизительные числа.

CHARACTER(length) определяет спецификацию строк символов, где length задает  длину строк заданного типа. Значения этого типа должны быть заключены в одиночные кавычки. Большинство реализаций поддерживают строки переменной длины для типов данных VARCHAR и LONG VARCHAR (или просто LONG).

В то время, как поле типа CHAR всегда может распределить память для максимального числа символов, которое может сохраняться в поле, поле VARCHAR при любом количестве символов может распределить только определенное количество памяти, чтобы сохранить фактическое содержание поля, хотя SQL может установить некоторое дополнительное пространство памяти, чтобы следить за текущей длиной поля. Поле VARCHAR может быть любой длины, включая реализационно-определяемый максимум. Этот максимум может меняться от 254 до 2048 символов для VARCHAR и до 16000 символов для LONG. LONG обычно используется для текста пояснительного характера или для данных, которые не могут легко сжиматься в простые значения полей; VARCHAR может использоваться для любой текстовой строки, чья длина может меняться.

Извлечение и модифицирование полей VARCHAR — более сложный, и, следовательно, более медленный процесс, чем извлечение и модифицирование полей CHAR. Кроме того, некоторое количество памяти VARCHAR, остается всегда неиспользованной для гарантии вмещения всей длины строки. При использовании таких типов следует предусматривать возможность полей к объединению с другими полями.

Точные числовые типы — это числа, с десятичной точкой или без десятичной точки, которые могут представляться в виде [+|-]<целое без знака>[.<целое без знака>] и специфицироваться как:

DECIMAL(precision [, scale]) — аргумент размера имеет две части: точность и масштаб. Масштаб не может превышать точность. Точность указывает сколько значащих цифр имеет число. Масштаб указывает максимальное число цифр справа от десятичной точки. Масштаб = нулю  делает поле эквивалентом целого числа.

NUMERIC(precision [, scale]) — такое же как DECIMAL за исключением того, что максимальное десятичное не может превышать аргумента точности

INTEGER — число без десятичной точки. Эквивалентно DECIMAL, но без цифр справа от десятичной точки, т.е. с масштабом равным 0. Аргумент размера не используется (он автоматически устанавливается в реализационно-зависимое значение).

SMALLINT — такое же как INTEGER, за исключением того, что, в зависимости от реализации, размер по умолчанию может ( или не может ) быть меньше чем INTEGER.

Приблизительные числовые типы — это числа в показательной (экспоненциальной по основанию  10) записи, представляемые как <литеральное значение точного числа>Е<целое со знаком> и специфицирущиеся следующим образом:

FLOAT[(precision)] — число с плавающей запятой. Аргумент размера состоит из одного числа, определяющего минимальную точность.

REAL — такое же как FLOAT, за исключением того, что никакого аргумента размера не используется. Точность устанавливается реализационно-зависимой по умолчанию.

DOUBLE PRECISION — такое же как REAL, за исключением того, что реализационно-определяемая точность для DOUBLE PRECISION должна превышать реализационно-определяемую точность REAL.

Типы данных Access

Типы данных Access разделяются на следующие группы:

  • Текстовый – максимально 255 байтов.

  • Мемо — до 64000 байтов.

  • Числовой — 1,2,4 или 8 байтов.Для числового типа размер поля м.б. следующим:

    • байт — целые числа от -0 до 255, занимает при хранении 1 байт

    • целое — целые числа от -32768 до 32767, занимает 2 байта

    • длинное целое — целые числа от -2147483648 до 2147483647, занимает 4 байта

    • с плавающей точкой — числа с точностью до 6 знаков от –3,4*1038 до 3,4*1038, занимает 4 байта

    • с плавающей точкой — числа с точностью от –1,797*10308 до 1,797*10308, занимает 8 байт

  • Дата-время — 8 байтов

  • Денежный — 8 байтов, данные о денежных суммах, хранящиеся с 4 знаками после запятой.

  • Счетчик — уникальное длинное целое, генерируемое Access при создании каждой новой записи — 4 байта.

  • Логический — логические данные 1бит.

  • Поле объекта OLE — до 1 гигабайта, картинки, диаграммы и другие объекты OLE из приложений Windows. Объекты OLE могут быть связанными или внедренными.

  • Гиперссылки — поле, в котором хранятся гиперссылки. Гиперссылка может быть либо типа UNC (стандартный формат для указания пути с включением сетевого сервера файлов), либо URL(адрес объекта, документа, страницы или объекта другого типа в Интернете или Интранете. Адрес URL определяет протокол для доступа и конечный адрес).

  • Мастер подстановок — поле, позволяющее выбрать значение из другой таблицы Accesss или из списка значений, используя поле со списком.  Чаще всего используется для ключевых полей. Имеет тот же размер, что и первичный ключ, являющийся также и полем подстановок, обычно 4 байта. (Первичный ключ – одно или несколько полей, комбинация значений которых однозначно определяет каждую запись в таблице Accesss. Не допускает неопределенных .Null. значений, всегда должен иметь уникальный индекс. Служит для связывания таблицы с вторичными ключами других таблиц).

Типы данных SQL Server

Microsoft SQL Server поддерживает большинство типов данных SQL 2003. Также SQL Server поддерживает дополнительные типы данных, используемые для однозначной идентификации строк данных в таблице и на многих серверах, например UNIQUEIDENTIFIER, что соответствует аппаратной философии «роста в ширину», исповедуемой Microsoft (т. е. внедрение базы на множестве серверов на платформах Intel), вместо «роста в высоту» (т. е. внедрение на одном огромном мощном UNIX-сервере или Windows Data Center Server).

Типы данных, используемые в SQL Server:

  • BIGINT (тип данных SQL2003: B1GINT) Хранит целые числа со знаком и без знака в диапазоне от -9 223 372 036 854 775 808 до 9 223 372 036 854 775 807. Занимает 8 байт. См. тип INT, где указаны правила свойства IDENTITY, также применимые к типу BIGINT.

  • BINARY[(n)] (тип данных SQL2003: BLOB) Хранит двоичное значение фиксированной длины от 1 до 8000 байт. Значение типа BINARY занимает п + 4 байта.

  • BIT (тип данных SQL2003: BOOLEAN) Хранит значения 1, 0 или NULL, которое обозначает «unknown». В одном байте может храниться до 8 значений из столбцов типа BIT таблицы. В еще одном байте можно разместить дополнительные 8 значений типа BIT Столбцы типа BIT нельзя индексировать.

  • CHAR[(n)], CHARACTER[(n)] (тип данных SQL2003: CHARACTER[(n)]) Хранит символьные данные фиксированной длины от 1 до 8000 символов. Все неиспользованное место по умолчанию заполняется пробелами. (Автоматическое заполнение пробелами можно отключить.) Тип занимает n байт.

  • CURSOR (тип данных SQL2003: отсутствует) Специальный тип данных, используемый для описания курсора в форме переменной или параметра хранимой процедуры OUTPUT. Тип нельзя использовать в инструкции CREATE TABLE. Тип CURSOR может принимать значение NULL.

  • DATETIME (тип данных SQL2003: TIMESTAMP) Хранит значение даты и времени в диапазоне с 01-01-1753 00:00:00 до 31-12-9999 23:59:59. Для хранения требуется 8 байт.

  • DECIMAL (p. s), DEC (p. s), NUMERIC (p, s) (тип данных SQL2003: DECIMAL (p, s), NUMERIC (p. s)) Хранит десятичные дроби длиной до 38 цифр. Значения р и s определяют, соответственно, точность и масштаб. Масштаб по умолчанию равен 0. Занимаемое значением место определяется используемой точностью. При точности 1-9 используется 5 байт. При точности 10-19 используется 9 байт. При точности 20-28 используется 13 байт. При точности 29-39 используется 17 байт. См. тип INT, где указаны правила свойства IDENTITY, также применимые к типу DECIMAL.

  • DOUBLE PRECISION (тип данных SQL2003: отсутствует) Синоним FLOAT(53).

  • FLOAT[(n)] (тип данных SQL2003: FLOAT, FLOAT (n)) Хранит значения с плавающей точкой в диапазоне от-1.79Е + 308 до 1.79Е + 308. Точность, определяемая параметром и, может изменяться в пределах от 1 до 53. Для хранения 7 цифр (n — от 1 до 24) требуется 4 байта. Значения, превышающие 7 цифр, занимают 8 байт.

  • IMAGE (тип данных SQL2003: BLOB) Хранит двоичное значение переменной длины до 2 147 483 647 байт. Этот тип данных часто используется для хранения графики, звука и файлов, таких, как документы MS Word и электронные таблицы MS Excel. Значениями типа IMAGE нельзя свободно манипулировать. Столбцы типа IMAGE и TEXT имеют множество ограничений на способы использования. См. описание типа TEXT, где приведен список команд и функций, которые применимы и к типу IMAGE.

  • INT [IDENTITY [(seed, increment)] (тип данных SQL2003: INTEGER) Хранит целые числа со знаком или без знака в диапазоне от -2 147 483 648 до 2 147 483 647. Занимает 4 байта. Все целочисленные типы данных, а также типы, хранящие десятичные дроби, поддерживают свойство IDENTITY, identity — это автоматически инкрементируемый идентификатор строки. Обращайтесь к разделу «Инструкция CREATE/ALTER TABLE» главы 3.

  • MONEY (тип данных SQL2003: отсутствует) Хранит денежные значения в диапазоне от -922337203685477.5808 до 922337203685477.5807. Значение занимает 8 байт.

  • NCHAR(n), NATIONAL CHAR(n), NATIONAL CHARACTER(n) (тип данных SQL2003: NATIONAL СНАRACTER(n)) Хранит данные формата UNICODE фиксированной длины до 4000 символов. Для хранения требуется n*2 байт.

  • NTEXT, NATIONAL TEXT (тип данных SQL2003: NCLOB) Хранит фрагменты текста в формате UNICODE длиной до 1 073 741 823 символа. См. описание типа TEXT, где приведен список команд и функций, которые применимы и к типу NTEXT

  • NUMERIC(p, s) (тип данных SQL2003: DECIMAL (p, s)) Синоним типа DECIMAL. См. описание типа INT, где приведены правила, относящиеся к свойству IDENTITY.

  • NVARCHAR(n), NATIONAL CHAR VARYING(n), NATIONAL CHARACTER VARYING(n) (тип данных SQL2003: NATIONAL CHARACTER VARYING(n)) Хранит UNICODE-данные переменной длины до 4000 символов. Занимаемое место вычисляется как удвоенное значение длины всех символов, вставленных в поле (число символов * 2). В SQL Server системный параметр SET ANSI_PADDINGX для полей NCHAR и NVARCHAR всегда установлен (ON).

  • REAL, FLOAT(24) (тип данных SQL2003: REAL) Хранит значения с плавающей точкой в диапазоне -3.40Е+38 до 3.40Е+38. Зани¬мает 4 байта. Тип REAL функционально эквивалентен типу FLOAT(24).

  • ROWVERSION (тип данных SQL2003: отсутствует) Уникальное число, хранимое в базе данных, которое обновляется всякий раз, когда обновляется строка, В более ранних версиях называется TIMESTAMP.

  • SMALLDATETIME (тип данных SQL2003: отсутствует) Хранит дату и время в диапазоне от ’01-01-1900 00:00′ до ’06-06-2079 23:59′ с точностью до минуты. (Минуты округляются до меньшего значения, если значе-ние секунд 29.998 и менее, в противном случае они округляются до большего значения.) Значение занимает 4 байта.

  • SMALLINT (тип данных SQL2003: SMALLINT) Хранит целые числа со знаком или без знака в диапазоне от -32 768 до 32 767. Занимает 2 байта. См. описание типа INT, где приведены правила, относящиеся к свойству IDENTITY, которые также применимы и к этому типу.

  • SMALLMONEY (тип данных SQL2003: отсутствует) Хранит денежные значения в диапазоне от 214748.3648 до -214748.3647. Значе-ния занимают 4 байта.

  • SQLVARIANT (тип данных SQL2003: отсутствует) Хранит значения, относящиеся к другим поддерживаемым SQL Server типам данных, за исключением типов TEXT, NTEXT, ROWVERSION и других значений типа SQL VARIANT. Может хранить до 8016 байт данных, поддерживаются значения NULL и DEFAULT. Тип SQL VARIANT используется в столбцах, параметрах, переменных и возвращаемых функциями и хранимыми процедур, ми значениях.

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

  • TEXT (тип данных SQL2003: CLOB) Хранит очень большие фрагменты текста длиной до 2 147 483 647 символов. Значениями типа ТЕХТн IMAGE часто гораздо труднее манипулировать, чем, скажем, значениями типа VARCHAR. Например, нельзя создавать индекс по столбцу типа TEXT или IMAGE. Значениями типа TEXT можно манипулировать при помощи функций DATALENGTH, PATINDEX, SUBSTRING, TEXTPTR и ТЕХTVALID, а также команд READTEXT,SET TEXTSIZE, UPDATETEXT и WRITETEXT.

  • TIMESTAMP (тип данных SQL2003: TIMESTAMP) Хранит автоматически генерируемое двоичное число, обеспечивающее уникальность в текущей базе данных и, следовательно, отличающееся от типа данных TIMESTAMP стандарта ANSI. Тип TIMESTAMP занимает 8 байт. В настоящее время вместо TIMESTAMP для однозначной идентификации строк лучше применять значения типа ROWVERSION.

  • TINYINT Хранит целые числа без знака в диапазоне от 0 до 255 и занимает 1 байт. См. описание типа INT, где приведены правила, относящиеся к свойству IDENTITY, которые также применимы и к этому типу.

  • UNIQUEIDENTIFIER (тип данных SQL2003: отсутствует) Представляет собой значение, уникальное для всех баз данных и всех серверов. Представлено в виде хххххххх-хххх-хххх-хххх-хххххххххххх, в котором каждый «х» представляет собой шестнадцатеричное число в диапазоне 0-9 или а — f. Единственными операциями, которые можно производить над значениями этого типа, являются сравнение и проверка на NULL. В столбцах этого типа можно использо¬вать ограничения и свойства, за исключением свойства IDENTITY.

  • VARBINARY[(n)] (тип данных SQL2003: BLOB) Представляет собой двоичное значение переменной длины, до 8000 байт. Занимаемое место соответствует размеру вставленных данных плюс 4 байта.

  • VARCHARf(n)], CHAR VARYING [(n)], CHARACTER VARYING [(n)] (тип данных SQL2003: CHARACTER VARYING (n)) Хранит символьные данные фиксированной длины размером от 1 до 8000 символов. Занимаемое место равно реальному размеру введенного значения в байтах, а не значению n.

Типы данных PostgreSQL

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

  • BJGSERJAL

  • BIT (тип данных SQL2003: BIT) Битовая строка фиксированной длины.

  • BIT VARYING(n) varbit(n) (тип данных SQL2003: BIT VARYING) Обозначает битовую строку переменной длины в n бит.

  • BOOL, BOOLEAN (тип данных SQL2003: BOOLEAN) Хранит логическое булево значение (true/false/unknown). Рекомендуемыми значе-ниями являются ключевые слова TRUE и FALSE, хотя PostgreSQL допускает применение нескольких литеральных значений для «true»: TRUE, t, true, у, yes и 1. Допус¬тимыми значениями для «false» являются: FALSE, f, false, n, no и 0.

  • BOX ((xl, у I), (x2, y2)) (тип данных SQL2003: отсутствует) Хранит значения, определяющие прямоугольную область на плоскости. Значения занимают 32 байта и представлены в виде ((xl, yl), (х2, у2)), что соответствует противоположным углам прямоугольника (правый верхний и левый нижний соот-ветственно). Внешние скобки являются необязательными.

  • BYTEA (тип данных SQL2003: BINARY LARGE OBJECT) Сырые, двоичные данные, используемые, например, для хранения графики, звука и документов. Для хранения этого типа требуется 4 байта плюс реальный размер битовой строки.

  • CHAR(n), СНАRA CTER(n) (тип данных SQL2003: CHARACTER(n)) Содержит символьную строку фиксированной длины, дополняемую пробелами до длины n. Попытка вставить значение, превышающее по длине n, приводит к ошибке (если только лишние символы не представляют собой пробелы, которые в таком случае обрезаются так, чтобы длина составила п символов).

  • CIDR(x.x.x.xZy) (тип данных SQL2003: отсутствует) Описывает адрес сети или хоста в формате версии 4 протокола IP Адрес занимает 12 байт. Допустимыми значениями являются любые допускаемые протоколом IPv4 сетевые адреса. В типе CIDR данные представлены в форме х.х.х.х/у, где х.х.х.х — IP-адрес, а у — количество бит сетевой маски. В CIDR не допускается использование ненулевых битов справа от нулевого бита сетевой маски.

  • CIRCLE х, у, r (тип данных SQL2003: отсутствует) Описывает окружность на плоскости. Значения занимаю!’ 24 байта и представлены в форме х, у, r. Значения* и у представляют собой координаты центра окружности, а r — длину ее радиуса. Значения х, у и r при желании можно ограничить скобками или фигурными скобками.

  • DATE (тип данных SQL2003: DATE) Хранит календарную дату (год, день и месяц) без времени суток. Занимает 4 байта. Даты должны быть в диапазоне от 4713 до п. э. до 32767 и. э. Предел разрешения для типа DATE, естественно, один день.

  • DATETIME (тип данных SQL2003: T1MESTAMP) Хранит календарную дату с указанием времени суток.

  • DECIMAL [(p, s)], NUMERIC [(p. s)] (тип данных SQL2003: DECIMAL (PRECISION SCALE), NUMERIC (x, p)) Хранит точные числовые значения с точностью (р), равной 9, и масштабом (s), равным нулю, без верхнего предела.

  • FLOAT4, REAL (тип данных SQL2003: FLOAT(p)) Хранит значения с плавающей точкой с точностью, равной 8 или менее, и 6 знаками после занятой.

  • FLOAT8, DOUBLE PRECISION (тип данных SQL2003: FLOAT(p), 7 < = р < 16) Хранит значения с плавающей точкой с точностью, равной 16 или менее, и 15 знаками после запятой.

  • INET (х.х.х.х/у) Хранит адрес сети или хоста в формате версии 4 протокола IP. Адрес занимает 12 байт. Допустимыми значениями являются любые допускаемые протоколом IPv4 сетевые адреса, х.х.х.х — IP-адрес, у — количество бит сетевой маски. По умолчанию сетевая маска равна 32. В отличие от CIDR, в INET допускается использование ненулевых битов справа от сетевой маски.

  • SMALLINT (тип данных SQL2003: SMALLINT) Хранит двухбайтные целые числа со знаком и без знака в диапазоне от -32 768 до 32 767. Синоним — INT72.

  • INTEGER (тип данных SQL2003: INTEGER) Хранит 4-байтпые целые числа со знаком или без знака в диапазоне от -2 147 483 648 до 2 147 483 647. Синоним — 1NT4.

  • INT8 (тип данных SQL2003: отсутствует) Хранит 8-байтные целые числа со знаком или без знака в диапазоне от -9 223 372 036 854 775 808 до 9 223 372 036 854 775 807.

  • INTERVAL(p) (тип данных SQL2003: отсутствует) Хранит общеупотребимые значения интервалов времени в диапазоне от -178 000 000 до 178 000 000 лет. Занимает 12 байт. Самым низким разрешением типа INTERVAL является микросекунда. Этот тип хранения даты отличается от стандарта ANSI, который требует указывать спецификатор интервала, например INTERVAL YEAR ТО MONTH.

  • LINE ((xl, у I), (x2, y2)) (тип данных SQL2003: отсутствует) Хранит информацию о прямой линии на плоскости, без конечных точек. Значения занимают 32 байта и представлены в виде ((xl, yl), (х2, у2)), что обозначает начальную и конечную точку линии. Скобки в синтаксисе типа LINE являются необязательными.

  • LSEG ((xl, yl), (х2, у2)) (тип данных SQL2003: отсутствует) Хранит отрезок прямой линии (line segment, LSEG) на плоскости, с конечными точками. Значения занимают 32 байта и представлены в виде ((xl, yl), (х2, у2)). Скобки в синтаксисе типа LSEG являются необязательными. Для интересующих-ся: «отрезок» — это то, что большинство людей обычно называют линией. Например, линии на игровом поле в действительности являются отрезками.

  • MACADDR (тип данных SQL2003: отсутствует) Может хранить значение МАС-адреса сетевой карты компьютера. Занимает 6 байт. Тип MACADDR допускает несколько форм адреса, соответствующих промышленным стандартам, например: 08002В:010203 08002В-010203 0800.2В01.0203 08-00-2В-01-02-03 08:00:2В:01:02:03

  • MONEY, DECIMAL(9,2) (тип данных SQL2003: отсутствует) Хранит денежные значения в формате США в диапазоне от -21474836.48 до 21474836.47.

  • NUMERIC [(p, s)], DECIMAL[(p, s)] (тип данных SQL2003: отсутствует) Хранит точные числовые данные с точностью (р) и масштабом (s).

  • OID (тип данных SQL2003: отсутствует) Хранит уникальные идентификаторы объектов.

  • PATH ((xl, у I), … п), Path ((xl, yl), … n) (тип данных SQL2003: отсутствует) Описывает открытый или закрытый геометрический контур на плоскости. Значения представлены в виде ((xl, yl), … п) и занимают 4 + 32и байт. Каждая пара значений (х, у) соответствует точке контура. Контуры бывают либо открытыми, когда первая и последняя точка не совпадают, или закрытыми, когда первая и послед¬няя точка совпадают. Для обозначения закрытых контуров выражение заключают в круглые скобки, а для обозначения открытых — в квадратные.

  • POINT (х, у) (тип данных SQL2003: отсутствует) Хранит значение, описывающее геометрическую точку на плоскости. Занимает 16 байт. Значения представлены в виде (х, у). Точка является основой других двухмерных пространственных типов данных, поддерживаемых в PostgreSQL. Скобки в синтаксисе этого типа являются необязательными.

  • POLYGONE ((x1,y1), … n) (тип данных SQL2003: отсутствует) Хранит значение, описывающее закрытый геометрический контур на плоскости. Занимает 4 + 32n байт. Значения представлены в виде ((xl, yl), … n). По сути тип POLYGONE эквивалентен типу, используемому для хранения закрытого контура.

  • SERIAL, SER1AL4 (тип данных SQL2003: отсутствует) Хранит автоматически инкрементируемое, уникальное целое значение ID, приме¬няемое для индексирования и перекрестных ссылок. Этот тип хранит до 4 байт данных (диапазон чисел от 1 до 2 147 483 647). Таблицы, определенные с этим типом данных, нельзя удалять напрямую. Сначала нужно подать команду DROP SEQUENCE, а только после этого подавать команду DROP TABLE.

  • SER1AL8, BIGSERIAL (тип данных SQL2003: отсутствует) Хранит автоматически инкрементируемое, уникальное целое значение ID, применяемое для индексирования и перекрестных ссылок. Этот тип хранит до 8 байт данных (диапазон чисел от 1 до 9 223 372 036 854 775 807). Таблицы, определенные с этим типом данных, нельзя удалять напрямую. Сначала нужно подать команду DROP SEQUENCE, а только после этого подавать команду DROP TABLE.

  • TEXT (тип данных SQL2003: CLOB) Хранит большой массив символьных строк переменной длины до 1 гигабайта. PostgreSQL автоматически сжимает строки типа TEXT, поэтому место, занимаемое на диске, может быть меньше, чем размер строк.

  • TIME [(p)] [WITHOUT TIMEZONE \ WITH TIME ZONE] (тип данных SQL2003: TIME) Хранит время суток либо без учета часового пояса (используется 8 байт), либо с учетом часового пояса, в котором находится сервер базы данных (используется 12 байт). Допустимый диапазон значений: 00:00:00.00 — 23:59:59.99. Наименьшее значение — 1 микросекунда. Заметьте, что в большинстве систем UNIX информация о часовом поясе доступна только для дат с 1902 по 2038 год.

  • TIMESPAN (тип данных SQL2003: отсутствует) Хранит значение, представляющее собой конкретный промежуток времени. Наи¬более похожим на тип TIMESPAN в стандарте ANSI является тип INTERVAL.

  • TIMESTAMP [(р)] [WITHOUT TIMEZONE \ WITH TIMEZONE] (тип данных SQL2003: TIMESTAMP [WITH TIMEZONE I WITHOUT TIMEZONE]) Хранил дату и время с учетом и без учета часового пояса сервера базы данных. Допустимый диапазон значений — от 4713 до н. э. до 1 465 001 н. э. Одно значение типа TIMESTAMP занимает 8 байт. Самое наименьшее значение — 1 микросекунда. Заметьте, что в большинстве систем UNIX информация о часовом поясе доступна только для дат с 1902 по 2038 год.

  • TIMETZ (тип данных SQL2003: TIME WITH TIMEZONE) Хранит значение времени суток с учетом часового пояса.

  • VARCHAR(n), CHARACTER VARYLNG(n) (тип данных SQL2003: CHARACTER VARYING(n)) Хранит символьные строки переменной длины длиной до п. Заключительные пробелы не сохраняются.

Лекция 8

Типы привилегий

Объектная и системная привилегии

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

Объектная привилегия

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

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

Объектная привилегия

Описание

SELECT

пользователь с этой привилегией может выполнять запросы для таблицы

INSERT

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

UPDATE

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

DELETE

пользователь с этой привилегией может удалить строки из таблицы

ALTER

Позволяет изменять структуру только таблицы или последовательности, привилегии Alter на все другие объекты базы данных считаются системными

INDEX

Позволяет создавать индекс для ранее описанной таблицы

EXECUTE

Позволяет выполнять хранимую процедуру или функцию

REFERENCES

Пользователь с этой привилегией может определить внешний ключ, который использует один или несколько столбцов таблицы в качестве родительского ключа. Можно ограничить привилегию указанием столбцов. (Внешний ключ, родительский ключ – когда поле таблицы ссылается на другое поле в другой таблице, оно называется внешним ключом (foreign key). Поле, на которое он ссылается, называется его родительским ключом (parent key). Поле ссылается на (refers to) или является ссылкой (references))

Системные привилегии

Привилегии, которые не определяются в терминах отдельных объектов, называют системными привилегиями(system privileges) или авторским правом на базу данных (database authorities). Системные привилегии включают в себя право создавать объекты базы данных.

Обычно принято различать три типа базовых систем привилегий, которые называют:

Тип привилегии

Описание

CONNECT

Предусматривает право входить в систему и создавать представления и синонимы (синоним – альтернативное имя таблицы), если речь идет об объектных привилегиях. Пользователь может работать с объектами, к которым он имеет привилегии по доступу

RESOURCE

Предоставляет право создавать таблицы и индексы

DBA

(Database Administrator) – разрешает пользователю выполнять действия администратора базы данных, т.е. распоряжаться ею как своей собственной.

Имея привилегию DBA, пользователь может выполнять команду Select для любой таблицы и представления, создавать объекты для других пользователей, предоставлять другим пользователям различные привилегии, выполнять экспорт/импорт БД. Эту привилегию имеет пользователь (один или несколько) с функцией администрирования базы данных. Кроме этого, существует также специальный пользователь, называемый системным администратором, который обладает высшим авторским правом.

SQL команды

Выделяют следующие группы команд SQL:

Команды языка определения данных

Команды языка определения данных DDL (Data Definition Language, язык определения данных) — это подмножество SQL, используемое для определения и модификации различных структур данных. К данной группе относятся команды предназначенные для создания, изменения и удаления различных объектов базы данных. Команды CREATE (создание), ALTER (модификация) и DROP (удаление) имеют большинство типов объектов баз данных (таблиц, представлений, процедур, триггеров, табличных областей, пользователей и др.). Т.е. существует множество команд DDL, например, CREATE TABLE, CREATE VIEW, CREATE PROCEDURE, CREATE TRIGGER, CREATE USER, CREATE ROLE и т.д.

Некоторым кажется, что применение DDL является прерогативой администраторов базы данных, а операторы DML должны писать разработчики, но эти два языка не так-то просто разделить. Сложно организовать аффективный доступ к данным и их обработку, не понимая, какие структуры доступны и как они связаны. Также сложно проектировать соответствующие структуры, не зная, как они будут обрабатываться.

Команды языка управления данными

С помощью команд языка управления данными ( DCL (Data Control Language) ) можно управлять доступом пользователей к базе данных. Операторы управления данными включают в себя применяемые для предоставления и отмены полномочий команды GRANT и REVOKE, а также команду SET ROLE, которая разрешает или запрещает роли для текущего сеанса.

Команды языка управления транзакциями

Команды языка управления транзакциями ( TCL (Тгаnsасtiоn Соntrol Language) ) команды позволяют определить исход транзакции. Команды управления транзакциями управляют изменениями в базе данных, которые осуществляются командами манипулирования данными. Транзакция (или логическая единица работы) – неделимая с точки зрения воздействия на базу данных последовательность операторов манипулирования данными (чтения, удаления, вставки, модификации) такая, что либо результаты всех операторов, входящих в транзакцию, отображаются в БД, либо воздействие всех этих операторов полностью отсутствует. COMMIT — заканчивает («подтверждает») текущую транзакцию и делает постоянными (сохраняет в базе данных) изменения, осуществленные этой транзакцией. Также стирает точки сохранения этой транзакции и освобождает ее блокировки. Можно также использовать эту команду для того, чтобы вручную подтвердить сомнительную распределенную транзакцию. ROLLBACK — выполняет откат транзакции, т.е. отменяет все изменения, сделанные в текущей транзакции. Можно также использовать эту команду для того, чтобы вручную отменить работу, проделанную сомнительной распределенной транзакцией. Понятие транзакции имеет непосредственную связь с понятием целостности базы данных. Очень часто база данных может обладать такими ограничениями целостности, которые просто невозможно не нарушить, выполняя только один оператор изменения БД. Например, невозможно принять сотрудника в отдел, название и код которого отсутствует в базе данных. В системах с развитыми средствами ограничения и контроля целостности каждая транзакция начинается при целостном состоянии базы данных и должна оставить это состояние целостными после своего завершения. Несоблюдение этого условия приводит к тому, что вместо фиксации результатов транзакции происходит ее откат (т.е. вместо оператора COMMIT выполняется оператор ROLLBACK), и база данных остается в таком состоянии, в котором находилась к моменту начала транзакции, т.е. в целостном состоянии. В связи со свойством сохранения целостности БД транзакции являются подходящими единицами изолированности пользователей, т.е., если с каждым сеансом работы с базой данных ассоциируется транзакция, то каждый пользователь начинает работу с согласованным состоянием базы данных, т.е. с таким состоянием, в котором база данных могла бы находиться, даже если бы пользователь работал с ней в одиночку.

Команды языка манипулирования данными

Команды языка манипулирования данными DML (Data Manipulation Language) позволяют пользователю перемещать данные в базу данных и из нее:

  • INSERT — осуществляет вставку строк в таблицу.

  • DELETE — осуществляет удаление строк из таблицы.

  • UPDATE — осуществляет модификацию данных в таблице.

  • SELECT — осуществляет выборку данных из таблиц по запросу.

Каждый, кто работает с SQL в среде Oracle, должен вооружиться книгами: справочником по языку SQL, таким как «Oracle SQL: The Essential Reference? (O’Reilly), руководством по оптимизации производительности, например «Oracle SQL Tuning Pocket Reference» (O’Reilly).

SQL Create Table

Команда SQL Create Table

Команда SQL Create Table предназначена для описания структуры таблицы. Команда SQL Create Table создает пустую таблицу (без строк).

Если вы знакомы с SQL Create Table, то наверняка знаете о пунктах, которые мы перечислим ниже, однако если всё-таки вы что-то подзабыли, то милости просим – как говорится, повторение мать учения. Итак, Create Table MySQL, прежде всего, поддерживает опцию определения локальных столбцов, которые, в свою очередь, определяют тип данных, а также имя данных в столбце. Также определяется опция вычисляемых столбцов, вычисление происходит в тех случаях, когда организуется доступ к таблице. Что касается столбцов, которые основаны на доменах, то для них определение может включать каждое значение по умолчанию. Оно также определяет порядок сортировки. В связи с этим определение домена отменяется автоматически. Есть ряд описаний, которые включают предложение CHARACTER SET, определяя кодировку, присущую одному столбцу. При неиспользовании описаний, кодировка остаётся прежней (базовой). Стоит отметить, что текущие столбцы никак не меняются. Что же касается Create Table Oracle, то оно определяет фрагментацию таблицы.

CREATE TABLE MySQL / SQL

SQL Create Table. Пример №1.

CREATE TABLE Persons ( P_Id int, LastName varchar(255), FirstName varchar(255), Address varchar(255), City varchar(255) );

SQL Create Table. Пример №2.

CREATE TABLE `blocklist` ( `email` text NOT NULL, `login` text NOT NULL, `remote_addr` text NOT NULL, `browser` text NOT NULL, `payment_wmid` text NOT NULL, `payment_account` text NOT NULL, `payment_raccount` text NOT NULL );

CREATE TABLE Oracle

Синтаксис команды CREATE TABLE

Синтаксис команды CREATE TABLE

Определение ограничений целостности таблицы SQL. Чтобы предохранить поле от разрешения в нем пустых (NULL) указателей для столбца задается ограничение NOT NULL.

SQL Create Table. Пример №3.

CREATE TABLE Student ( Kod_stud integer NOT NULL, Fam char (30) NOT NULL , Adres char (50), Ball decimal );

При создании, с помощью CREATE TABLE, любому столбцу с ограничением NOT NULL должно быть установлено значение в каждом предложении INSERT, воздействующем на таблицу.

CREATE USER

SQL, MySQL, Access, Oracle CREATE USER Схема пользователя – логическая совокупность объектов БД, например таблиц, принадлежащих определенному владельцу.

CREATE USER

Для создания схемы пользователя БД, используемой для доступа к базе данных и работы с ней, предназначена команда CREATE USER.

Для схемы пользователя (CREATE USER) при ее создании могут быть указаны следующие свойства:

  • Имя области данных в базе данных, используемой по умолчанию при работе данного пользователя с базой данных;

  • Имя области данных в базе данных, используемой для хранения временных данных при работе данного пользователя с базой данных;

  • Размеры области данных, выделенной для работы с базой данных данному пользователю;

  • Профили пользователя, определяющие ограничения на использование ресурсов базы данных.

Условия, необходимые для использования команды (CREATE USER):

  • Пользователь, создающий другого пользователя, должен иметь системную привилегию CREATE USER;

  • Чтобы указать имя области данных, используемой для хранения временных данных, или используемой по умолчанию, необходимо, чтобы уровень в СУБД создающего пользователя был старше уровня создания области данных;

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

Синтаксис команды CREATE USER

Синтаксис команды Create User

Ключевые слова и выражения команды CREATE USER

Слова и выражения CREATE USER

Описание

user

Является именем пользователя (USER), который будет создан.

IDENTIFIED

Определяет способ доступа к Oracle:

  • BY password — доступ определяется по вводимому паролю (password); пароль должен соответствовать правилам именования объектов в СУБД.

  • EXTERNALLY — доступ определяется именем операционной системы устанавливаемого соединения

DEFAULT TABLESPACE

Устанавливает имя области данных, в которой по умолчанию бу­дут создаваться объекты пользователя. Если имя области данных не указано, то объекты пользователя по умолчанию создаются в области данных SYSTEM

TEMPORARY TABLESPACE

Устанавливает имя областиданных для временных сегментов пользователя. Если имя области данных не указано, то времен­ные сегменты создаются в области данных SYSTEM.

QUOTA

Позволяет пользователю использовать область (области) дан­ных, а также указать (необязательно) размер используемого про­странства в байтах, килобайтах(К) или мегабайтах(М). Возможно указание различного значения QUOTА для нескольких областей данных. Ключевое слово UNLIMITED используется при предос­тавлении неограниченного права на использование областей дан­ных.

PROFILE

Определяет профиль пользователя, определяющий ограничения на использование ресурсов базы данных. По умолчанию пользо­вателю назначается профиль DEFAULT

Чтобы пользователь мог выполнять некоторые операции по работе с базой данных, раздел привилегий пользователя должен содержать записи, которые разрешают пользователю выполнение соответствующих операций. В данном разделе размещаются также за­писи об операциях, определяемых ролями, определенными для данного пользователя. При соз­дании пользователя этот раздел является пустым, поэтому после создания пользователя необхо­димо предоставить ему привилегию на соединение с базой данных.

Oracle CREATE USER Пример 1

CREATE USER st IDENTIFIED BY st

DEFAULT TABLESPACE users

TEMPORARY TABLESPACE temp

QUOTA 150K ON users

QUOTA UNLIMITED ON temp;

Созданный пользователь обладает следующими характеристиками:

Имя – st

Пароль – st

Область данных – users

Размер области данных — 150 килобайт

Область временных данных – temp

Размер области временных данных  — неограниченное использование

CREATE USER Пример 2

CREATE USER st IDENTIFIED BY st DEFAULT TABLESPACE users TEMPORARY TABLESPACE temp QUOTA 3000K ON users QUOTA UNLIMITED ON temp;

CREATE USER Пример 3

CREATE USER user_name IDENTIFIED BY user_pass DEFAULT TABLESPACE users TEMPORARY TABLESPACE temp QUOTA 300K ON users QUOTA UNLIMITED ON temp;

CREATE VIEW

CREATE VIEW Oracle

Представление – это виртуальная таблица. В действительности представление – всего лишь результат выполнения оператора SELECT, который хранится в структуре памяти, напоминающей SQL таблицу, например, Oracle. Для тех, кто работает с представлением, манипулирование его данными ничем не отличается от манипулирования данными таблицы. В некоторых случаях пользователь может вводить данные в представление, как если бы оно было таблицей. Работая с представлением нужно помнить, что:

  • Представления добавляют уровень защиты данных (например, можно создать представление для таблицы, где пользователю, выполняющему SELECT над представлением, видны только сведения о зарплате)

  • Представления могут скрывать сложность данных, комбинируя нужную информацию из нескольких таблиц

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

Представление создается с помощью команды CREATE VIEW. После создания представления становятся частью схемы создавшего их пользователя. Переназначить их другому пользователю можно тогда, когда у него имеется системная привилегия CREATE ANY VIEW.

Синтаксис команды CREATE VIEW Oracle

Синтаксис команды Create View

Основные ключевые слова и параметры CREATE VIEW Oracle: OR REPLACE, FORCE, NOFORCE, Sсhema, View, Alias, AS subquery, WITH CHECK OPTION, Constraint

OR REPLACE — пересоздает представление, если оно уже существует. Можно использовать эту опцию для изменения определения представления без того, чтобы удалять его, создавать заново и вновь назначать все объектные привилегии, которые были назначены по данному представлению;

FORCE — создает представление независимо от того, существуют ли базовые таблицы этого представления, и от того, имеет ли владелец схемы, содержащей представление, привилегии по этим таблицам. Необходимо чтобы оба названных условия были удовлетворены, прежде чем по данному представлению можно будет выдавать любые предложения SELECT, INSERT, UPDATE или DELETE. По умолчанию применяется параметр NOFORCE;

NOFORCE — создает представление только в том случае, если существуют базовые таблицы этого представления, а владелец схемы, содержащей представление, имеет привилегии по этим таблицам;

Sсhema — схема, в которой создается представление. Если СХЕМА опущена, то ORACLE создает представление в схеме пользователя;

View — ключевое слово view это имя создаваемого представления;

Alias — специфицирует имена для выражений, выбираемых запросом представления. Число алиасов должно совпадать с количеством выражений, выбираемых подзапросом. Алиасы должны удовлетворять правилам именования объектов схем. Алиасы должны быть уникальны внутри представления. Если алиасы опускаются, то ORACLE определяет их по именам или алиасам столбцов в запросе представления. Поэтому использовать алиасы нужно, если запрос представления содержит, помимо имен столбцов, выражения;

AS subquery — идентифицирует столбцы и строки таблиц, на которых базируется представление. Запрос представления может быть любым предложением SELECT, не содержащим фраз ORDER BY или FOR UPDATE. Его список выборки может содержать до 254 выражений;

WITH CHECK OPTION — указывает, что вставки и обновления, которые будут осуществляться через этот запрос, должны давать в результате только такие строки, которые могут быть выбраны запросом этого же представления. Опция CHECK OPTION не может гарантировать этого, если существует подзапрос в запросе этого представления или любого представления, на котором базируется  данное представление. Другими словами, при указании параметра WITH CHECK OPTION пользователь не может вводить, удалять и обновлять информацию таблицы, из которой он не имеет возможности считать информацию через простое представление (создаваемое из данных одной таблицы). Обновляемое представление, использующее несколько связанных таблиц, нельзя создавать с данным параметром;

Constraint — имя, которое присваивается ограничению CHECK OPTION. Если этот идентификатор опущен, то ORACLE автоматически назначает этому ограничению имя следующего вида:

SYS_Cn , где n — целое, которое делает имя ограничения уникальным внутри базы данных.

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

Если команды обновления DML (INSERT, UPDATE, DELETE) можно применить к представлению, то говорят, что представление является обновляемым (updatable); в противном случае оно является только читаемым (read-only). Представление является обновляемым, если при его создании учитывались следующие критерии:

  • представление должно включать первичный ключ таблицы

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

  • не должно содержать DISTINCT, GROUP BY, HAVING в своем определении

  • может быть определено на другом представлении, но это представление должно быть обновляемым

  • не может содержать константы, строки или выражения (например, comm*100) в списке выбираемых выходных полей

SQL CREATE VIEW. Пример 1. CREATE VIEW Oracle. Простое представление, которое создается из данных одной таблицы:

CREATE VIEW London_view AS SELECT * FROM Salespeople WHERE city = ‘London’;

SQL CREATE VIEW. Пример 2. CREATE VIEW Oracle. При создании представления можно можно задать новые имена полей:

CREATE VIEW Rating_view(rating,number) AS SELECT rating, COUNT(*) FROM Customers GROUP BY rating;

SQL CREATE VIEW. Пример 3. CREATE VIEW Oracle. Представления могут получать информацию из любого количества базовых таблиц:

CREATE VIEW Nameorders AS SELECT onum, amt,a.snum, sname, cname FROM Orders a, Customers b, Salespeople C WHERE a.cnum = b.cnum AND a.snum = c.snum;

SQL CREATE VIEW. Пример 4. CREATE VIEW Oracle. При создании представлений можно использовать подзапросы, включая и связанные подзапросы:

CREATE VIEW Sales_view AS SELECT b.odate, a.snum, a.sname, FROM Salespeople a, Orders b WHERE a.snum = b.snum AND b.amt = (SELECT MAX(amt) FROMOrders c WHERE c.odate = b.odate);

SQL CREATE VIEW. Пример 5. CREATE VIEW Oracle.

CREATE VIEW empl_v04 AS SELECT e.eid, e.sname, e.fname, e.otch, p.pname, d.dname FROM posts p, departments d, employees e WHERE e.did = d.did AND e.pid = p.pid;

Create View

object view clause

XMLType view clause

XMLSchema spec

Лекция 9

CREATE SEQUENCE

Последовательность CREATE SEQUENCE Oracle

Последовательность CREATE SEQUENCE – это объект базы данных, который генерирует целые числа в соответствии с правилами, установленными во время его создания. Для последовательности можно указывать как положительные, так и отрицательные целые числа. В системах баз данных последовательности применяют для самых разных целей, но в основном для автоматической генерации первичных ключей. Тем не менее к первичному ключу таблицы последовательность никак не привязана, так что в некотором смысле она является еще и объектом коллективного пользования. Если первичный ключ нужен лишь для обеспечения уникальности, а не для того, чтобы нести определенный смысл, последовательность является отличным средством.

Последовательность создается командой CREATE SEQUENCE.

CREATE SEQUENCE

Синтаксис команды CREATE SEQUENCE

Синтаксис команды CREATE SEQUENCE

Основные ключевые слова и параметры CREATE SEQUENCE:

  • schema —схема, в которой создается последовательность. Если schema опущена, Oracle создает последовательность в схеме пользователя.

  • sequence — имя создаваемой последовательности

  • start with — позволяет создателю последовательности указать первое генерируемое ею значение. После создания последовательность генерирует указанное в  start with значение при первой ссылке на ее виртуальный столбец NEXTVAL

  • increment by n — определяет приращение последовательности при каждой ссылке на виртуальный столбец NEXVAL. Если значение не указано явно, по умолчанию устанавливается 1. Для возрастающих последовательностей устанавливается положительное n, для убывающих, или последовательностей с обратным отсчетом — отрицательное

  • minvalue — определяет минимальное значение, создаваемое последовательностью. Если оно не указано, Oracle применяет значение по умолчанию NOMINVALUE

  • nominvalue — указывает, что минимальное значение равно 1, если последовательность возрастает, или -1026, если последовательность убывает

  • maxvalue — определяет максимальное значение, создаваемое последовательностью. Если оно не указано, Oracle применяет значение по умолчанию NOMAXVALUE

  • nomaxvalue — указывает, что максимальное значение равно 1027, если последовательность возрастает, или -1, если последовательность убывает. По умолчанию принимается NOMAXVALUE

  • cycle — позволяет последовательности повторно использовать созданные значения при достижении MAXVALUE или MINVALUE. Т.е. последовательность будет продолжать генерировать значения после достижения   своего максимума или минимума. Возрастающая последовательность после достижения своего максимума генерирует свой минимум. Убывающая последовательность после достижения своего минимума генерирует свой максимум. Если циклический режим нежелателен или не установлен явным образом, Oracle применяет значение по умолчанию – NOCYCLE. Указывать CYCLE вместе с NOMAXVALUE или NOMINVALUE нельзя. Если нужна циклическая последовательность, необходимо указать MAXVALUE для возрастающей последовательности или MINVALUE – для убывающей

  • nocycle — указывает, что последовательность не может продолжать генерировать значения после достижения своего максимума или минимума

  • cache n — указывает, сколько значений последовательности ORACLE распределяет заранее и поддерживает в памяти для быстрого доступа. Минимальное значение этого параметра равно 2. Для циклических последовательностей это значение должно быть меньше, чем количество значений в цикле. Если кэширование нежелательно или не установлено явным образом, Oracle применяет значение по умолчанию – 20 значений.

  • order — гарантирует, что номера последовательности генерируются в порядке запросов. Эта опция может использоваться, к примеру, когда номера последовательности предстают в качестве отметок времени. Гарантирование порядка обычно не существенно для тех последовательностей, которые используются для генерации первичных ключей. Если упорядочение нежелательно или не установлено явным образом, Oracle применяет значение по умолчанию NOORDER

  • noorder — не гарантирует, что номера последовательности генерируются в порядке запросов

CREATE SEQUENCE Пример 1

Создание последовательности sequence_1.s Первое обращение к этой последовательности возвратит 1. Второе обращение возвратит 11. Каждое следующее обращение возвратит значение, на 10 большее предыдущего:

  • CREATE SEQUENCE sequence_1 INCREMENT BY 10;

CREATE SEQUENCE Пример 2

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

CREATE SEQUENCE sequence_2 START WITH 20 INCREMENT BY –1 MAXVALUE 20 MINVALUE 0 CYCLE ORDER CACHE 2;

После создания последовательности к ней можно обращаться через псевдостолбцы CURRVAL (возвращает текущее значение последовательности) и NEXTVAL (выполняет приращение последовательности и возвращает ее следующее значение). Текущее и следующее значения последовательности пользователи базы данных получают, выполняя команду SELECT. Последовательности – не таблицы, а простые объекты, генерирующие целые числа с помощью виртуальных столбцов, поэтому нужна общедоступная таблица словаря данных DUAL, из которой будут извлекаться данные виртуальных столбцов.

Первое обращение к NEXTVAL возвращает начальное значение последовательности. Последующие обращения к NEXTVAL изменяют значение последовательности на приращение, которое было определено, и возвращают новое значение. Любое обращение к CURRVAL всегда возвращает текущее значение последовательности, а именно, то значение, которое было возвращено последним обращением к NEXTVAL. Прежде чем обращаться к CURRVAL в текущем сеансе работы, необходимо хотя бы один раз выполнить обращение к NEXTVAL.

В одном предложении SQL приращение последовательности может быть выполнено только один раз. Если предложение содержит несколько обращений к NEXTVAL для одной и той же последовательности, то ORACLE наращивает последовательность один раз, и возвращает одно и то же значение для всех вхождений NEXTVAL. Если предложение содержит обращения как к CURRVAL, так и к NEXTVAL, то ORACLE наращивает последовательность и возвращает одно и то же значение как для CURRVAL, так и для NEXTVAL, независимо от того, в каком порядке они встречаются в предложении.

К одной и той же последовательности могут обращаться одновременно несколько пользователей, без какого-либо ожидания или блокировки:

< имя последовательности >.CURRVAL

< имя последовательности >.NEXTVAL

Чтобы обратиться к текущему или следующему значению последовательности, принадлежащей схеме другого пользователя, пользователь должен иметь либо объектную привилегию SELECT по этой последовательности, либо системную привилегию SELECT ANY SEQUENCE, и должен дополнительно квалифицировать эту последовательность именем содержащей ее схемы:

<имя схемы>.<имя последовательности >.CURRVAL

<имя схемы>.<имя последовательности >.NEXTVAL

Значения CURRVAL и NEXTVAL используются в следующих местах:

  • в списке SELECT предложения SELECT

  • в фразе VALUES предложения INSERT

  • в фразе SET предложения UPDATE.

Нельзя использовать значения CURRVAL и NEXTVAL в следующих местах:

  • в подзапросе

  • в предложении SELECT с оператором DISTINCT

  • в предложении SELECT с фразой GROUP BY или ORDER BY

  • в предложении SELECT, объединенном с другим предложением SELECT оператором множеств UNION

  • в фразе WHERE предложения SELECT

  • в умалчиваемом (DEFAULT) значении столбца в предложении CREATE TABLE или ALTER TABLE

  • в условии ограничения CHECK.

SELECT SEQUENCE. Пример 3. Действие циклической последовательности sequence_2 при достижении ею значения MINVALUE:

SQL> SELECT sequence_2.NEXTVAL FROM dual;

NEXTVAL

—————

20

SQL> SELECT sequence_2.NEXTVAL FROM dual;

NEXTVAL

—————

19

…..

SQL> SELECT sequence_2.NEXTVAL FROM dual;

NEXTVAL

—————

1

SQL> SELECT sequence_2.NEXTVAL FROM dual;

NEXTVAL

—————

0

SQL> SELECT sequence_2.NEXTVAL FROM dual;

NEXTVAL

—————

20

CREATE SEQUENCE. Пример 4. В следующем примере SEQUENCE после ссылки на столбец NEXVAL значение CURRVAL обновляется так, чтобы соответствовать значению NEXVAL, а предыдущее значение CURRVAL теряется:

SQL> SELECT sequence_2.CURRVAL FROM dual;

CURRVAL

—————

20

SQL> SELECT sequence_2.NEXTVAL FROM dual;

NEXTVAL

—————

19

SQL> SELECT sequence_2.NEXTVAL FROM dual;

NEXTVAL

—————

18

SQL> SELECT sequence_2.NEXTVAL FROM dual;

NEXTVAL

—————

17

SQL> SELECT sequence_2.CURRVAL FROM dual;

CURRVAL

—————

17

CREATE SEQUENCE. Пример 5. Ссылка на последовательности при изменении данных:

INSERT INTO emp VALUES (empseq.nextval, ‘LEWIS’, ‘CLERK’, 7902, SYSDATE, 1200, NULL, 20); UPDATE emp SET deptno = empseq.currval WHERE ename = ‘Jones’

ALTER SEQUENCE. Пример 6. Любой параметр последовательности можно изменить командой ALTER SEQUENCE. Новое значение вступает в силу немедленно. Все параметры последовательности, не указанные в команде ALTER SEQUENCE, остаются без изменений:

ALTER SEQUENCE sequence_2

INCREMENT BY –4;

Когда последовательность больше не нужна, ее можно удалить. Для этого администратор базы данных или владелец последовательности должен выполнить команду DROP SEQUENCE. В результате виртуальные столбцы последовательности NEXVAL и CURRVAL  — переводятся в разряд неиспользуемых. Но, если последовательность применялась для генерации значений первичных ключей, созданные ею значения останутся в базе данных. Каскадного удаления значений, сгенерированных последовательностью, при ее удалении не происходит.

DROP SEQUENCE. Пример 7. Удаление последовательности SEQUENCE:

DROP SEQUENCE sequence_2

CREATE SYNONYM

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

SELECT * FROM student  WHERE kod_stud = 256;

В этом случае появляется следующее сообщение

SELECT * FROM student

*

ORA-00942: table or view does not exist

(таблица или представление не существует)

Oracle не возвращает данные, связанные с KOD_STUD= 256, а сообщает пользователю о том, что объект не существует. Причина, по которой USER1 не может видеть таб­лицу в схеме STUD, заключается в том, что пользователь USER1 не обратился к таблице как к находящейся в схеме STUD. Покажем, как оператор select может быть успешно выполнен:

SELECT * FROM stud.student WHERE kod_stud = 256;

Помнить о том, какому пользователю какая таблица принадлежит, чересчур слож­но, поэтому в базе данных можно применить синонимы, устраняющие необходимость указания владельца схемы (делающие ее «прозрачной»).

Синоним — это альтерна­тивный способ обращения к существующей таблице со стороны пользователей. Синонимы позволяют обращаться к объекту базы данных или по другому имени, или без обязательной ссылки на владельца объекта. Однако синоним не изменяет харак­теристики описания таблицы. Таким образом, с помощью синонимов пользователи могут обращаться к таблице, не предваряя ее имени именем владельца.

Синонимы могут быть общими или частными. К частному (private) синониму может обращаться только тот пользователь, который создал его и владеет им. Если же синоним общий (public), он доступен любому пользователю базы данных.  Частный и общий синонимы создаются с помощью команд  CREATE SYNONYM и  CREATE PUBLIC SYNONYM. Причем на создание общих синонимов нужно иметь специальную привилегию.

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

Пример: Пользователь STUD может создать общий синоним для таблицы STUDENT.

— Выполняется пользователем STUD

CREATE PUBLIC SYNONYM student FOR stud.student;

После создания этого синонима пользователь USER1 может обратиться к таблице с его помощью:

—Выполняется пользователем USER1

SELECT * FROM student WHERE kod_stud = 256;

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

Пример: В следующем программном блоке пользователь USER1 получает тот же результат, что и раньше, но с помощью частного синонима.

—Выполняется пользователем USER1

CREATE SYNONYM student FOR stud.student;

—Выполняется пользователем USER1

SELECT * FROM student WHERE kod_stud = 256;

Для удаления синонимов используется команда DROP SYNONYM:

DROP SYNONYM student;

DROP PUBLIC SYNONYM student;

SQL ALTER TABLE

Команда ALTER TABLE используется для добавления, удаления или модификации колонки в уже существующей таблице.

Команда ALTER TABLE

Команда ALTER TABLE изменяет определение таблицы одним из следующих способов:

  • добавляет столбец

  • добавляет ограничение целостности

  • переопределяет столбец (тип данных, размер, умалчиваемое значение)

  • удаляет столбец

  • модифицирует характеристики памяти или иные параметры

  • включает, выключает или удаляет ограничение целостности или триггер.

Условие: Таблица должна быть в схеме пользователя, или пользователь должен иметь системную привилегию ALTER ANY TABLE.

Добавляя столбец с ограничением NOT NULL, разработчик или администратор БД должны учесть ряд обстоятельств. Сначала нужно создать столбец без ограничения, а затем ввести значения во все его строки. После того как все значения столбца станут не NULL-значениями, к нему можно применить ограничение NOT NULL. Если столбец с ограничением NOT NULL пытается добавить пользователь, возвращается сообщение об ошибке, говорящее о том, что либо таблица должна быть пустой, либо в столбце должны содержаться значения для каждой существующей строки (напомним, что после наложения на столбец ограничения NOT NULL в нем не могут присутствовать NULL-значения ни в одной из существующих строк). В СУБД Oracle, начиная с версии 8i, можно удалять столбцы.

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

  • Увеличение размера столбца CHAR или VARCHAR2

  • Увеличение размера столбца NUMBER

  • Добавление новых столбцов в таблицу

Уменьшение различных характеристик таблицы, в том числе некоторых типов данных столбцов и реального числа столбцов таблицы, требует особых действий. Часто перед внесением изменения нужно убедиться в том, что в соответствующем столбце или столбцах все значения являются NULL-значениями. Для выполнения подобных операций над столбцами таблицы, содержащими данные, разработчик должен найти или создать какую-то область для временного хранения этих данных. Например, создать таблицу с помощью команды CREATE TABLE AS SELECT, в которой извлекаются данные из первичного ключа и изменяемого столбца или столбцов. Допустимые изменения:

  • Уменьшение размера столбца NUMBER (только при пустом столбце для всех строк)

  • Уменьшение размера столбца CHAR или VARCHAR2 (только при пустом столбце для всех строк)

  • Изменение типа данных столбца (только при пустом столбце для всех строк)

ALTER TABLE Пример 1

Добавление столбца в таблицу:

ALTER TABLE t1(pole1 char(10));

ALTER TABLE Пример 2

Изменение размера столбца таблицы:

ALTER TABLE t1 MODIFY (pole1 char(20));

ALTER TABLE Пример 3

Удаление столбца таблицы:

ALTER TABLE t1 DROP COLUMN pole1;

С помощью команды ALTER TABLE можно изменить имя таблицы без реального переноса физической информации в БД:

ALTER TABLE t1 RENAME TO t2;

Аналогичную операцию можно выполнить с помощью команды RENAME:

RENAME t1 TO t2;

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

ALTER TABLE Пример 4

Модификация структуры таблицы

ALTER TABLE t1 MODIFY (pole1 NOT NULL);

CREATE TABLE t2

(pole1 CHAR(10) PRIMARY KEY);

ALTER TABLE t1 ADD

(CONSTRAINT fk_t1 FOREIGN KEY (pole1)

REFERENCES t2 (pole1));

ALTER TABLE t1 ADD (UNIQUE (p_name));

ALTER TABLE t1 ADD (p_size CHAR(4) CHECK

(p_size IN (‘P’,’S’,’M’,’L’,’XL’,’XXL’,’XXXL’)));

В первой из приведенных выше команд для добавления ограничения NOT NULL для столбца используется конструкция MODIFY, а для добавления всех табличных ограничений целостности других типов – конструкция ADD. Столбец, для которого добавляется ограничение, должен уже существовать в таблице БД; в противном случае создать ограничение не удастся.

ALTER TABLE Пример 5

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

ALTER TABLE t1 ADD  FOREIGN KEY (pole1) REFERENCES t2 (pole1);

Существует ряд условий создания ограничений:

  • Первичные ключи: в столбцах не могут содержаться NULL-значения, и все значения должны быть уникальны.

  • Внешние ключи: в тех столбцах других таблиц, на которые производятся ссылки, должны содержаться значения, соответствующие всем значениям ссылающихся столбцов, либо значения этих последних должны быть NULL-значениями.

  • Ограничения UNIQUE: все значения столбцов должны быть уникальными или NULL-значениями.

  • Ограничения CHECK: новое ограничение будет применяться только по отношению к данным, добавляемым или модифицируемым после его создания.

  • NOT NULL: NULL-значения в столбцах запрещены.

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

ALTER TABLE Пример 6

Запрещение ограничений:

ALTER TABLE t1 DISABLE PRIMARY KEY; ALTER TABLE t1 DISABLE UNIQUE (p_name);

ALTER TABLE Пример 7

В некоторых случаях запрещение первичного ключа, от которого зависят внешние ключи, может вызвать определенные сложности, например:

ALTER TABLE t2 DISABLE PRIMARY KEY;

Error at line 1: Cannot disable constraint …. – dependencies exist (невозможно запретить ограничение – существуют зависимости)

Для удаления первичного ключа при наличии зависящих от него внешних ключей в команде ALTER TABLE DISABLE <ограничения> обязательна конструкция CASCADE:

ALTER TABLE t2 DISABLE PRIMARY KEY CASCADE;

ALTER TABLE Пример 8

Запрещенное ограничение разрешается следующим образом:

ALTER TABLE t1 ENABLE PRIMARY KEY;

ALTER TABLE t1 ENABLE UNIQUE (p_name);

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

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

ALTER TABLE t1 DROP UNIQUE (p_name);

SQL INSERT

Команда Sql INSERT

Команда INSERT добавляет строки в таблицу или представление основной таблицы.

Синтаксис команды Sql INSERT

Синтаксис команды Insert

Основные ключевые слова и параметры команды INSERT

  • schema — идентификатор полномочий, обычно совпадающий с именем некоторого пользователя

  • table view — имя таблицы, в которую строки должны быть вставлены; если указано представление, то строки вставляются в основную таблицу представления

  • subquery_1 — подзапрос, который сервер обрабатывает тем же самым способом как представление

  • column — столбец таблицы или представления, в который для каждой вставленной строки вводится значение из фразы VALUES или подзапроса; если один из столбцов таблицы опускается из этого списка, значением столбца для вставленной строки является значение по умолчанию столбца, определенное при создании таблицы. Если полностью опускается список столбца, предложение VALUES или запрос должен определить значения для всех столбцов в таблице

  • VALUES — определяет строку значений, которые будут вставлены в таблицу или представление; значение должно быть определено в предложении VALUES для каждого столбца в списке столбцов

  • subquery_2 — подзапрос, который возвращает строки, вставляемые в таблицу; выборочный список этого подзапроса должен иметь такое же количество столбцов, как в списке столбцов утверждения INSERT

Утверждение INSERT с фразой VALUES добавляет одиночную строку к таблице. Эта строка содержит значения, определенные фразой VALUES. Утверждение INSERT с подзапросом вместо фразы VALUES добавляет к таблице все строки, возвращенные подзапросом. Сервер обрабатывает подзапрос и вставляет каждую возвращенную строку в таблицу. Если подзапрос не выбирает никакие строки, сервер не вставляет никакие строки в таблицу. Подзапрос может обратиться к любой таблице или представлению, включая целевую таблицу утверждения INSERT. Сервер назначает значения полям в новых строках, основанных на внутренней позиции столбцов в таблице и порядке значений фразы VALUES или в списке выбора запроса. Если какие-либо столбцы пропущены в списке столбцов, сервер назначает им значения по умолчанию, определенные при создании таблицы. Если любой из этих столбцов имеет NOT NULL ограничение то сервер возвращает ошибку, указывающую, что ограничение было нарушено и отменяет утверждение INSERT. При выдаче утверждения INSERT включается любой INSERT — триггер, определенный на таблице.

INSERT Oracle

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