Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
lektsii_BD.doc
Скачиваний:
12
Добавлен:
14.04.2019
Размер:
1.55 Mб
Скачать

4.4.3 Оператор обновления данных update

Оператор UPDATE имеет формат:

UPDATE <базовая таблица | представление>

SET <столбец>= <значение> [,<столбец>= <значение>] ...

[WHERE <предикат>];

где <значение>::=<столбец> |< выражение> | <константа> | <переменная>

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

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

Пример 4.47 Предположим, что продавец Мотика ушел на пенсию, и необходимо переназначить его номер новому продавцу:

UPDATE Продавцы SET sname = 'Гибсон', city = 'Бостон', comm = .10 WHERE snum = 1004;

Эта команда передаст новому продавцу Гибсону, всех текущих заказчиков бывшего продавца Мотика и их порядки.

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

UPDATE Продавцы SET comm = comm + .01 WHERE 2 < =

(SELECT COUNT (cnum) FROM Заказчики WHERE Заказчики.snum =

Продавцы.snum);

Теперь продавцы Пил и Серенс, имеющие нескольких заказчиков, получат повышение своих комиссионных.

    1. Операторы определения объектов базы данных

4.5.1 Операторы определения таблицы

Базовые таблицы описываются в SQL с помощью предложения CREATE TABLE (создать таблицу). Рассмотрим синтаксис этого предложения:

CREATE TABLE <имя_таблицы> (<элемент_таблицы>

[,<элемент_таблицы >...] [ограничения_целостности_таблицы]);

< элемент_таблицы > ::= <определение_столбца>

< определение_столбца > ::= <имя_столбца> <тип_данных>

[DEFAULT <значение>] [<ограничения_ целостности_столбца>...]

< ограничения_ целостности_столбца > ::= NULL | NOT NULL [UNIQUE <спецификация>]

| REFERENCES <спецификация> | CHECK (<проверочное_ограничение>)|PRIMARY KEY|FOREIGN KEY

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

Ограничение – это свойство, назначенное столбцу или таблице, которое запрещает ввод в указанный столбец (или столбцы) недопустимых значений. Основные виды ограничений: NULL, NOT NULL, DEFAULT, PRIMARY KEY, FOREIGN KEY, REFERENCES, CHECK, UNIQUE. Ограничения могут быть без имени или с именем, тогда перед ограничением вставляется слово CONSTRAINT <имя_ограничения>. Наличие имени ограничения позволяет ссылаться на него в операторе изменения таблицы, например:

ALTER TABLE Tab1 ADD CONSTRAINT col1 CHECK (col1 BETWEEN 0 AND 1);

В разделе значения по умолчанию DEFAULT указывается значение, которое должно быть помещено в строку, заносимую в данную таблицу, если значение данного столбца явно не указано. Значение по умолчанию может быть указано в виде литеральной константы с типом, соответствующим типу столбца, или путем задания ключевого слова NULL, означающего, что значением по умолчанию является неопределенное значение. Если значение столбца по умолчанию не специфицировано, и в разделе ограничений целостности столбца указано NOT NULL, то попытка занести в таблицу строку с NULL-значением данного столбца приведет к ошибке.

Указание в разделе ограничений целостности NOT NULL приводит к неявному порождению проверочного ограничения целостности для всей таблицы «CHECK (C IS NOT NULL)» (где C - имя данного столбца). Если ограничение NOT NULL не указано, и раздел умолчаний отсутствует, то неявно порождается раздел умолчаний DEFAULT NULL. Если указана спецификация уникальности, то порождается соответствующая спецификация уникальности для таблицы.

Если в разделе ограничений целостности указано ограничение по ссылкам данного столбца (REFERENCES <спецификация>), то порождается соответствующее определение ограничения по ссылкам для таблицы:

FOREIGN KEY(C) REFERENCES <спецификация>

Пример 4.49 Создать таблицу:

CREATE TABLE Заказчики

( cnum integer NOT NULL PRIMARY KEY,

cname char (10) NOT NULL,

city char (10) DEFAULT = 'Лондон',

rating integer,

snum integer NOT NULL,

UNIQUE (cnum, snum));

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

Пример 4.50 В следующем примере для задания составного первичного ключа используется ограничение целостности таблицы PRIMARY KEY для пар:

CREATE TABLE Имена

( firstname char (10) NOT NULL,

lastname char (10) NOT NULL

city char (10),

PRIMARY KEY ( firstname, lastname ));

Пример 4. 51 В данном примере использовано ограничение по ссылкам:

CREATE TABLE Продавцы

(snum integer NOT NULL PRIMARY KEY,

sname char(10) NOT NULL,

city char(10),

comm decimal,

cnum integer REFERENCES Customers);

Существующую базовую таблицу можно в любой момент уничтожить с помощью предложения:

DROP TABLE <имя_таблицы>;

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

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

Для построения индекса в SQL существует предложение CREATE INDEX (создать индекс), имеющее формат:CREATE [UNIQUE] INDEX <имя_индекса> ON < имя_таблицы >

(<столбец >[[ASC] | DESC] [, <столбец> [[ASC] | DESC]] ...);

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

Для удаления индекса используется предложение:

DROP INDEX <имя_индекса>;

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

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