русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

И изменение структуры таблицы, удаление таблиц


Дата добавления: 2015-07-09; просмотров: 1304; Нарушение авторских прав


 

Создание таблицы выполняется с помощью оператораCREATE, уп-рощенный синтаксис которого имеет следующий вид:

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

{({ имя_столбца тип_данных[DEFAULT значение]

[ограничения_столбца] | ограничение_таблицы}

[,{ имя_столбца тип_данных[DEFAULT значение]

[ограничения_столбца] | ограничение_таблицы}]...) |

AS подзапрос};

 

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

Подзапрос– это обычный запрос на выборку информации, реализуемый операторомSELECT. При создании таблицы задаваемые имена таблиц и имена столбцов должны удовлетворять правилам, предписываемые идентификаторам. При этом естественно, что имена, присваиваемые таб-лицам, должны быть уникальными в схеме пользователя, а имена столб-цов должны быть уникальными в рамках одной таблицы. Для каждого столбца указываются тип данных и, если необходимо, значение, встав-ляемое в столбец по умолчанию(DEFAULT значение). Важным элемен-том при создании таблиц является задание ограничений целостности данных, которые позволяют отслеживать правильность модификации имеющихся данных или вставляемых в таблицу новых данных. Ограни-чения целостности данных делятся на два типа: ограничения столбца и ограничения таблицы. Ограничения столбца позволяют определить усло-вия, которым должны удовлетворять значения соответствующего столб-ца; ограничения целостности данных, накладываемые на таблицу, позво-ляют проверить правильность всех добавляемых или модифицируемых строк таблицы. Ограничение может быть именованным или безымян-ным. Удобнее использовать именованные ограничения, поскольку при выдаче информации, связанной с возникшим нарушением одного из ог-раничений, выдается и имя этого ограничения, что весьма полезно для исправления ошибок в дальнейшем. Задание ограничений на столбец или ограничений на таблицу осуществляется по следующему синтаксису:



 

[CONSTRAINT имя_ограничения] тип_ограничения

 

Имеются следующие типы ограничений, накладываемых на столбец:

 

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

UNIQUE – это ограничение требует, чтобы вводимые в столбец зна-чения в рамках одной таблицы были уникальными;

NOT NULL – это ограничение требует обязательного присутствия в столбце некоторого значения;

CHECK(выражение) – это ограничение позволяет подвергнуть опре-деленной проверке вставляемое в столбец значение; если условия, нало-женные на вставляемые значения, не выполняются, то значения в стол-бец не помещаются;

REFERENCES – это ограничение позволяет установить взаимосвязь

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

REFERENCES имя_таблицы[(имя_столбца)][ ON DELETE CASCADE]

При внесении значения в столбец создаваемой таблицы система будет автоматически проверять наличие аналогичного значения в указанном столбце указанной таблицы. При этом естественно, что для обеспечения однозначности устанавливаемой взаимосвязи все значения, находящиеся в указанном столбце, на которые производится ссылка, должны иметь ограничениеUNIQUE илиPRIMARY KEY. Если в качестве имени столбца указанной таблицы используется первичный ключ, то имя столбца можно не указывать. Таблица, на чей столбец ссылается другая таблица, называется главной, а таблица, ссылающаяся на нее, – подчи-ненной. КонструкцииON DELETE CASCADЕ указывает, что при удале-нии строк в главной таблице автоматически осуществляется удаление соответствующих строк и в подчиненной таблице.

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

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

Используя следующую форму записи:

FOREIGN KEY (список_имен_столбцов)

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

[ON DELETE CASCADE]

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

Если ограничениеCHECK затрагивает значения нескольких столбцов, увязывая их в некоторое достаточно сложное условие, то такое ограни-чение также удобно определить как ограничение на таблицу.

 

Для генерации и вставки в столбец таблицы уникальных значений можно создать специально предназначенный для этих целей объект– по-следовательность. Создание последовательности выполняется с помо-щью оператораCREATE по следующему упрощенному синтаксису:

CREATE SEQUENCE имя_последовательности

[START WITH начальное_значение] [INCREMENT BY шаг];

В самом простейшем случае генерируется последовательность целых чисел от1 до10 с шагом единица. Конструкция INCREMENT BY по-зволяет указать шаг изменения значений последовательности. Конструк-цияSTART WITH позволяет задать начальное значение генерируемой последовательности, которое при ее отсутствии устанавливается равным единице. Для вставки в столбец текущего значения последовательности нужно указать имя_последовательности.СURRVAL, а для вставки в столбец измененного по правилам формирования последовательности следующего значения используется имя_последовательности.NEXTVAL.

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

 

Вставка строк в таблицу осуществляется с помощью оператора

INSERT, который имеет следующий синтаксис:

INSERT INTO имя_таблицы[( список_столбцов)]

{VALUES (значение1 [, значение2]...) | подзапрос};

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

 

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

DELETE [FROM] имя_таблицы[WHERE условие];

При отсутствии ключевого словаWHERE из таблицы удаляются все строки, но сама таблица остается.

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

UPDATE имя_таблицы

SET {(имя_столбца1 [, имя_столбца2]...) = (подзапрос) |

имя_столбца1=значение1, имя_столбца2={значение2 | (подзапрос)}}

[WHERE условие];

 

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

 

Удаление таблицы можно выполнить с помощью следующего опе-ратора:

DROP TABLE имя_таблицы[CASCADE CONSTRAINTS];

При наличии конструкцииCASCADE CONSTRAINTS вместе с уда-лением таблицы уничтожаются ограничения внешнего ключа в других таблицах.

 

 

Демонстрационные примеры

З а д а н и е«Книжный магазин».

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

о поступивших книгах: название книги, фамилия автора, цена, изда-тельство, жанр;

о распределении книг среди продавцов: название книги, фамилия про-давца, количество экземпляров, дата поступления;

о продаже книг: название книги, фамилия продавца, фамилия поку-пателя, дата продажи.

 

1. Необходимо создать таблицы: KNIGA, KNIGA_POSTAVKA, указав все необходимые ограничения целостности данных.

Перечень, названия и тип данных столбцов таблицыKNIGA:

 

Информация таблицыKNIGA:

 

 

Перечень, название и тип данных столбцов таблицыKNIGA_POS-TAVKA:

------------------------------------------------------------------------------------

 

 

Информация таблицыKNIGA_POSTAVKA:

Код опер. Код книги Фам. продавца Кол-во ед. Дата поставки

-----------------------------------------------------------------------------------------

 

П о я с н е н и е.

Создание таблицыKNIGA выполняется с помощью оператораCREATE TABLE. Столбец КОД_КНИГИ, содержащий уни-кальный код книги, является ключевым, и по отношению к его значени-ям устанавливается ограничениеPRIMARY KEY. За значениями для это-го столбца пользователь должен следить сам. Ограничение именуется как PK_KN. Поскольку столбец НАЗВАНИЕ не может иметь пустые значе-ния, на него накладывается ограничениеNOT NULL. На значения столб-ца ЦЕНА накладывается ограничение, связанное со стоимостью книги, она должна быть не менее100 рублей. Ограничение получает имя CEN_KN. Если таблицаKNIGA была уже создана ранее, то перед по-вторным созданием ее следует удалить следующим оператором:

DROP TABLE KNIGA;

Следующий операторCREATE языкаSQL создает таблицуKNIGA с необходимыми ограничениями целостности данных:

CREATE TABLE KNIGA ( КОД_КНИГИNUMBER(5) CONSTRAINT PK_KN PRIMARY KEY, НАЗВАНИЕVARCHAR2(25) NOT NULL, АВТОРVARCHAR2(20), ЦЕНАNUMBER(7) CONSTRAINT CEN_KN CHECK(ЦЕНА>100), ИЗДАТЕЛЬСТВОVARCHAR2(15), ЖАНРVARCHAR2(15));

 

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

INSERT INTO KNIGA VALUES(1,'Дюна','Герберт',268,'Аст', 'Фантастика');

INSERT INTO KNIGA VALUES(2,'Ингвар и Ольха', 'Никитин',168, 'Аст', 'Роман');

INSERT INTO KNIGA VALUES(3,'Гибель Богов','Перумов',345,'Аст', 'Фантастика');

INSERT INTO KNIGA VALUES(4,'Мифы','Асприн',266,'Аст','Детектив');

INSERT INTO KNIGA VALUES(5,'Казаки','Толстой',5568,'Нова','Роман');

INSERT INTO KNIGA VALUES(6,'Еретики Дюны', 'Герберт',368, 'Аст', 'Фантастика');

INSERT INTO KNIGA VALUES(7,'Князь Рус','Никитин',1168,'Аст', 'Роман');

INSERT INTO KNIGA VALUES(8,'Страсть','Перумов',1385,'Аст', 'Детектив');

INSERT INTO KNIGA VALUES(9,'Мифотолкование', 'Асприн',2265, 'Нова', 'Детектив');

INSERT INTO KNIGA VALUES(10,'Война и мир', 'Толстой',4588, 'Нова', 'Роман');

INSERT INTO KNIGA VALUES(11,'Еретики Дюны', 'Герберт',2668, 'Нова', 'Фантастика');

INSERT INTO KNIGA VALUES(12,'Владимир','Никитин',568,'Аст', 'Детектив');

INSERT INTO KNIGA VALUES(13,'Гибель Титана', 'Кристи',2345, 'Аст', 'Роман');

Просмотр введенных значений можно выполнить с помощью сле-дующего оператораSQL:

SELECT * FROM KNIGA;

 

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

а) Вводится строка с повторение первичного ключа– 5

 

INSERT INTO KNIGA VALUES(5, 'Казаки', 'Толстой',5568, 'Нова', 'Роман');

 

б) Вводится строка с пустым значением для столбца НАЗВАНИЕ–

INSERT INTO KNIGA (КОД_КНИГИ, АВТОР, ЦЕНА, ИЗДАТЕЛЬСТВО, ЖАНР) VALUES(1, 'Герберт',68, 'Аст', 'Роман');

 

в) Вводится строка со значением для столбца ЦЕНА меньше100 –

INSERT INTO KNIGA VALUES(1, 'Дюна', 'Герберт',68, 'Аст', 'Фантастика');

 

П о я с н е н и е. Создание таблицыKNIGA_POSTAVKA выполняется с помощью оператора CREATE TABLE. Столбец КОД_ОПЕРАЦИИ, со-держащий уникальный код операции, является ключевым и по отноше-нию к его значениям устанавливается ограничениеPRIMARY KEY. Это ограничение получает имяPOST_PR. Для генерации уникальных значе-ний этого столбца используется предварительно созданная с помощью оператораCREATE SEQUENCE последовательностьKOD_OP:

CREATE SEQUENCE KOD_OP;

Поскольку столбец КОД_КНИГИ должен содержать только те зна-чения, которые присутствуют в соответствующем столбце таблицы KNIGA, необходимо задать соответствующее ограничение на значения столбца КОД_КНИГИ. Это ограничение можно сделать как ограничени-ем столбца, так и ограничением таблицы, задав ему имяPOST_FK. Кон-струкцияON DELETE CASCADE обеспечит при удалении из таблицы KNIGA строк, содержащих значения внешнего ключа, автоматическое удаление строк и из таблицыKNIGA_POSTAVKA. Для столбца ДАТА_ПОСТУПЛЕНИЯ значением по умолчанию устанавливается те-кущая дата(SYSDATE). Если таблицаKNIGA_POSTAVKA была уже создана ранее, то перед повторным созданием ее следует удалить сле-дующим оператором:

DROP TABLE KNIGA_POSTAVKA;

 

Следующий оператор создает таблицуKNIGA_POSTAVKA с необхо-димыми ограничениями целостности данных:

CREATE TABLE KNIGA_POSTAVKA (

КОД_ОПЕРАЦИИNUMBER(10)

CONSTRAINT POST_PR PRIMARY KEY, КОД_КНИГИNUMBER(5),

ПРОДАВЕЦVARCHAR2(20),

 

КОЛ_ЕДИНИЦNUMBER(4),

ДАТА_ПОСТУПЛЕНИЯDATE DEFAULT SYSDATE,

CONSTRAINT POST_FK FOREIGN KEY(КОД_КНИГИ)

REFERENCES KNIGA(КОД_КНИГИ) ON DELETE CASCADE);

Вставка строк в таблицуKNIGA_POSTAVKA осуществляется ис-пользованием следующей совокупности операторовINSERT:

INSERT INTO KNIGA_POSTAVKA VALUES(KOD_OP.NEXTVAL, 1, 'Иванов',5, '20-JAN-2004');

INSERT INTO KNIGA_POSTAVKA VALUES(KOD_OP.NEXTVAL, 2, 'Иванов',5, '20-JAN-2004');

INSERT INTO KNIGA_POSTAVKA VALUES(KOD_OP.NEXTVAL, 3, 'Иванов',5, '10-FEB-2004');

INSERT INTO KNIGA_POSTAVKA VALUES(KOD_OP.NEXTVAL, 4, 'Иванов',5, '10-FEB-2004');

INSERT INTO KNIGA_POSTAVKA VALUES(KOD_OP.NEXTVAL, 5, 'Иванов',5, '10-FEB-2004');

INSERT INTO KNIGA_POSTAVKA VALUES(KOD_OP.NEXTVAL, 6, 'Петров',4, '25-JAN-2004');

INSERT INTO KNIGA_POSTAVKA VALUES(KOD_OP.NEXTVAL, 7, 'Петров',4, '25-JAN-2004');

INSERT INTO KNIGA_POSTAVKA VALUES(KOD_OP.NEXTVAL, 8, 'Петров',4, '20-FEB-2004');

INSERT INTO KNIGA_POSTAVKA VALUES(KOD_OP.NEXTVAL, 9, 'Петров',4, '20-FEB-2004');

INSERT INTO KNIGA_POSTAVKA VALUES(KOD_OP.NEXTVAL, 10, 'Петров',4, '20-FEB-2004');

INSERT INTO KNIGA_POSTAVKA VALUES(KOD_OP.NEXTVAL, 11, 'Сидоров',3, '25-JAN-2004');

INSERT INTO KNIGA_POSTAVKA VALUES(KOD_OP.NEXTVAL, 12, 'Сидоров',3, '25-JAN-2004');

INSERT INTO KNIGA_POSTAVKA VALUES(KOD_OP.NEXTVAL, 13, 'Сидоров',3, '25-JAN-2004');

INSERT INTO KNIGA_POSTAVKA VALUES(KOD_OP.NEXTVAL, 7, 'Сидоров',3, '20-FEB-2004');

INSERT INTO KNIGA_POSTAVKA VALUES(KOD_OP.NEXTVAL, 4, 'Сидоров',3, '20-FEB-2004');

 

Просмотр введенных значений можно выполнить с помощью сле-дующего оператораSQL:

 

SELECT * FROM KNIGA_POSTAVKA;

 

З а м е ч а н и е. Пример строк, вызывающих нарушение ограничений целостности данных для таблицыKNIGA_POSTAVKA:

a) Вводится строка с повторением значения первичного ключа– 12:

INSERT INTO KNIGA_POSTAVKA VALUES(12, 12, 'Сидоров',3, '25-JAN-2004');

б) Вводится строка, в которой указан отсутствующий в таблице KNIGA код книги– 15:

INSERT INTO KNIGA_POSTAVKA VALUES(16, 15, 'Сидоров',3, '25-JAN-2004');

 

2. Создать новую таблицуKNIGA1, структура которой идентична структуре таблицыKNIGA, и перенести в нее строки с информацией о книгах жанра«Фантастика» и«Роман» из таблицыKNIGA.

Следующий набор операторовSQL создает таблицуKNIGA1 и пере-носит в нее строки из таблицыKNIGA:

CREATE TABLE KNIGA1 (КОД_КНИГИNUMBER(5)

CONSTRAINT PK_KN1 PRIMARY KEY,

НАЗВАНИЕVARCHAR2(25) CONSTRAINT NN_KN1 NOT NULL,

АВТОРVARCHAR2(15),

ЦЕНАNUMBER(7) CONSTRAINT CEN_KN1 CHECK(ЦЕНА> 100),

ИЗДАТЕЛЬСТВОVARCHAR2(15),

ЖАНРVARCHAR2(15));

INSERT INTO KNIGA1 SELECT КОД_КНИГИ, НАЗВАНИЕ,

АВТОР, ЦЕНА, ИЗДАТЕЛЬСТВО, ЖАНРFROM KNIGA WHERE

ЖАНР= 'Фантастика' OR ЖАНР= 'Роман';

Аналогичные действия выполняются следующим оператором:

CREATE TABLE KNIGA1 AS

SELECT КОД_КНИГИ, НАЗВАНИЕ, АВТОР, ЦЕНА,

ИЗДАТЕЛЬСТВО, ЖАНРFROM KNIGA WHERE

ЖАНР= 'Фантастика' OR ЖАНР= 'Роман';

Просмотр введенных значений можно выполнить с помощью сле-дующего оператораSQL:

SELECT * FROM KNIGA1;

 

3. Выполнить с помощью оператораUPDATE следующие изменения в таблицеKNIGA1:

а) Заменить в таблицеKNIGA1 в строке с фамилией автора«Кристи» в столбце АВТОР фамилию«Кристи» на«Агата Кристи» и в столбце ЖАНР жанр«Роман» на жанр«Детектив»;

б) Заменить в таблицеKNIGA1 цену книги«Гибель Титана» на цену книги«Казаки».

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

UPDATE KNIGA1 SET ЖАНР='Детектив', АВТОР='Агата Кристи' WHERE АВТОР='Кристи';

UPDATE KNIGA1 SET ЦЕНА= (SELECT ЦЕНАFROM KNIGA1 WHERE НАЗВАНИЕ='Казаки') WHERE НАЗВАНИЕ='Гибель Титана';

 

4. Удалить из таблицыKNIGA1 все строки, содержащие информацию о книгах в жанре«Роман». Используем следующий оператор:

DELETE KNIGA1 WHERE ЖАНР='Роман';

 

5. Добавить в таблицуKNIGA1 новый столбец ЦЕНА_В_У_Е с типом данныхNUMBER(7,2) и пересчитать цену книг в условных единицах.

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

ALTER TABLE KNIGA1 ADD ЦЕНА_В_У_ЕNUMBER(7,2);

UPDATE KNIGA1 SET ЦЕНА_В_У_Е=ЦЕНА/2155;

 

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

ALTER TABLE KNIGA1 ADD (ГОД_ИЗДАНИЯCHAR(4),

МЕСТО_ИЗДАНИЯCHAR(15));

Для изменения характеристик столбца указывается ключевое слово MODIFY, имя столбца и новые характеристики:

ALTER TABLE KNIGA1 MODIFY (ГОД_ИЗДАНИЯNUMBER(4),

МЕСТО_ИЗДАНИЯCHAR(25));

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

ALTER TABLE KNIGA1 ADD CONSTRAINT ZZ CHECK(ЦЕНА>200);

 

Для временного отключения проверки ограничения целостности с именемZZ необходимо использовать команду ALTER TABLE KNIGA1 DISABLE CONSTRAINT ZZ;

Для включения проверки этого ограничения целостности можно ис-пользовать команду

ALTER TABLE KNIGA1 ENABLE CONSTRAINT ZZ;

Для удаления ограничения целостности с именемZZ необходимо ука-зать ключевые словаDROP иCONSTRAINT и имя удаляемого ограниче-ния

ALTER TABLE KNIGA1 DROP CONSTRAINT ZZ;




<== предыдущая лекция | следующая лекция ==>
ФункцииSQL. | Построение простейших запросов для выбора информации из одной таблицы


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 1.281 сек.