Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
73
Добавлен:
23.11.2017
Размер:
409.09 Кб
Скачать

11.1. Внесение изменений в базу данных

Язык SQL позволяет не только извлекать информацию из БД с помощью запросов на чтение, но и изменять содержащуюся в ней информацию с помощью запросов на добавление, удаление и обновление.

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

11.1.1. Добавление новых данных

Наименьшей единицей информации, которую можно добавить в реляционную БД, является одна строка. Существует два способа добавления новых строк в БД:

  1. однострочный оператор INSERT позволяет добавить в таблицу новую строку (рис.11.1);

  2. многострочный оператор INSERT обеспечивает извлечение строк из одной части БД и добавление их в другую таблицу (рис.11.2).

INSERT INTOимя_таблицы

( имя_столбца )

,

VALUES (константа )

NULL

,

Рис. 11.1. Однострочный оператор INSERT

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

Например, можно задать запросы для внесения в БД сведений о новой квартире, установке телефона в этой квартире и заселении этой квартиры новым жильцом:

  1. INSERT INTO FLAT

VALUES (‘Зеленоград, 1001-45’, 40, 3,’H’)

  1. INSERT INTO TPHONE (ADR, NTEL, TCATEGORY)

VALUES (‘Зеленоград,1001-45’, ’999-1199’, ’С’)

  1. INSERT INTO PERSON (NOM, FIO, RDATE, POL, ADR)

VALUES (14,’Кукушкин Жан Ильич’,’03/13/77’,’M’,’Зеленоград,1001-45’)

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

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

При добавлении в таблицу новой строки всем столбцам, имена которых отсутствуют в списке столбцов оператора INSERT, СУБД автоматически присваивает значение NULL либо значение, заданное по умолчанию при описании структуры таблицы (см.(3), где отсутствует имя столбца SUMD).

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

INSERT INTO имя_таблицы запрос

( имя_столбца )

,

Рис. 11.2. Многострочный оператор INSERT

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

Например, можно добавить в таблицу PERSON сведения о новом жителе, у которого общий доход будет таким же, как у жителя с номером 16:

INSERT INTO PERSON

SELECT 20,’АЛОВ НАУМ НИЛЫЧ’,’05/20/49’,’M’, SUM (MONEYS),

‘Зеленоград, 1001-45’ FROM HAVE_D, PROFIT

WHERE NOM=16 AND HAVE_D.ID=PROFIT.ID

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

В стандарте SQL2 это ограничение отсутствует и ''самодобавление'' разрешено. Следовательно, рассмотренный пример можно модифицировать следующим образом: INSERT INTO PERSON

SELECT 20,’ АЛОВ НАУМ НИЛЫЧ ’,’05/20/49’,

’M’ ,SUMD,’Зеленоград,1001-45’

FROM PERSON WHERE NOM=16

Соседние файлы в папке БД лабы