Модификация данных
Для изменения содержимого базы данных SQL предусматривает три операции INSERT (вставка строк в таблицы), DELETE (удаление строк из таблицы) и UPDATE (обновление значений в существующих строках таблиц).
Операция вставки INSERT может быть единичной либо групповой. Для единичной вставки необходимо явным образом определить значения колонок новой строки. Если указан неполный перечень колонок таблицы. то оставшиеся колонки получают неопределенное значение (NULL).
Операция групповой вставки предполагает добавление строк в таблицу из некоторой другой таблицы, указанной явно или с помощью SELECT-предложения.
Операция удаления DELETE является групповой, т.е. применяется ко всем строкам таблицы, удовлетворяющим требуемому условию. В отличие от запись-ориентированных языков манипулирования данными, SQL не использует понятия текущей строки в таблице, предполагая. что любая строка может быть однозначно идентифицирована в таблице с помощью значения первичного ключа. Если условие отсутствует, то удаляются все строки таблицы. Условие может использовать функцию проверки вхождения значения в некоторую другую таблицу, заданную с помощью SELECT-конструкции.
Операция обновления значений в строках таблицы UPDATE также является групповой. Условие определяет, к каким строкам требуется применить операцию обновления. В условии, аналогично DELETE, можно использовать SELECT-конструкции.
В SQL большое внимание уделяется обеспечению целостности данных при выполнении операций обновления данных. Предусмотрена возможность учета специальных ограничений целостности. Любые операции, нарушающие такие ограничения, отклоняются.
Наиболее часто используемым примером ограничения целостности является ограничение на диапазон допустимых значений в таблицах. Очень часто значения в таблице являются корректными только в том случае, когда они присутствуют в одной или нескольких других таблицах, логически связанных между собой.
При выполнении удаления или обновления строк для обеспечения целостности данных иногда необходимо выполнять определенные сопутствующие операции в других логически связанных таблицах. Например, удаление строк в одной таблице может сопровождаться удалением связанных строк в одной или нескольких других таблицах. Может также возникнуть необходимость заменить определенные значения связанных строк другой таблицы на неопределенные. При этом такие действия могут выполняться рекурсивно для достаточно сложных многотабличных структур.
Такого рода ограничения целостности определяются при создании отдельных таблиц и определении структуры базы данных.
Группу операций модификации данных, имеющих логически законченный смысл, после полного выполнения которых база данных останется корректной, называют транзакцией. В SQL предусмотрены средства управления транзакциями, позволяющие отслеживать выполнение транзакций, обрабатывать возникающие ошибки и координировать обработку базы данных несколькими приложениями или пользователями в параллельном режиме.
Утверждение COMMIT означает удачное окончание текущей транзакции и начало новой. Утверждение ROLLBACK указывает на необходимость выполнения обратного отката, т.е. автоматического восстановления состояния базы данных на момент начала транзакции.
В большинстве случаев координация работы в многопользовательском режиме выполняется с помощью механизма блокировок монопольного захвата некоторой части базы данных. Выполнять блокировки можно автоматически, блокируя данные некоторой транзакцией, как только к ним происходит обращение, и освобождать их при обработке COMMIT и ROLLBACK.
В SQL можно блокировать таблицы в монопольном режиме (чтение и запись со стороны других транзакций откладываются до момента окончания транзакции) или в режиме разделения (откладываются только обновления со стороны других транзакций).