Пусть таблица DEPARTMENT имеет следующую структуру:
Имя колонки | DeptNo | DeptName | MgrNo | AdmrDept |
Тип данных | CHAR(3) NOT NULL | VARCHAR(29) NOT NULL | CHAR(6) | CHAR(3) NOT NULL |
Описание | Номер отдела | Название, определяющее направление деятельности отдела | Номер сотрудника – руководителя отдела | Номер отдела, которому подчиняется данный отдел |
Пример 1. Вставить в таблицу DEPARTMENT следующую информацию о новом отделе: номер отдела – ‘E31’, название – ‘ARCHITECTURE’, номер руководителя отдела – ‘00390’, вышестоящий отдел – ‘E01’.
INSERT INTO DEPARTMENT
VALUES ( ’E31’, ’ARCHITECTURE’, ’00390’, ’E01’ )
Пример 2. Вставить в таблицу DEPARTMENT ту же информацию, что и в примере 1, за исключением номера руководителя отдела.
INSERT INTO DEPARTMENT ( DeptNo, DeptName, AdmrDept )
VALUES ( ’E31’, ’ARCHITECTURE’, ’E01’ )
или, что то же самое,
INSERT INTO DEPARTMENT
VALUES ( ’E31’, ’ARCHITECTURE’, NULL, ’E01’ )
Пример 3. Вставить в таблицу DEPARTMENT в одном предложении INSERT информацию о двух отделах, для которых не назначены руководители.
INSERT INTO DEPARTMENT ( DeptNo, DeptName, AdmrDept )
VALUES ( ’B11’, ’PURCHASING’, ’B01’ ),
( ’E41’, ’DATABASE ADMINISTRATION’, ’E01’ )
|
|
Пример 4.
Таблица EMP_ACT имеет следующую структуру:
Имя колонки | EmpNo | ProjNo | ActNo | EmpTime | EmStDate | EmEnDate |
Тип данных | CHAR(6) NOT NULL | CHAR(6) NOT NULL | SMALLINT NOT NULL | DEC(5,2) | DATE | DATE |
Описание | Номер сотрудника | Номер проекта | Номер задания | Доля времени, затрачиваемая сотрудником на выполнение задания | Дата начала работы над заданием | Дата завершения задания |
Необходимо создать временную таблицу MA_EMP_ACT, имеющую такую же структуру, и загрузить в нее те строки из таблицы EMP_ACT, для которых номер проекта (ProjNo) начинается буквами ‘MA’.
CREATE TABLE MA_EMP_ACT (
EmpNo CHAR( 6 ) NOT NULL,
ProjNo CHAR( 6 ) NOT NULL,
ActNo SMALLINT NOT NULL,
EmpTime DEC( 5,2 ),
EmStDate DATE,
EmEnDate DATE)
INSERT INTO MA_EMP_ACT
SELECT * FROM EMP_ACT
WHERE ProjNo LIKE ’MA%’
Предложение DELETE
Предложение DELETE позволяет удалять из таблицы все или некоторые строки.
В общем случае предложение DELETE имеет следующий синтаксис:
DELETE FROM имя_таблицы [ WHERE условие_поиска ]
имя_таблицы – должно указывать существующую таблицу базы данных.
условие_поиска – определяет условие отбора удаляемых строк. Если конструкция WHERE опущена, удаляются все строки таблицы.
В условии поиска в конструкции WHERE могут быть использованы только колонки таблицы, указанной в предложении DELETE. Условие поиска применяется к каждой строке таблицы, и удаляются те строки, для которых результатом условия поиска является значение true. Если условие поиска содержит подзапрос, можно считать, что подзапрос будет выполняться каждый раз, когда условие поиска применяется к строке, и результаты подзапроса используются в условии поиска. Если подзапрос ссылается на таблицу, указанную в этом же предложении DELETE, или на зависимые таблицы по правилу удаления CASCADE или SET NULL, подзапрос выполняется полностью, прежде чем будет удалена хотя бы одна строка.
|
|
При удалении строк из родительской таблицы проверяются ограничения ссылочной целостности и правила удаления, определенные в дочерних таблицах. Если для какой-либо из дочерних таблиц определено правило удаления RESTRICT, строки из родительской таблицы не удаляются, и предложение DELETE завершается с ошибкой. Если операция удаления не защищена правилом удаления RESTRICT, выбранные строки удаляются. Кроме того, оказывается воздействие на строки дочерних таблиц, зависящие от удаляемых строк:
– колонкам внешнего ключа любых строк, зависящих по связям с правилом удаления SET NULL, присваивается значение NULL;
– любые строки, зависящие по связям с правилом удаления CASCADE, также удаляются, и правила удаления применяются, в свою очередь, и к этим строкам.
Правило удаления NO ACTION проверяется, чтобы гарантировать, что любой not-null внешний ключ ссылается на существующую родительскую строку после того, как будут удовлетворены другие ссылочные ограничения.
Если при выполнении предложения DELETE, удаляющего несколько строк, возникла ошибка, никакие изменения в базе данных не происходят.