Удаление таблицы
можно выполнить с помощью следующего опе-
ратора:
DROP TABLE имя_таблицы [CASCADE CONSTRAINTS];
При наличии конструкции CASCADE CONSTRAINTS вместе с уда-
лением таблицы уничтожаются ограничения внешнего ключа в других
таблицах.
П р и м е р ы
Постоянно работающий магазин напрямую контактирует с издатель-
ствами и имеет постоянный штат продавцов. Директор магазина должен
иметь сведения:
1) о поступивших книгах: название книги, фамилия автора, цена, из-
дательство, жанр;
2) о распределении книг среди продавцов: название книги, фамилия
продавца, количество экземпляров, дата поступления.
136
1
. Необходимо создать таблицы: BOOKS, BOOKS_DELIVERY, ука-
зав все необходимые ограничения целостности данных.
Перечень, названия и тип данных столбцов таблицы BOOKS:
--------------------------------------------------------------------------
Код книги CODE_BOOK Number(5)
Название книги TITLE
Varchar2(25)
ФИО автора AUTHOR
Varchar2(20)
Цена книги PRICE
Number(7)
Издательство PUBLISH_HOUSE
Varchar2(15)
Жанр GENRE Varchar2(15)
--------------------------------------------------------------------------
Информация таблицы BOOKS:
Код кн. Назв. книги
ФИО автора Цена Изд-во
Жанр
----------------------------------------------------------------------------------------------
1
Гибель Богов
Перумов Н. 345 Аст
Фантастика
2
Казаки
Толстой Л. 5568 Нова
Роман
3
Ярость
Перумов Н. 1385
Аст
Детектив
4
Дюна
Герберт Ф. 2668 Нова
Фантастика
5
Гибель Титана
Кристи А. 2345 Аст
Роман
6
Дети Дюны
Герберт Ф. 2500 Аст
Фантастика
----------------------------------------------------------------------------------------------
Перечень,
названия
и
тип
данных
столбцов
таблицы
BOOKS_DELIVERY:
------------------------------------------------------------------------------------
Код операции CODE_OPERATION Number(10)
Код книги CODE_BOOK Number(5)
ФИО продавца SALESMAN
Varchar2(20)
Количество единиц QUANTITY
Number(4)
Дата поставки DATE_DELIVERY
Date
------------------------------------------------------------------------------------
Информация таблицы BOOKS_DELIVERY:
Код опер. Код книги
ФИО Продавца Кол-во ед. Дата поставки
-----------------------------------------------------------------------------------------
1
1
Иванов И. И. 5
20-01-2006
2
3
Иванов И. И. 5
10-02-2006
3
2
Петров П. П. 4
25-01-2006
4
4
Петров П. П. 4
20-02-2006
137
5
4
Иванов И. И. 4
20-02-2006
-----------------------------------------------------------------------------------------
Для создания таблицы BOOKS воспользуемся оператором CREATE
TABLE. Столбец CODE_BOOK, содержащий уникальный код книги, яв-
ляется ключевым, и по отношению к его значениям устанавливаем огра-
ничение PRIMARY KEY. За значениями для этого столбца пользователь
должен следить сам. Ограничение именуется как PK_BOOKS. Поскольку
столбец TITLE не может иметь пустые значения, на него накладываем
ограничение NOT NULL. На значения столбца PRICE накладываем огра-
ничение, связанное со стоимостью книги, она должна быть не менее 100
руб. Ограничение получает имя PRICE_BOOKS. Если таблица BOOKS
была уже создана ранее, то перед повторным созданием ее следует уда-
лить следующим оператором:
DROP TABLE BOOKS;
Следующий оператор CREATE языка SQL создает таблицу BOOKS с
необходимыми ограничениями целостности данных:
CREATE TABLE BOOKS (CODE_BOOK NUMBER(5)
CONSTRAINT PK_BOOKS PRIMARY KEY,
TITLE VARCHAR2(25) CONSTRAINT TITLE_BOOKS NOT NULL,
AUTHOR VARCHAR2(20),
PRICE NUMBER(7) CONSTRAINT PRICE_BOOKS
CHECK(PRICE >100),
PUBLISH_HOUSE VARCHAR2(15), GENRE VARCHAR2(15));
Вставка строк в таблицу BOOKS осуществляется следующей сово-
купностью операторов:
INSERT INTO BOOKS VALUES(1,'Гибель Богов','Перумов Н.', 345,
'Аст', 'Фантастика');
INSERT INTO BOOKS VALUES(2,'Казаки','Толстой Л.', 5568, 'Нова',
'Роман');
INSERT INTO BOOKS VALUES(3,'Ярость','Перумов Н.',1385,'Аст',
'Детектив');
INSERT INTO BOOKS VALUES(4,'Дюна', 'Герберт Ф.', 2668, 'Нова',
'Фантастика');
INSERT INTO BOOKS VALUES(5,'Гибель Титана', 'Кристи А.', 2345,
'Аст', 'Роман');
INSERT INTO BOOKS VALUES(6,'Дети Дюны', 'Герберт Ф.', 2500,
'Аст', 'Фантастика');
138
Просмотр введенных значений можно выполнить с помощью сле-
дующего оператора SQL:
SELECT * FROM BOOKS;
Для создания таблицы BOOKS_DELIVERY также воспользуемся
оператором CREATE TABLE. Столбец CODE_OPERATION, содержа-
щий уникальный код операции, является ключевым, и по отношению к
его значениям устанавливаем ограничение PRIMARY KEY. Это ограни-
чение получает имя DELIVERY_PR. Для генерации уникальных значе-
ний этого столбца используем предварительно созданную с помощью
оператора CREATE SEQUENCE последовательность CODE_OP:
CREATE SEQUENCE CODE_OP;
Поскольку столбец CODE_BOOK должен содержать только те зна-
чения, которые присутствуют в соответствующем столбце таблицы
BOOKS, необходимо задать соответствующее ограничение на значения
столбца CODE_BOOK. Это ограничение можно сделать как ограничени-
ем столбца, так и ограничением таблицы, задав ему имя DELIVERY_FK.
Конструкция ON DELETE CASCADE обеспечит при удалении из табли-
цы BOOKS строк, содержащих значения внешнего ключа, автоматиче-
ское удаление строк и из таблицы BOOKS_DELIVERY. Для столбца
DATE_DELIVERY значением по умолчанию устанавливаем текущую
дату (SYSDATE). Если таблица BOOKS_DELIVERY была уже создана
ранее, то перед повторным созданием ее следует удалить следующим
оператором:
DROP TABLE BOOKS_DELIVERY;
Следующий оператор создает таблицу BOOKS_DELIVERY с необхо-
димыми ограничениями целостности данных:
CREATE TABLE BOOKS_DELIVERY (
CODE_OPERATION NUMBER(10)
CONSTRAINT DELIVERY_PR PRIMARY KEY,
CODE_BOOK NUMBER(5), SALESMAN VARCHAR2(20),
QUANTITY NUMBER(4),
DATE_DELIVERY DATE DEFAULT SYSDATE,
CONSTRAINT DELIVERY_FK FOREIGN KEY(CODE_BOOK)
REFERENCES BOOKS(CODE_BOOK) ON DELETE CASCADE);
Вставка строк в таблицу BOOKS_DELIVERY осуществляется ис-
пользованием следующей совокупности операторов INSERT:
139
INSERT INTO BOOKS_DELIVERY VALUES(CODE_OP.NEXTVAL,
1, 'Иванов И. И.', 5, '20-01-2006');
INSERT INTO BOOKS_DELIVERY VALUES(CODE_OP.NEXTVAL,
3, 'Иванов И. И.', 5, '10-02-2006');
INSERT INTO BOOKS_DELIVERY VALUES(CODE_OP.NEXTVAL,
2, 'Петров П. П.', 4, '25-01-06');
INSERT INTO BOOKS_DELIVERY VALUES(CODE_OP.NEXTVAL,
4, 'Петров П. П.', 4, '20-02-06');
INSERT INTO BOOKS_DELIVERY VALUES(CODE_OP.NEXTVAL,
4, 'Иванов И. И.', 4, '20-02-06');
Просмотр введенных значений можно выполнить с помощью сле-
дующего оператора SQL:
SELECT * FROM BOOKS_DELIVERY;
2.
Создать таблицу BOOKS1, структура которой идентична структуре
таблицы BOOKS, и перенести в нее строки с информацией о книгах жан-
ра «Фантастика» и «Роман» из таблицы BOOKS.
Следующий набор операторов SQL создает таблицу BOOKS1 и пере-
носит в нее строки из таблицы BOOKS:
CREATE TABLE BOOKS1 (CODE_BOOK NUMBER(5)
CONSTRAINT PK_BOOKS1 PRIMARY KEY,
TITLE VARCHAR2(25) CONSTRAINT TITLE_BOOKS1
NOT NULL, AUTHOR VARCHAR2(15),
PRICE NUMBER(7) CONSTRAINT PRICE_BOOKS1
CHECK(PRICE >100), PUBLISH_HOUSE VARCHAR2(15),
GENRE VARCHAR2(15));
INSERT INTO BOOKS1 SELECT CODE_BOOK, TITLE, AUTHOR,
PRICE, PUBLISH_HOUSE, GENRE FROM BOOKS WHERE
GENRE = 'Фантастика' OR GENRE = 'Роман';
Аналогичные действия выполняются следующим оператором:
CREATE TABLE BOOKS1 AS
SELECT CODE_BOOK, TITLE, AUTHOR, PRICE,
PUBLISH_HOUSE, GENRE FROM BOOKS WHERE
GENRE = 'Фантастика' OR GENRE = 'Роман';
Просмотр введенных значений можно выполнить с помощью сле-
дующего оператора SQL:
SELECT * FROM BOOKS1;
140
3.
Выполнить с помощью оператора UPDATE следующие изменения
в таблице BOOKS:
а) заменить в таблице BOOKS в строке с фамилией автора «Кристи
А.» в столбце AUTHOR фамилию «Кристи А.» на «Агата Кристи» и в
столбце GENRE жанр «Роман» на жанр «Детектив»;
б) заменить в таблице BOOKS цену книги «Гибель Титана» на цену
книги «Казаки».
Следующий набор операторов выполнит указанные действия:
UPDATE BOOKS SET GENRE='Детектив', AUTHOR='Агата
Кристи'
WHERE AUTHOR='Кристи А.';
UPDATE BOOKS SET PRICE=
(SELECT PRICE FROM BOOKS WHERE TITLE='Казаки')
WHERE TITLE='Гибель Титана';
4.
Удалить из таблицы BOOKS все строки, содержащие информацию
о книгах в жанре «Роман». Используем следующий оператор:
DELETE BOOKS WHERE GENRE = 'Роман';
5.
Добавить в таблицу BOOKS новый столбец PRICE_У_Е с типом
данных NUMBER(7,2) и пересчитать цену книг в условных единицах.
Следующие операторы выполнят сначала добавление нового столбца в
таблицу, а затем заполнят его соответствующими значениями:
ALTER TABLE BOOKS ADD PRICE_У_Е NUMBER(7,2);
UPDATE BOOKS SET PRICE_У_Е=PRICE/2155;
Отметим, что при добавлении нескольких новых столбцов в таблицу
они заключаются в скобки:
ALTER TABLE BOOKS ADD (YEAR_PUBLISH CHAR(4),
TOWN_PUBLISH CHAR(15));
Для изменения характеристик столбца указывается ключевое слово
MODIFY, имя столбца и новые характеристики:
ALTER TABLE BOOKS MODIFY (YEAR_PUBLISH NUMBER(4),
TOWN_PUBLISH CHAR(25));
Для добавления ограничения целостности данных необходимо ука-
зать ключевое слово CONSTRAINT, имя ограничения и само ограниче-
ние. При этом необходимо помнить, что добавляемое ограничение цело-
стности данных не должно противоречить данным, находящимся в таб-
лице.
141
ALTER TABLE BOOKS ADD CONSTRAINT ZZ CHECK(PRICE>200);
Для временного отключения проверки ограничения целостности с
именем ZZ необходимо использовать команду
ALTER TABLE BOOKS DISABLE CONSTRAINT ZZ;
Для включения проверки этого ограничения целостности можно ис-
пользовать команду
ALTER TABLE BOOKS ENABLE CONSTRAINT ZZ;
Для удаления ограничения целостности с именем ZZ необходимо ука-
зать ключевые слова DROP и CONSTRAINT и имя удаляемого ограни-
чения
ALTER TABLE BOOKS DROP CONSTRAINT ZZ;
Достарыңызбен бөлісу: |