Oracle предоставляет команды языка манипулирования данными для выполнения операций с данными в базе данных. Операции с данными могут заполнять таблицы базы данных приложением или бизнес-данными, изменять данные и удалять данные из базы данных, когда это необходимо. Помимо операций с данными, существует набор команд, которые используются для управления этими операциями. Эти команды сгруппированы как язык управления транзакциями.
Существует три типа операторов DML, участвующих в логической транзакции SQL, а именно: вставка, обновление, удаление и слияние. Транзакция — это логическая коллекция действий DML в сеансе базы данных.
ВСТАВИТЬ заявление
Команда INSERT используется для хранения данных в таблицах. Команда INSERT часто используется в языках программирования более высокого уровня, таких как Visual Basic.NET или C ++, в качестве встроенной команды SQL; однако эту команду также можно выполнить в командной строке SQL * PLUS в командном режиме. Существуют две различные формы команды INSERT. Первая форма используется, если новая строка будет иметь значение, вставленное в каждый столбец строки. Вторая форма команды INSERT используется для вставки строк, в которых некоторые данные столбца неизвестны или по умолчанию используются другой бизнес-логикой. Для этой формы команды INSERT необходимо указать имена столбцов, для которых хранятся данные.
Синтаксис:
Приведенный ниже синтаксис может соблюдаться, если значения для всех столбцов в таблице являются определенными и известными.
INSERT INTO table VALUES (column1 value, column2 value, ...);
Приведенный ниже синтаксис может использоваться, если только несколько столбцов из таблицы должны быть заполнены значением. Остальные столбцы могут выводить свои значения как NULL или из другой бизнес-логики.
INSERT INTO table (column1 name, column2 name, . . .) VALUES (column1 value, column2 value, . . .);
Оператор INSERT ниже создает новую запись сотрудника в таблице EMPLOYEES. Обратите внимание, что он вставляет значения для основных столбцов EMPLOYEE_ID, FIRST_NAME, SALARY и DEPARTMENT_ID.
INSERT INTO employees (EMPLOYEE_ID, FIRST_NAME, SALARY, DEPARTMENT_ID) VALUES (130, 'KEMP', 3800, 10);
В противном случае полные данные о сотрудниках могут быть вставлены в таблицу EMPLOYEES без указания списка столбцов с помощью приведенного ниже оператора INSERT — при условии, что значения известны заранее и должны соответствовать типу данных и положению столбцов в таблице.
INSERT INTO employees VALUES (130, 'KEMP','GARNER', '[email protected]', '48309290',TO_DATE ('01-JAN-2012'), 'SALES', 3800, 0, 110, 10);
Вставляемые значения должны быть совместимы с типом данных столбца. В качестве значений столбцов могут использоваться литералы, фиксированные значения и специальные значения, такие как функции, SYSDATE, CURRENT_DATE, SEQ.CURRVAL (NEXTVAL) или USER. Указанные значения должны соответствовать общим правилам. Строковые литералы и значения даты должны быть заключены в кавычки. Значение даты может быть предоставлено в формате DD-MON-RR или D-MON-YYYY, но предпочтительным является YYYY, поскольку он четко указывает столетие и не зависит от внутренней логики расчета века RR.
Оператор INSERT-AS-SELECT (IAS)
Данные можно заполнить в целевой таблице из исходной таблицы с помощью операции INSERT..AS..SELECT (IAS). Это операция чтения по прямому пути. Это простой способ создания копии данных из одной таблицы в другую или создания резервной копии таблицы, операции с исходной таблицей которой находятся в оперативном режиме.
Например, данные могут быть скопированы из таблицы EMPLOYEES в таблицу EMP_HISTORY.
INSERT INTO EMP_HISTORY SELECT EMPLOYEE_ID, EMPLOYEE_NAME, SALARY, DEPARTMENT_ID FROM employees;
ОБНОВЛЕНИЕ заявление
Команда UPDATE изменяет данные, хранящиеся в столбце. Она может обновлять одну или несколько строк за раз в зависимости от результирующего набора, отфильтрованного по условиям, указанным в предложении WHERE. Обратите внимание, что обновление столбцов отличается от изменения столбцов. Ранее в этой главе вы изучали команду ALTER. Команда ALTER изменяет структуру таблицы, но не затрагивает данные таблицы. Команда UPDATE изменяет данные в таблице, а не в структуре таблицы.
Синтаксис:
UPDATE table SET column = value [, column = value ...] [WHERE condition]
Из синтаксиса
Выражение SET column = может быть любой комбинацией символов, формул или функций, которые будут обновлять данные в указанном имени столбца. Предложение WHERE является необязательным, но если оно включено, оно указывает, какие строки будут обновлены. Только одна таблица может обновляться одновременно с командой UPDATE.
В приведенном ниже утверждении ОБНОВЛЕНИЕ зарплата сотрудника ДЖОНА обновляется до 5000.
UPDATE employees SET salary = 5000 WHERE UPPER (first_name) = 'JOHN';
Хотя предикаты WHERE являются необязательными, они должны быть логически добавлены, чтобы изменять только необходимую строку в таблице. В приведенном ниже утверждении ОБНОВЛЕНИЕ обновляется зарплата всех сотрудников в таблице.
UPDATE employees SET salary = 5000;
Несколько столбцов также можно обновить, указав несколько столбцов в предложении SET через запятую. Например, если для JOHN нужно изменить и зарплату, и служебную роль соответственно на 5000 и SALES, оператор UPDATE выглядит так:
UPDATE employees SET SALARY = 5000, JOB_ID = 'SALES' WHERE UPPER (first_name) = 'JOHN'; 1 row updated.
Другой способ обновления нескольких столбцов одной строки показывает использование подзапроса.
UPDATE employees SET (SALARY, JOB_ID) = (SELECT 5000, 'SALES' FROM DUAL) WHERE UPPER (ENAME) = 'JOHN'
УДАЛИТЬ заявление
Команда DELETE является одним из самых простых операторов SQL. Удаляет одну или несколько строк из таблицы. Операции удаления нескольких таблиц в SQL запрещены. Синтаксис команды DELETE такой, как показано ниже.
DELETE FROM table_name [WHERE condition];
Команда DELETE удаляет все строки в таблице, которые удовлетворяют условию в дополнительном предложении WHERE. Поскольку предложение WHERE является необязательным, можно легко удалить все строки из таблицы, пропустив предложение WHERE, поскольку предложение WHERE ограничивает область действия операции DELETE.
Приведенный ниже оператор DELETE удалит детали EDWIN из таблицы EMP.
DELETE employees WHERE UPPER (ENAME) = 'EDWIN' 1 row deleted.
Примечание. УДАЛИТЬ [ИМЯ ТАБЛИЦЫ] и УДАЛИТЬ ИЗ [ИМЯ ТАБЛИЦЫ] имеют одинаковое значение.
Условие WHERE в операторах условного удаления может использовать подзапрос, как показано ниже.
DELETE FROM employees WHERE DEPARTMENT_ID IN (SELECT DEPARTMENT_ID FROM LOCATIONS WHERE LOCATION_CODE = 'SFO')
TRUNCATE
Truncate — это команда DDL, которая используется для удаления всех записей из таблицы, но сохраняет структуру таблицы. Он не поддерживает условие WHERE для удаления выбранных записей.
Синтаксис:
TRUNCATE [table name]
Это автоматическая фиксация, т.е. она фиксирует текущую активную транзакцию в сеансе. Усечение таблицы не удаляет зависимые индексы, триггеры или ограничения таблицы. Если таблица A является родительской для ссылочного ограничения таблицы B в базе данных, таблица A не может быть усечена.
Сделка
Транзакция — это логическая единица работы, выполняемая в базе данных. Он может содержать —
-
Несколько команд DML, заканчивающихся командой TCL, т. Е. COMMIT или ROLLBACK
-
Одна команда DDL
-
Одна команда DCL
Несколько команд DML, заканчивающихся командой TCL, т. Е. COMMIT или ROLLBACK
Одна команда DDL
Одна команда DCL
Начало транзакции помечается первой командой DML. Он заканчивается командой TCL, DDL или DCL. Команда TCL, т. Е. COMMIT или ROLLBACK, выдается явно для завершения активной транзакции. В силу их основного поведения, если какая-либо из команд DDL или DCL будет выполнена в сеансе базы данных, передайте текущую активную транзакцию в сеансе. Если экземпляр базы данных аварийно завершает работу, транзакция останавливается.
COMMIT, ROLLBACK и SAVEPOINT являются языком управления транзакциями. COMMIT постоянно применяет изменения данных в базе данных, а ROLLBACK выполняет операцию анти-фиксации. SAVEPOINT контролирует серию транзакций, устанавливая маркеры на разных этапах транзакции. Пользователь может откатить текущую транзакцию до желаемой точки сохранения, которая была установлена ранее.
COMMIT — Подтверждение завершает текущую активную транзакцию путем постоянного внесения изменений данных в таблицы базы данных. COMMIT — это команда TCL, которая явно завершает транзакцию. Однако команды DDL и DCL неявно фиксируют транзакцию.
SAVEPOINT — точка сохранения используется для отметки определенной точки в текущей транзакции в сеансе. Поскольку это логический маркер в транзакции, точки сохранения не могут быть запрошены в словарях данных.
ROLLBACK — команда ROLLBACK используется для завершения всей транзакции путем отмены изменений данных. Если транзакция содержит отмеченные точки сохранения, ROLLBACK TO SAVEPOINT [имя] может использоваться для отката транзакции только до указанной точки сохранения. В результате все изменения данных до указанной точки сохранения будут отброшены.
демонстрация
Рассмотрим таблицу EMPLOYEES, которая заполняется сведениями о недавно нанятых сотрудниках в течение первого квартала каждого года. Канцелярский персонал добавляет каждую деталь сотрудника с точкой сохранения, чтобы откатить любые ошибочные данные в любой момент во время действия подачи данных. Обратите внимание, что он сохраняет имена точек сохранения такими же, как имена сотрудников.
INSERT INTO employees (employee_id, first_name, hire_date, job_id, salary, department_id) VALUES (105, 'Allen',TO_DATE ('15-JAN-2013','SALES',10000,10); SAVEPOINT Allen; INSERT INTO employees (employee_id, first_name, hire_date, job_id, salary, department_id) VALUES (106, 'Kate',TO_DATE ('15-JAN-2013','PROD',10000,20); SAVEPOINT Kate; INSERT INTO employees (employee_id, first_name, hire_date, job_id, salary, department_id) VALUES (107, 'McMan',TO_DATE ('15-JAN-2013','ADMIN',12000,30); SAVEPOINT McMan;
Предположим, что оператор подачи данных понимает, что он неправильно ввел зарплату «Кейт» и «Макман». Он откатывает активную транзакцию в точку сохранения Кейт и повторно вводит данные сотрудника для Кейт и Макман.
ROLLBACK TO SAVEPOINT Kate; INSERT INTO employees (employee_id, first_name, hire_date, job_id, salary, department_id) VALUES (106, 'Kate',TO_DATE ('15-JAN-2013','PROD',12500,20); SAVEPOINT Kate; INSERT INTO employees (employee_id, first_name, hire_date, job_id, salary, department_id) VALUES (107, 'McMan',TO_DATE ('15-JAN-2013','ADMIN',13200,30); SAVEPOINT McMan;
Как только он завершит ввод данных, он может зафиксировать всю транзакцию, выполнив COMMIT в текущем сеансе.
Последовательность чтения
Oracle поддерживает согласованность между пользователями в каждом сеансе с точки зрения доступа к данным и действий чтения / записи.
Когда DML встречается в таблице, исходные значения данных, измененные действием, записываются в записи отмены базы данных. Пока транзакция не зафиксирована в базе данных, любой пользователь в другом сеансе, который позднее запрашивает измененные данные, просматривает исходные значения данных. Oracle использует текущую информацию в глобальной области системы и информацию в записях отмены для создания согласованного по чтению представления данных таблицы для запроса. Только когда транзакция зафиксирована, изменения транзакции становятся постоянными. Транзакция является ключом к стратегии Oracle по обеспечению согласованности чтения.
Начальная точка для последовательных представлений читается от имени читателей
Управляет, когда измененные данные могут быть просмотрены другими транзакциями базы данных для чтения или обновления.