Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Удаление ограничений целостности

Типы данных в СУБД ORACLE 9.2i

 

В СУБД ORACLE 9.2i используются следующие основные встроенные типы данных:

· NUMBER(N) – целые числа, где N – максимальное количество цифр в числе (например, тип данных NUMBER(3) позволит использовать числа из диапазона от –999 до 999).

· NUMBER(N, M) – вещественные числа, где N – максимальное количество цифр в числе, M – максимальное количество цифр в дробной части (например, тип данных NUMBER(4,2) позволит использовать числа из диапазона от –99.99 до 99.99).

· CHAR(N) – строки символов фиксированной длины, где N – максимальное число символов в строке (например, тип данных CHAR(5) позволит хранить строки максимум из пяти символов, причем под хранение каждой строки будет отведено 5 ячеек памяти, даже если строка будет состоять из меньшего числа символов).

· VARCHAR2(N) – строки символов переменной длины, где N – максимально допустимое количество символов в строке (например, тип данных VARCHAR2(10) позволит хранить строки длинной не более 10 символов, причем память будет отведена именно под то количество символов, которое хранится в строке).

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

· DATE – дата и время.

 

Структура языка SQL

 

Язык SQL делится на подмножества.

Язык определения данных (DDL – Data Definition Language) предоставляет пользователям средства указания типа данных и их структуры, а также средства задания ограничений для информации, хранимой в базе данных.

 

Язык манипулирования данными (DML – Data Manipulation Language) позволяет вставлять, обновлять и извлекать информацию из базы данных.

Язык управления данными (DCL – Data Control Language) состоит из управляющих операторов.

Язык управления транзакциями (TCL – Transaction Control Language) состоит из операторов, предназначенных для управления ходом выполнения транзакций.

 

DDL

Оператор CREATE

Создание таблицы

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

Синтаксис команды создания таблицы:

 

CREATE TABLE имя_таблицы (

поле1 тип1 [ ограничения ],

[ поле2 тип2 [ ограничения ],

…]);

 

Возможные ограничения в таблицах:

· NOT NULL – значение атрибута должно быть определено (опция NOT NULL);

· UNIQUE – значения атрибутов являются уникальными (уникальный ключ);

· PRIMARY KEY – атрибут является первичным ключом (первичный ключ);

· CHECK – определяет условие, которому должны удовлетворять значения атрибута (домен);

· DEFAULT – присвоение значений «по умолчанию» для атрибутов.

Используя приведенный выше синтаксис, вместе с созданием таблицы можно вместе с атрибутами таблицы сразу же задать и ограничения декларативной и ссылочной целостности, но только в том случае, если они касаются только одного конкретного атрибута. Если же первичный, уникальный или вторичный ключ должны быть составными, для их создания нужно применять команду ALTER TABLE.

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

 

CREATE TABLE Students(

N_z NUMBER,

F_Name VARCHAR2(30),

S_ Name VARCHAR2(30),

Data_B Date,

Comments VARCHAR2(50) DEFAULT ‘no comments’);

 

Создание копии таблицы

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

 

CREATE TABLE имя_таблицы AS оператор SELECT[1];

 

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

 

CREATE TABLE Students_Copy AS SELECT * FROM Students;

Оператор ALTER

Оператор ALTER служит для изменения структуры любых объектов, из которых состоит база данных. В зависимости от типа объекта, изменяются и параметры команды ALTER.

 

Добавление атрибута таблицы

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

 

ALTER TABLE имя_таблицы ADD поле тип [ ограничения ];

 

Например, для добавления к таблице Students поля N_gr можно выполнить следующую команду:

 

ALTER TABLE students ADD N_gr NUMBER(4);

 

Удаление атрибута таблицы

Для удаления атрибута таблицы применяется следующий синтаксис:

 

ALTER TABLE имя_таблицы DROP COLUMN поле;

 

Изменение типа атрибута, размера типа и наличия ограничения NOT NULL

Для изменения типа данных атрибута, размера типа данных или наличия опции NOT NULL используется следующие синтаксис:

 

ALTER TABLE имя_таблицы MODIFY поле тип [ ограничения ];

 

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

 

Создание первичного ключа

Для создания первичного ключа используется следующий синтаксис:

 

ALTER TABLE имя_таблицы ADD CONSTRAINT имя_ограничения

PRIMARY KEY(список_полей);

 

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

 

ALTER TABLE Students ADD CONSTRAINT Students_PK

RIMARY KEY(N_z);

 

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

 

Создание уникального ключа

Для создания уникального ключа используется следующий синтаксис:

 

ALTER TABLE имя_таблицы ADD CONSTRAINT имя_ограничения

UNIQUE(список_полей);

 

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

 

ALTER TABLE Students ADD CONSTRAINT Students_Comm_uk

UNIQUE (Comment);

 

Создание домена

Для создания домена используется следующий синтаксис:

 

ALTER TABLE имя_таблицы ADD CONSTRAINT имя_ограничения

CHECK(условное_выражение);

 

При наличии домена в таблице, каждый раз при изменении или добавлении значений в атрибуты, затрагиваемые условным выражением, СУБД будет проверять новое значение атрибутов на удовлетворение указанному выражению. Новое значение будет присвоено атрибуту только в том случае, если значение удовлетворяет указанному условию. При составлении условных выражений можно использовать логические операции >, <, >=, <=, <>, =, функции IN (проверка вхождения в множество), BETWEEN (проверка вхождения в диапазон), LIKE (проверка на удовлетворению шаблону). Кроме того, несколько условных выражений можно комбинировать при помощи логических операторов AND, OR и NOT.

 

ALTER TABLE Students ADD CONSTRAINT Students_Ngr_check

CHECK(N_gr >= 0);

 

Создание внешнего ключа

Для добавления внешнего ключа используется следующий синтаксис:

 

ALTER TABLE имя_подчиненной_таблицы

ADD CONSTRAINT имя_ограничения

FOREIGN KEY(список_полей_подчиненной_таблицы)

REFERENCES имя_главной_таблицы (список_полей_главной_таблицы)

[ON UPDATE CASCADE | SET NULL | SET DEFAULT | NO ACTION]

[ON UPDATE CASCADE | SET NULL | SET DEFAULT | NO ACTION];

 

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

Если параметры ON UPDATE или ON DELETE равны NO ACTION или они не указаны совсем, СУБД запретит выполнение SQL-оператора, нарушающего ссылочную целостность.

Если после параметров ON UPDATE или ON DELETE стоит значение CASCADE, то произойдет каскадное изменение или удаление строк в подчиненных таблицах. Иными словами, при удалении строки из главной таблицы, будут удалены все строки в подчиненных таблицах, которые ссылались на удаляемую строку. При изменении значения первичного ключа главной таблицы и наличии параметра ON UPDATE со значением CASCADE все значения внешних ключей, ссылающихся на изменяемый атрибут, также изменят свое значение.

Использовать значение CASCADE параметров ON UPDATE и ON DELETE следует с особой осторожностью, поскольку одна ошибочная команда, например, удаления строки в одной из таблиц может повлечь за собой необратимые последствия, которые могут привести к полной неработоспособности приложений базы данных. Если все-таки необходимо выполнять каскадное изменение или удаление данных в подчиненных таблицах, рекомендуется, по возможности, реализовывать это посредством хранимых процедур.

Указание значения SET NULL для параметров ON UPDATE или ON DELETE приведет к тому, что значения атрибутов внешних ключей, ссылающихся на изменяемое значение первичного ключа, установится в NULL.

Указание значения SET DEFAULT для параметров ON UPDATE или ON DELETE приведет к тому, что значения атрибутов внешних ключей, ссылающихся на изменяемое значение первичного ключа, примут значение по умолчанию, заданное при создании таблицы.

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

 

ALTER TABLE Students_Hobby ADD CONSTRAINT Students_Hobby_fk

FOREIGN KEY(N_z) REFERENCES Students(N_z);

 

Удаление ограничений целостности

Для удаления ограничения целостности (первичного ключа, уникального ключа или внешнего ключа) применяется следующий синтаксис:

 

ALTER TABLE имя_таблицы DROP CONSTRAINT имя_ограничения;

 

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

 

ALTER TABLE Dealers DROP CONSTRAINT Students_Hobby_fk;

Оператор DROP

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

 

DROP тип объекта имя объекта;

 

 

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

 

DROP TABLE Имя_Таблицы CASCADE CONSTRAINTS;

 

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

 


 

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...