Title: Лабораторная работа №1
Author: FuckYouBill
Last saved by: kev
Company: Melkosoft

Лабораторная работа №1 (4 часа)

Цель работы: научиться создавать, редактировать и удалять таблицы и  их элементы средствами ORACLE Database Express Edition.

Необходимое лирическое отступление.
Начало работы.
В меню ПУСК выберите Все программы> Oracle Database 10g Express Edition> Go To Database Home Page
В открывшемся окне введите username system, password oracle (в аудитории 3305) или тот пароль, который запрашивается при установке ORACLE Database Express Edition.
Вы вошли в систему с правами администратора.

Создание пользователя.
	 Выберите в меню пункт Administration (Администрирование). Затем пункт Database users. Нажмите кнопку Create (Создать).
В появившемся окне заполните поля: Username, Password, Confirm Password. Проследите, чтобы Account Status был Unlocked.
Тут же установите привилегии пользователя. Проще всего нажать Check All :-)
(Однако не стоит наделять этого пользователя ролью DBA, ибо в таком случае в его схеме будет множество служебных таблиц, что приведет к потере наглядности при разработке собственных таблиц). 
	Нажмите кнопку CREATE. В правом верхнем углу нажмите Logout. 
Теперь вы можете войти в систему с именем и паролем только что созданного пользователя и начать работу.

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

Для этого в командной строке Windows необходимо ввести команду
exp username/password file='имя файла'
Например: exp steven/cat12 file='d:\my_bd'
Можно ввести просто  exp file='имя файла', а имя пользователя и пароль ввести по требованию системы.

Для импорта схемы из файла с расширением dmp используется утилита импорта.
Для этого в командной строке Windows необходимо ввести команду
imp username/password file='имя файла' 
Например: imp steven/cat12 file='d:\my_bd'
Можно ввести просто  imp file='имя файла', а имя пользователя и пароль ввести по требованию системы.
Однако импортировать новую схему в старую с такими же элементами(совпадающими именами) нельзя. Для этого надо предварительно удалить все из старой схемы (проще всего администратору удалить пользователя и потом создать его заново). Можно также создать нового пользователя и импортировать схему ему следующей командой:

imp system/password  file='имя файла'  fromuser=user1 touser=user2
user1 – имя пользователя, экспортировавшего файл
user2 –имя пользователя, которому файл импортируется
Например, если вы пользовались командой экспорта exp steven/cat12 file='d:\my_bd', то команда импорта будет выглядеть, возможно, так:
imp system/oracle  file='d:\my_bd’  fromuser=steven  touser=peter

Задание.
Создайте таблицы, которые вы считаете необходимыми для размещения информации для составления расписания экзаменов на одну сессию:
•	Студенты
•	Предметы
•	Экзамены (по какому предмету, какой группой и когда сдаётся)
•	Группы

Создайте необходимые таблицы. Определите первичные ключи. Определите ограничения. Определите внешние ключи. Заполните таблицы тестовыми данными. Измените и удалите некоторые данные. Добавьте и удалите какие-нибудь столбцы, удалите какую-либо таблицу. Все это как средствами интерфейса, так и командами SQL.
Для ввода команд SQL выберите в меню пункт SQL, а затем SQL Command. Здесь вы можете вводить команды и запускать их на выполнение. 
Для создания таблиц средствами интерфейса и просмотра полученных результатов выберите пункт меню Object Browser.
Создание таблиц.
Создать таблицу для хранения данных можно с помощью команды CREATE TABLE языка SQL. Это одна из команд языка определения данных DDL. Команды DDL являются подмножеством команд SQL и используются для создания, изменения и удаления структур базы данных Oracle.
Синтаксис:
CREATE TABLE [схема.] таблица 
	(столбец тип_данных [DEFAULT выражение]
	[ограничение_столбца],
...
	[ограничение таблицы]);

где:     схема – то же, что имя владельца,
таблица – имя таблицы,
DEFAULT выражение – задает значение по умолчанию, используемое при отсутствии значения в команде INSERT (вставка),
столбец -  имя столбца,
тип_данных – тип данных и длина столбца,
ограничение_столбца – правило целостности как часть определения столбца,
ограничение_таблицы – правило целостности как часть определения таблицы.
Параметр DEFAULT позволяет назначить значение столбца по умолчанию. Этот параметр исключает появление неопределенных значений при вставке строки без конкретного значения в данном столбце.
Основные типы данных
VARCHAR2(размер) | Символьные значения переменной длины
CHAR(размер) | Символьные значения фиксированной длины
NUMBER | Число с плавающей точкой
NUMBER(p,s) | Числовое значение, p –общее количество десятичных цифр, s – количество цифр справа от десятичной точки
DATE | Значения даты и времени

Ограничения
NOT NULL | Означает, что данный столбец не может содержать неопределенных значений
UNIQUE | Указывает, что столбец или набор столбцов содержит значения, которые должны быть уникальны для всех строк таблицы. В таблице не существует двух строк с одинаковым значением этого ключа, но неопределенные значения возможны.
PRIMARY KEY | Уникально идентифицирует каждую строку таблицы
FOREIGN KEY | Устанавливает и поддерживает отношения между данным столбцом и столбцом таблицы, на которую делается ссылка, с помощью внешнего ключа.
CHECK | Задает условие, которое должно выполняться.

Ограничение на уровне столбца – синтаксис
 Столбец [CONSTRAINT  имя ограничения] тип  ограничения
 
Ограничение на уровне таблицы – синтаксис
[CONSTRAINT  имя ограничения] тип ограничения (столбец…)

Если вы сами не присваиваете имя ограничению, Oracle создает его  в формате SYS_Cn, где n – целое число, обеспечивающее уникальность имени ограничения.
Ограничение FOREIGN KEY.
Внешний ключ определяется в дочерней таблице, а таблица, содержащая столбец, на который производится ссылка, является родительской. Внешний ключ описывается комбинацией следующих ключевых слов:
•	FOREIGN KEY задает столбец в дочерней таблице как ограничение на уровне таблицы.
•	REFERENCES указывает таблицу и столбец в родительской таблице.
•	ON DELETE CASCADE  означает, что если удаляется строка в родительской таблице, зависимые строки в дочерней таблице также будут удалены.Если этот параметр отсутствует, строка родительской таблицы не может быть удалена, если ссылка на нее имеется в дочерней секции.

Пример:
Команда создания таблицы о номерах группы.
CREATE TABLE groups
(id NUMBER CONSTRAINT groups_pk PRIMARY KEY,
num_gr CHAR(8) not null,
form CHAR(2) not null,
CONSTRAINT groups_uk UNIQUE (num_gr,form),
CHECK (form in(‘Д’,’З’))
);
 	Команда создает таблицу GROUPS. Столбцы –id (уникальный идентификатор), num_gr(номер группы, например, 3091), form(форма обучения, дневная (Д) или заочная (З)).
CREATE TABLE students
(id NUMBER CONSTRAINT stud_pk PRIMARY KEY,
surname CHAR(100) not null,
name CHAR(100) not null,
patron CHAR(100) not null,
gr_id number not null,
CONSTRAINT stud_gr_id_fk FOREIGN KEY (gr_id)
	  REFERENCES  groups( id) ON DELETE CASCADE
);
Команда создает таблицу STUDENTS. Столбцы –id (уникальный идентификатор), surname – фамилия, name – имя, patron – отчество студента, gr_id – внешний ключ, ссылающийся на первичный ключ таблицы GROUPS. Проще говоря, каждый студент из таблицы STUDENTS учится в какой-то группе из таблицы GROUPS. При удалении группы, удаляется и информация о всех студентах, в ней обучающихся (это только для примера, необходимости в этом нет, скорее наоборот, группу с обучающимися в ней студентами удалять не следует).

Изменение таблиц и ограничений
Структуру созданной таблицы можно изменить с помощью команды ALTER TABLE. Эта команда позволяет добавлять столбцы, менять ширину столбцов, добавлять и удалять ограничения, а также разрешать и запрещать их действие.
Добавление столбца.
ALTER TABLE таблица
ADD (столбец тип_данных [DEFAULT выражение] [NOT NULL]
          [, столбец тип_данных] …);
Пример:
ALTER TABLE groups
ADD (birthday DATE );

Изменение столбца
ALTER TABLE таблица
MODIFY (столбец тип_данных [DEFAULT выражение] [NOT NULL]
          [, столбец тип_данных] …);

Добавление ограничений
ALTER TABLE таблица
ADD [CONSTRAINT  ограничение] тип (столбец);

Удаление ограничений
ALTER TABLE таблица
DROP PRIMARY KEY | UNIQUE (столбец)|
            CONSTRAINT ограничение [CASCADE];
Если используется параметр CASCADE, то одновременно удаляются и все зависимые ограничения.

Разрешение и запрет ограничений.
С помощью команды ALTER TABLE с предложениями ENABLE и DISABLE можно разрешать и запрещать действия ограничений, не удаляя их.
ALTER TABLE таблица
DISABLE | ENABLE CONSTRAINT ограничение [CASCADE];

Удаление таблицы
DROP TABLE таблица [CASCADE CONSTRAINTS];
Если используется параметр CASCADE CONSTRAINTS, то удаляются и все зависимые ссылочные ограничения.

Переименование таблицы
RENAME old_name TO new_name;
Усечение таблицы.
TRUNCATE TABLE таблица;
Это команда для удаления всех строк таблицы и освобождения памяти, отведенной под таблицу. Командой DELETE (рассматриваемой далее) также можно удалить все строки таблицы, но она не освобождает память, отведенную под таблицу.

Обработка данных.
Язык манипулирования данными (DML) является сердцем SQL. Для каждого добавления, изменения или удаления данных из базы данных выполняется команда DML. Совокупность команд DML, результаты действия которых еще не стали постоянными, называется транзакцией.
Вставка строк в таблицу.

INSERT INTO таблица [(столбец [, столбец…])]
VALUES (значение[, значение…])

Пример:
INSERT  INTO groups
VALUES (1,3091,’Д’)
или
INSERT  INTO groups(id,num_gr,form)
VALUES (1,3091,’Д’)

Обновление строк.
Существующие строки таблицы можно обновить командой UPDATE.

UPDATE таблица
SET  столбец=значение[, столбец=значение]
[WHERE условие]

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

Пример.
Изменение формы обучения у группы 3031.
UPDATE groups
SET form=’З’
WHERE num_gr=’3091’

Удаление строк.
Существующие строки удаляются командой DELETE.

DELETE FROM таблица
[WHERE  условие]

Если предложение WHERE отсутствует, удаляются все строки таблицы.

Пример.
Удалить группу 3331 заочного обучения

DELETE FROM groups
WHERE num_gr=’3331’ and form=’З’

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

Пример (отмена случайного удаления всех строк таблицы)

DELETE FROM groups; 
ROLLBACK;
DELETE FROM groups WHERE num_gr=’3331’ and form=’З’;
COMMIT;

Команды CREATE TABLE, ALTER TABLE, DROP TABLE, RENAME, TRUNCATE относятся к командам описания данных (DDL). После выполнения каждой такой команды происходит автоматическая фиксация транзакции. Откат на уровне команды DDL невозможен, т.е. отменить ее результаты нельзя, поэтому пользоваться такими командами следует очень осторожно.

Требования к отчету.
Отчет по лабораторной работе должен содержать:
1)	Цель работы
2)	Описание создаваемых таблиц и ограничений к ним.
3)	Примеры SQL-команд для создания таблиц, их редактирования и удаления.

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