Хелпикс

Главная

Контакты

Случайная статья





Добавление, удаление и изменение данных в таблицах



Запросы, рассмотренные ранее, были направлены на то, чтобы получить данные, содержащиеся в существующих таблицах базы данных. Главным ключевым словом таких запросов на выборку данных является SELECT. Запросы на выборку данных всегда возвращают виртуальную таблицу, которая отсутствует в базе данных и создается временно лишь для того, чтобы представить выбранные данные пользователю. При создании и дальнейшем сопровождении базы данных обычно возникает задача добавления новых и удаления ненужных записей, а также изменения содержимого ячеек таблицы. В SQL для этого предусмотрены операторы ISERT (вставить), DELETE (удалить) и UPDATE (изменить). Запросы, начинающиеся с этих ключевых слов, не возвращают данные в виде виртуальной таблицы, а изменяют содержимое уже существующих таблиц базы данных. Запросы на модификацию (добавление, удаление и изменение) данных могут содержать вложенные запросы на выборку данных из той же самой таблицы или из других таблиц, однако сами не могут быть вложены в другие запросы. Таким образом, операторы INSERT, DELETE и UPDATE в SQL- выражении могут находиться только в самом начале.

 

Добавление новых записей

 

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

 

1. INSERT имяТаблицы VALUES (списокЗначений) —
вставляет пустую запись в указанную таблицу и заполняет эту запись значениями из списка, указанного за ключевым словом VALUES. При этом первое в списке значение вводится в первый столбец таблицы, второе значение — во второй столбец и т. д. Порядок столбцов задается при создании таблицы. Данная форма оператора INSERT не очень надежна, поскольку нетрудно ошибиться в порядке вводимых значений. Более надежной и гибкой является следующая форма;

2. INSERT INTO имяТаблицы (списокСтолбцов) VALUES (слисокЗначений) — вставляет пустую запись в указанную таблицу и вводит в заданные столбцы значения из указанного списка.
При этом в первый столбец из спискастолбиов вводится первое значение из списокзначений, во второй столбец — второе значение и т. д. Порядок имен столбцов в списке может отличаться от их порядка, заданного при создании таблицы. Столбцы, которые не указаны в списке, заполняются значением NULL. Иногда требуется просто добавить пустую запись. В этом случае первая форма оператора INSERT требует после ключевого слова VALUES указать список значений NUI. L, длина которого равна количеству столбцов. Однако есть лучшее решение:

 

INSERT INTO имяТаблицы (имяЛюбогоСтолбца) VALUES (NULL);

 

Рекомендуется использовать именно данную форму оператора: INSERT. Следующий запрос добавляет новую запись в таблицу Клиенты, при этом столбцы имя, Телефон и Сумма_заказа вводятся значения 'Петров ', ' 444-4444 ' и 25300 соответственно:

 

INSERT INTO Клиенты(Имя, Телефон, Сумма_заказа)

VALUES ('Петров', '444-4444', 25300);

 

Начиная с SQL-92 появилась возможность работать со значениями типа запись. Это позволяет за ключевым словом VALUES указать несколько наборов значений в круглых скобках (записей), которые необходимо вставить в таблицу. Например:

 

INSERT INTO Клиенты (Имя, Телефон, Сумма заказа)

VALUES

('Петров', ' 444-4444 ', 25300),
('Иванов', '555-5555', 45100),
('Сидоров', '777-7777', 1200),
('Захаров', '123-9870', 7800);

 

3. INSERT INTO имяТаблицы (списокСтолбцов) SELECT …..

вставляет в указанную таблицу записи, возвращаемые запросом на выборку. На практике нередко требуется загрузить в одну таблицу данные из другой таблицы. Например, ранее созданная таблица контакты содержит имена и другие данные о клиентах, которые необходимо вставить в таблицу клиенты. Для этого в oneраторе INSERT вместо VALUES можно использовать оператор SELECT, выбирающий записи, необходимые для вставки. Допустим, таблицы Клиенты и контакты имеют одноименные и однотипные столбцы Имя, Адрес и телефон. Требуется добавить все записи из таблицы контакты в таблицу клиент. Это можно сделать с помощью следующего запроса:

 

INSERT INTO Клиенты (Имя, Адрес, Телефон)
SELECT Имя, Адрес, Телефон FROM Контакты;

 

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

 

INSERT INTO Клиенты (Имя, Адрес, Телефон)
SELECT Имя, Адрес, Телефон
FROM Контакты
WHERE Клиенты. Имя < > Контакты. Имя AND

Клиенты. Адрес < > Контакты. Адрес AND контакты. имя IS NOT NULL;

 

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

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

1. таблица может иметь столбец типа SERIAL. (счетчик), имеющий уникальные значения, которые СУБД назначает автоматически. Эго обеспечивает уникальность всех записей таблицы и, следовательно, ее соответствие 1-ой нормальной форме. Поэтому в списке столбцов в операторе INSERT не следует указывать столбцы типа SERIAL;

2.  если список столбцов, указанный в операторе INSERT, содержит не все столбцы таблицы, то в оставшиеся столбцы (за исключением столбца типа SERIAL) будут введены значения NULL (неопределенное значение), а в столбец типа SERIAL. правильное числовое значение введет СУБД;

 

3. при введении значений в столбцы новой записи необходимо следить, чтобы типы значений соответствовали типам столбцов таблицы. При необходимости можно воспользоваться функцией преобразования типов CAST( );

4. Таблица может иметь ограничения. Если вводимые данные не удовлетворяют условиям этих ограничений, то запрос на добавление данных не будет выполнен. Так, например, если в ограничении на какой-либо столбец указано, что он не может иметь значения NULL, то попытка добавить пустую запись приведет к ошибке. В этом случае необходимо использовать оператор INSERT INTO с ключевым словом VALUES; - чтобы сразу ввести значение, удовлетворяющее ограничениям.

 



  

© helpiks.su При использовании или копировании материалов прямая ссылка на сайт обязательна.