Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
МУ по лаб.раб Базы данных (очное отделение).docx
Скачиваний:
21
Добавлен:
11.11.2019
Размер:
2.78 Mб
Скачать

Values (выражение,...),(...),...

Эта форма команды INSERT вставляет строки в соответствии с точно указанными в команде значениями. В скобках после имени таблицы перечисляются столбцы, а после ключевого слова VALUES – их значения.

Пример: Пусть требуется добавить в эту таблицу модель ПК 1157 производителя B. Это можно сделать следующим оператором:

INSERT INTO Product

VALUES ('B', 1157, 'PC');

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

INSERT [LOW_PRIORITY | DELAYED] [IGNORE]

[INTO] имя_таблицы [(имя_столбца,...)]

SELECT ...

Пример:

INSERT INTO Artifacts (author)

SELECT id FROM Persons

WHERE last_name='Иванов'

AND bday='1934';

Вставит в таблицу Artifacts в поле «автор» (author) значение идентификатора, выбранного из таблицы Persons по условию, что фамилия человека Иванов и год рождения 1934.

INSERT [LOW_PRIORITY | DELAYED] [IGNORE]

[INTO] имя_таблицы

SET имя_столбца=выражение,

имя_столбца=выражение, ...

Пример:

INSERT INTO Persons

SET last_name='Петров',

first_name='Иван';

Эта команда вставит в таблицу Persons в поле last_name значение «Петров», а в поле first_name – строку «Иван».

Параметры LOW_PRIORITY и DELAYED используются, когда с таблицей работает большое число пользователей.

Они предписывают устанавливать приоритет данной операции перед операциями других пользователей.

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

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

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

Хранимая процедура вставки

Отредактируем сформированный шаблон хранимой процедуры на предыдущем шаге. Удалим лишнее и оставим только это

Начнем писать процедуру вставки. Напишем процедуру вставки для таблицы Author. Назовем процедуру sp_insert_author.

CREATE PROCEDURE sp_insert_author

Перечисляем все входные параметры (поля таблицы) кроме первичного ключа, он у нас автоинкрементный.

(@first_name nvarchar(50),

@second_name nvarchar(50),

@last_name nvarchar(50),

@birthday date

)

Указываем индикатор начала собственно кода процедуры АS.

AS

Тело процедуры составляет sql запрос на вставку.

--перечисляем список полей для вставки (не обязательно все)

insert author (first_name, second_name, last_name, birthday)

--перечисляем список значений для вставки

values (@first_name, @second_name, @last_name, @birthday)

В итоге мы получим процедуру вставки.

Рисунок 4.3 – Процедура вставки

Проверим код и выполним. Давайте выполним данный запрос.

Рисунок 4.4 – Выполненый запрос

Рисунок 4.5 – В таблице Author после выполнения запроса появилась новая запись

Создание процедур обнавления

Оператор UPDATE

Оператор UPDATE обновляет значения существующих столбцов таблицы в соответствии с введенными значениями. В выражении SET указывается, какие именно столбцы следует модифицировать и какие величины должны быть в них установлены. В выражении WHERE, если оно присутствует, задается, какие строки подлежат обновлению. В остальных случаях обновляются все строки. Если задано выражение ORDER BY, то строки будут обновляться в указанном в нем порядке.

UPDATE [LOW_PRIORITY] [IGNORE] имя_таблицы

SET имя_столбца1=выражение1

[, имя_столбца2=выражение2, ...]

[WHERE where_definition]

[LIMIT число]

Если указывается ключевое слово LOW_PRIORITY, то выполнение данной команды UPDATE задерживается до тех пор, пока другие клиенты не завершат чтение этой таблицы.

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

Если в выражении, которое задает новое значение столбца, используется имя этого поля, то команда UPDATE использует для этого столбца его текущее значение. Например, следующая команда устанавливает столбец death_date в значение, на единицу большее его текущей величины:

UPDATE Persons

SET death_date=death_date+1;

Пример:

UPDATE Artifacts

SET title='Ламповая ЭВМ' Limit 1;

Хранимая процедура обновления

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

Начнем писать процедуру обновления. Напишем процедуру обновления для таблицы Author.

Обновим запись в таблице Author.

Рисунок 4.6 – Содержание таблицы Author

Давайте заменим Отчество (second_name) c “M.” на “Mikhaylovich”.

Назовем процедуру sp_update_author.

CREATE PROCEDURE sp_update_author

Перечисляем входные параметры (поля таблицы). Выбираем нужные параметры. Указываем параметр (@id_author) по которому мы будем искать запись, которую хотим изменить и параметр который хотим изменить.

(@id_author int,

@second_name nvarchar(50)

)

Указываем индикатор начала собственно кода процедуры АS.

AS

Тело процедуры составляет sql запрос на обновление.

UPDATE author

--перечисляем список полей для обновления (не обязательно все)

SET second_name = @second_name

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

WHERE id_author = @id_author

В итоге мы получим процедуру обновления.

Рисунок 4.7 – Процедура обновления

Проверим код и выполним. Давайте выполним данный запрос.

Рисунок 4.8 – Выполненый запрос

Рисунок 4.9 – В таблице Author после выполнения запроса изменилась запись

Создание процедур удаления

Оператор DELETE

Оператор DELETE удаляет из таблицы имя_таблицы строки, удовлетво-ряющие заданным в where_definition условиям, и возвращает число удаленных записей.

Если оператор DELETE запускается без определения WHERE, то удаляются все строки.

DELETE [LOW_PRIORITY] FROM имя_таблицы

[WHERE where_definition]

[LIMIT rows]

Пример: следующая команда удалит из таблицы Persons все записи, у которых поле «год рождения» (bday) больше 2003:

DELETE FROM Persons WHERE bday>2003;

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

DELETE FROM Persons WHERE 1>0;

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

DELETE FROM Persons;

Хранимая процедура удаления

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

Начнем писать процедуру удаления. Напишем процедуру удаления для таблицы Author.

Таблица Author.

Рисунок 4.10 – Содержание таблицы Author

Давайте удалим запись №5

Назовем процедуру sp_delete_author.

CREATE PROCEDURE sp_delete_author

Перечисляем входные параметры (поля таблицы). Выбираем нужные параметры. Указываем параметр (@id_author) по которому мы будем искать запись, которую хотим удалить.

@id_author int,

Указываем индикатор начала собственно кода процедуры АS.

AS

Тело процедуры составляет sql запрос на удаление.

DELETE FROM author

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

WHERE id_author = @id_author

В итоге мы получим процедуру обновления.

Рисунок 4.11 – Процедура удаления

Проверим код и выполним. Давайте выполним данный запрос.

Рисунок 4.12 – Выполненый запрос

Рисунок 4.13 – В таблице Author после выполнения запроса удалилась запись №5

Содержание отчета

Отчет по лабораторной работе должен содержать:

  1. цель работы;

  2. постановка задачи;

  3. исходный код хранимых процедур с комментариями;

  4. результаты выполнения хранимых процедур;

  5. выводы;

  6. список литературы.

Дополнительный материал: Учебный фильм Создание серверной и клиентской части: db3 - sp_insert, db4 - sp_updata and sp_delete.