Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
work_3.doc
Скачиваний:
6
Добавлен:
09.11.2019
Размер:
215.04 Кб
Скачать

Лабораторная работа №3 определение данных и манипулирование данными

Создание и удаление базы данных. Создание и удаление базовых таблиц. Индексы. Представления. Инструкции языка манипулирования данными

  1. Инструкции языка определения данных

  1. Базы данных

Для создания баз данных в Transact-SQL служит инструкция CREATE DATABASE, синтаксис которой (с сокращениями) имеет следующий вид:

CREATE DATABASE база_данных

[ [ WITH ] [ OWNER [=] пользователь]

/* владелец базы данных (по умолчанию пользователь, который ввел  команду create) */

[ TEMPLATE [=] шаблон ]

/* используемый шаблон (по умолчанию template1) */

[ ENCODING [=] кодировка ]

/* используемая кодировка (по умолчанию кодировка шаблона) */

[ LC_COLLATE [=] порядок_сравнения]

/* порядок сравнения строк символов (по умолчанию как в шаблоне) */

[ LC_CTYPE [=] тип_категоризации]

/* категоризация символов (нижний/верхний регистр, цифра) (по умолчанию как в шаблоне) */

[ TABLESPACE [=] табличное_пространство]

/* используемое табличное пространство (по умолчанию как в шаблоне) */

[ CONNECTION LIMIT [=] connlimit ] ]

/* количество параллельных подключений (по умолчанию «-1», т.е. не ограничено) */

Например, в результате выполнения команды

CREATE DATABASE a_new_database

будет создана новая база данных c параметрами по умолчанию:

WITH OWNER = postgres

ENCODING = 'UTF8'

TABLESPACE = pg_default

LC_COLLATE = 'Ukrainian_Ukraine.1251'

LC_CTYPE = 'Ukrainian_Ukraine.1251'

CONNECTION LIMIT = -1

Для внесения изменений (изменение имени, владельца, табличного пространства, установление параметров конфигурации) в существующую базу данных служит команда ALTER DATABASE, а для удаления  DROP DATABASE:

Примеры:

/* создаем базу данных BookShop_bacup, используя базу данных BookShop как шаблон(BookShop не должна использоваться) */

CREATE DATABASE BookShop_backup template "BookShop";

/* создаем новую роль (пользователя) */

CREATE ROLE new_user;

/* изменяем владельца базы данных */

ALTER DATABASE BookShop_backup OWNER TO new_user;

-- удаляем базу данных BookShop_bacup

drop database BookShop_backup;

-- удаляем роль

DROP ROLE new_user;

  1. Базовые таблицы Инструкция create table

Таблицы создаются c помощью инструкции CREATE TABLE, которая в основном определяет тип таблицы (временная или базовая), имя таблицы, набор столбцов и ограничения целостности (ограничения для столбцов или для всей таблицы). Каждая таблица должна иметь, по крайней мере, один столбец. Cинтаксис инструкции CREATE TABLE в PostgreSQL в сокращенном виде:

CREATE [ { TEMPORARY | TEMP } ] TABLE таблица

(

[ { столбец тип_данных [ DEFAULT значение_по_умолчанию] [<ограничение_столбца> [ ... ] ]

| < ограничение_таблицы >

| LIKE родительская_таблица [<параметры_ LIKE> ] } [, ... ] ]

)

[ INHERITS (родительская_таблица [, ... ] ) ]

[ TABLESPACE табличное_пространство ]

где

< ограничение_столбца > ::= [CONSTRAINT ограничение]

{ { NOT NULL | [ NULL ] }

| CHECK (ограничение_на_значение_столбца)

| UNIQUE параметры_индексирования

| PRIMARY KEY

| REFERENCES таблица [ (столбец) ] [ MATCH FULL -- один столбец в составом внешнем ключе не может быть NULL | MATCH PARTIAL – не реализовано | [ MATCH SIMPLE] ] -- один столбец в составом внешнем ключе может быть NULL [ ON DELETE действие ] – действие при удалении родительського ключа

[ ON UPDATE действие] – действие при изменении родительського ключа

}

< ограничение_таблицы > ::= [CONSTRAINT имя_ограничения ]

{ CHECK (ограничение_на_значение_столбца)

| UNIQUE (столбец [, ... ] ) параметры_индексирования

| PRIMARY KEY (столбец [, ... ] ) параметры_индексирования

| FOREIGN KEY (столбец [, ... ] ) REFERENCES таблица [ (столбец [, ... ] ) ] [ MATCH FULL | MATCH PARTIAL | MATCH SIMPLE ] [ ON DELETE действие] [ ON UPDATE действие] }

Если указано TEMPORARY или TEMP, создается временная таблица, т.е. такая таблица автоматически удаляется сразу после завершения транзакции.

При создании таблиц (или при их изменении) можно вводить ограничения на значения отдельных столбцов. Если ограничения введены, SQL будет отклонять любые значения, которые не удовлетворяют введенным ограничениям. Имеется два основных типа ограничений — ограничения столбца и ограничения таблицы. Различие между ними в том, что ограничение столбца применяется только к индивидуальным столбцам, в то время как ограничение таблицы применяется к группам из одного или более столбцов.

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

Ограничение PRIMARY KEY (первичный ключ), используется для назначения первичных ключей. Поля с таким ограничением не могут принимать NULL-значений, и даже если ограничение NOT NULL не указывается для такого поля, SQL добавляет его по умолчанию. Ограничение PRIMARY KEY автоматически требует уникальности вводимых данных. Будучи назначенным для нескольких столбцов (составной первичный ключ) это ограничение задает уникальность комбинаций соответствующих значений, хотя по отдельности значения в каждом столбце составного ключа не обязательно должно быть уникальным.

Ограничение UNIQUE (уникальный), как и ограничение PRIMARY KEY, ограничивает множество значений для указанных столбцов уникальными значениями. Как и ограничение PRIMARY KEY, ограничение UNIQUE может быть ограничением таблицы, и тогда оно определяет уникальность комбинаций значений соответствующих столбцов.

Ограничение FOREIGN KEY (внешний ключ) обеспечивает принцип ссылочной целостности. Когда столбец является внешним ключом, он определенным образом связан с таблицей, на которую он ссылается. Фактически это означает, что каждое значение в этом столбце (внешнем ключе) непосредственно привязано к значению в другом столбце (родительском ключе). Каждое значение (каждая строка) внешнего ключа должно недвусмысленно ссылаться к одному и только этому значению (строке) родительского ключа. Если это так, то система будет в состоянии ссылочной целостности. Понятно, что любое число внешних ключей может ссылаться к единственному значению родительского ключа. Понятно также, что в качестве родительского ключа могут выступать столбцы с ограничениями PRIMARY KEY или UNIQUE, т.е. столбцы с уникальными значениями и не содержащие NULL-значений. Внешний ключ может содержать только те значения, которые фактически представлены в родительском ключе или NULL-значения, попытка ввода других значений приводит к ошибке. Присутствие NULL-значений во внешнем ключе не нарушит ссылочную целостность, но даст возможность не вводить данные, если они пока не известны.

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

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

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

<параметры_ LIKE> ::=

{ INCLUDING | EXCLUDING } -- включая/исключая { DEFAULTS -- значения по умолчанию | CONSTRAINTS -- ограничения | INDEXES -- индексы | STORAGE – параметры хранения | COMMENTS -- комментарии | ALL }

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