- •Добавление, удаление и изменение данных в таблицах
- •Добавление новых записей
- •Insert into имяТаблицы values (списокЗначений)
- •Insert into имяТаблицы (списокСтолбцов) values (списокЗначений)
- •Insert into имяТаблицы (имяЛюбогоСтолбца) values (null)
- •Удаление записей
- •Insert into Клиенты (Имя, Телефон, Сумма_заказа)
- •Insert into имяТаблицы (списокСтолбцов) select …
- •Insert into Клиенты (Имя, Адрес, Телефон)
- •Insert into Клиенты (Имя, Адрес, Телефон)
- •Изменение данных
- •Проверка ссылочной целостности
Проверка ссылочной целостности
Между таблицами в БД могут быть установлены связи. Эти связи задаются как ограничения ссылочной целостности данных. При попытке добавить, изменить или удалить записи в связанных таблицах могут возникнуть так называемые аномалии модификации данных, обусловленные нарушением ссылочной целостности.
Целостность данных может быть нарушена при попытке добавить запись в дочернюю таблицу, для которой нет соответствующей записи в родительской таблице. Например, в базе данных имеется родительская таблица Клиенты (ИмяКлиента, Имя, Адрес, Телефон) и дочерняя таблица Продажи (ID_заказа, Товар, Цена, Количество, ИмяКлиента). В таблице Клиенты столбец ИмяКлиента является первичным ключом (имеет уникальные определенные значения), а в таблице Продажи столбец ИмяКлиента не обязан иметь уникальные значения, поскольку один и тот же клиент может сделать несколько различных покупок. Чтобы эти две таблицы находились в связи, столбец ИмяКлиента в таблице Продажи должен быть внешним ключом, ссылающимся на первичный ключ ИмяКлиента в таблице Клиенты.
Если вы добавите в таблицу Продажи новую запись, содержащую значение столбца ИмяКлиента, которого еще нет в родительской таблице Клиенты, то возникнет аномалия модификации данных. Анологичная ситуация произойдет, если вы попытаетесь удалить запись из таблицы Клиенты: в дочерней таблице Продажи некоторые записи могут ссылаться на клиентов, сведения о которых отсутствуют.
Поэтому вначале следует добавить запись в таблицу Клиенты с соответствующим значением столбца ИмяКлиента, а затем – в Продажи или, в случае с удалением, вначале нужно удалить соотсветствующие записи из таблицы Продажи, а затем – из Клиенты.
В ряде случаев перед добавлением или удалением записей можно проверить, не приведет ли это к нарушению ссылочной целостности. Такую проверку можно выполнить с помощью предиката match, который имеет следующий синтаксис:
ЗначешеТипаЗаписи row match [unique] [simple | partial | full] (подзапрос);
Здесь в квадратных скобках указаны необязательные ключевые слова, а вертикальной чертой разделены их альтернативные варианты: unique (уникальный), simple (простой), partial (частичный), full (полный). Эти ключевые слова определяют правила обработки значений типа записи с полями, имеющими неопределенные значения.
Допустим, требуется определить, есть ли в таблице Продажи запись ('Иванов', 'Компьютер'). Для этого можно выполнить такой запрос:
select * from Продажи
where ('Иванов', 'Компьютер')
match (select ИмяКлиента, Товар from Продажи);
Если в таблице Продажи есть запись с указанным именем клиента и товаром, то предикат match вернет значение true.
