Что такое commit sql

COMMIT TRANSACTION (Transact-SQL)

Отмечает успешное завершение явной или неявной транзакции. Если значение @@TRANCOUNT равно 1, то инструкция COMMIT TRANSACTION делает все изменения, произведенные с начала транзакции, постоянной частью базы данных, освобождает ресурсы транзакции и уменьшает значение параметра @@TRANCOUNT до 0. Если значение @@TRANCOUNT больше 1, инструкция COMMIT TRANSACTION уменьшает значение @@TRANCOUNT только на 1 и оставляет транзакцию активной.

Что такое commit sql. Смотреть фото Что такое commit sql. Смотреть картинку Что такое commit sql. Картинка про Что такое commit sql. Фото Что такое commit sqlСинтаксические обозначения в Transact-SQL

Синтаксис

Ссылки на описание синтаксиса Transact-SQL для SQL Server 2014 и более ранних версий, см. в статье Документация по предыдущим версиям.

Аргументы

transaction_name
ПРИМЕНИМО К: SQL Server и база данных SQL Azure

Не учитывается компонентом Компонент SQL Server Database Engine. transaction_name указывает имя транзакции, присвоенное предыдущей инструкцией BEGIN TRANSACTION. Аргумент transaction_name должен соответствовать правилам для идентификаторов, но его длина не может превышать 32 символа. transaction_name сообщает программистам, с какой вложенной инструкцией BEGIN TRANSACTION связана инструкция COMMIT TRANSACTION.

@tran_name_variable
ПРИМЕНИМО К: SQL Server и база данных SQL Azure

Имя определенной пользователем переменной, содержащей допустимое имя транзакции. Переменная должна быть объявлена с типом данных char, varchar, nchar или nvarchar. Если переменной присваивается значение длиной более 32 символов, используются только первые 32, остальные усекаются.

DELAYED_DURABILITY
ПРИМЕНИМО К: SQL Server и база данных SQL Azure

Remarks

Обязанностью программиста на языке Transact-SQL является вызов инструкции COMMIT TRANSACTION только в том случае, когда все данные, относящиеся к транзакции, логически верны.

Если зафиксированная транзакция является распределенной транзакцией Transact-SQL, инструкция COMMIT TRANSACTION вызывает координатор MS DTC для использования двухфазного протокола фиксации на всех серверах, участвующих в транзакции. Если локальная транзакция охватывает две или более базы данных одного и того же экземпляра компонента Компонент Database Engine, то экземпляр использует встроенную двухфазную фиксацию для всех баз данных, вызванных в транзакции.

При использовании вложенных транзакций фиксация внутренних транзакций не освобождает ресурсы и не делает их изменения постоянными. Изменения данных становятся постоянными и ресурсы освобождаются только при фиксации внешней транзакции. Вызов каждой инструкции COMMIT TRANSACTION приводит к тому, что если значение @@TRANCOUNT больше 1, то значение переменной @@TRANCOUNT просто уменьшается на 1. Когда значение @@TRANCOUNT уменьшится до нуля, вся внешняя транзакция фиксируется. Так как аргумент transaction_name не учитывается компонентом Компонент Database Engine, вызов инструкции COMMIT TRANSACTION, содержащей ссылку на имя внешней транзакции, приводит к тому, что если существуют необработанные внутренние транзакции, то значение @@TRANCOUNT уменьшается только на 1.

Вызов инструкции COMMIT TRANSACTION, когда значение параметра @@TRANCOUNT равно нулю, приводит к ошибке, так как нет соответствующей инструкции BEGIN TRANSACTION.

Нельзя произвести откат транзакции после вызова инструкции COMMIT TRANSACTION, так как измененные данные уже стали частью базы данных.

Компонент Database Engine увеличивает счетчик транзакций внутри выражения, только когда счетчик транзакций равен нулю при запуске инструкции.

Разрешения

Необходимо быть членом роли public.

Примеры

A. Фиксация транзакции

ПРИМЕНИМО К: SQL Server, База данных SQL Azure, Azure Synapse Analytics и Система платформы аналитики (PDW)

В следующем примере удаляется кандидат на вакансию. В нем используется база данных AdventureWorks.

Б. Фиксация вложенной транзакции

ПРИМЕНИМО К: SQL Server и база данных SQL Azure

В следующем примере создается таблица и формируется три уровня вложенных транзакций, которые затем фиксируются. Хотя каждая инструкция COMMIT TRANSACTION имеет параметр transaction_name, связи между инструкциями COMMIT TRANSACTION и BEGIN TRANSACTION не существует. Параметры transaction_name позволяют программисту удостовериться в том, что закодировано правильное количество фиксаций, необходимое для того, чтобы уменьшить значение @@TRANCOUNT до 0 и таким образом зафиксировать внешнюю транзакцию.

Источник

COMMIT TRANSACTION (Transact-SQL)

Marks the end of a successful implicit or explicit transaction. If @@TRANCOUNT is 1, COMMIT TRANSACTION makes all data modifications since the start of the transaction a permanent part of the database, frees the transaction’s resources, and decrements @@TRANCOUNT to 0. When @@TRANCOUNT is greater than 1, COMMIT TRANSACTION decrements @@TRANCOUNT only by 1 and the transaction stays active.

Что такое commit sql. Смотреть фото Что такое commit sql. Смотреть картинку Что такое commit sql. Картинка про Что такое commit sql. Фото Что такое commit sqlTransact-SQL Syntax Conventions

Syntax

To view Transact-SQL syntax for SQL Server 2014 and earlier, see Previous versions documentation.

Arguments

transaction_name
APPLIES TO: SQL Server and Azure SQL Database

Is ignored by the SQL Server Database Engine. transaction_name specifies a transaction name assigned by a previous BEGIN TRANSACTION. transaction_namemust conform to the rules for identifiers, but can’t exceed 32 characters. transaction_name indicates to programmers which nested BEGIN TRANSACTION the COMMIT TRANSACTION is associated with.

@tran_name_variable
APPLIES TO: SQL Server and Azure SQL Database

Is the name of a user-defined variable containing a valid transaction name. The variable must be declared with a char, varchar, nchar, or nvarchar data type. If more than 32 characters are passed to the variable, only 32 characters will be used; the remaining characters are truncated.

DELAYED_DURABILITY
APPLIES TO: SQL Server and Azure SQL Database

Remarks

It’s the responsibility of the Transact-SQL programmer to issue COMMIT TRANSACTION only at a point when all data referenced by the transaction is logically correct.

If the transaction committed was a Transact-SQL distributed transaction, COMMIT TRANSACTION triggers MS DTC to use a two-phase commit protocol to commit all of the servers involved in the transaction. When a local transaction spans two or more databases on the same instance of the Database Engine, the instance uses an internal two-phase commit to commit all of the databases involved in the transaction.

When used in nested transactions, commits of the inner transactions don’t free resources or make their modifications permanent. The data modifications are made permanent and resources freed only when the outer transaction is committed. Each COMMIT TRANSACTION issued when @@TRANCOUNT is greater than one simply decrements @@TRANCOUNT by 1. When @@TRANCOUNT is finally decremented to 0, the entire outer transaction is committed. Because transaction_name is ignored by the Database Engine, issuing a COMMIT TRANSACTION referencing the name of an outer transaction when there are outstanding inner transactions only decrements @@TRANCOUNT by 1.

Issuing a COMMIT TRANSACTION when @@TRANCOUNT is zero results in an error; there’s no corresponding BEGIN TRANSACTION.

You can’t roll back a transaction after a COMMIT TRANSACTION statement is issued because the data modifications have been made a permanent part of the database.

The Database Engine increments the transaction count within a statement only when the transaction count is 0 at the start of the statement.

Permissions

Requires membership in the public role.

Examples

A. Committing a transaction

APPLIES TO: SQL Server, Azure SQL Database, Azure Synapse Analytics, and Analytics Platform System (PDW)

The following example deletes a job candidate. It uses AdventureWorks.

B. Committing a nested transaction

APPLIES TO: SQL Server and Azure SQL Database

The following example creates a table, generates three levels of nested transactions, and then commits the nested transaction. Although each COMMIT TRANSACTION statement has a transaction_name parameter, there’s no relationship between the COMMIT TRANSACTION and BEGIN TRANSACTION statements. The transaction_name parameters help the programmer ensure that the correct number of commits are coded to decrement @@TRANCOUNT to 0 and so to commit the outer transaction.

Источник

Oracle PL/SQL •MySQL •MariaDB •SQL Server •SQLite

Базы данных

COMMIT ОПЕРАТОР

В этом учебном материале вы узнаете, как использовать Oracle оператор COMMIT с синтаксисом и примерами.

Описание

Oracle оператор COMMIT фиксирует все изменения для текущей транзакции. Как только COMMIT выполнится, остальным пользователям будут доступны внесенные изменения.

Синтаксис

Параметры или аргументы

WORK Необязательный. Был добавлен в Oracle, для SQL-совместимости. Выполнение оператора COMMIT с или без параметра WORK приведет к такому же результату.

COMMENT Необязательный. Используется, как комментарий, который ассоциируется с текущей транзакцией. Комментарий, может быть до 255 байт текста в одинарных кавычках. Он хранится в системном представлении (view) DBA_2PC_PENDING вместе с ID транзакции, если есть проблема.

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

Примечание

Пример

Рассмотрим на примере, как завершается транзакция в Oracle с помощью COMMIT.

Этот пример COMMIT будет выполняться так же, как в следующем примере:

Comment оператор

Давайте рассмотрим на пример COMMIT, который показывает, как использовать оператор Comment :

Например, вы можете написать COMMIT с комментарием двумя способами:

Поскольку ключевое слово WORK всегда подразумевает, что оба примера COMMIT эквивалентны. COMMIT будет хранить свой комментарий, заключенный в кавычки вместе с ID (идентификатором) транзакции в представлении системы DBA_2PC_PENDING, если транзакция была сомнительной или ошибочной.

Force оператор

Например, вы можете написать COMMIT из сомнительной транзакции двумя способами:

Источник

Управление транзакциями в PL/SQL

Эти команды более подробно рассматриваются в следующих разделах блога.

Команда COMMIT

Фиксирует все изменения, внесенные в базу данных в ходе сеанса текущей транзакцией. После выполнения этой команды изменения становятся видимыми для других сеансов или пользователей. Синтаксис этой команды:

Ключевое слово WORK не обязательно — оно только упрощает чтение кода.

Ключевое слово COMMENT также не является обязательным; оно используется для задания комментария, который будет связан с текущей транзакцией. Текстом комментария дол­жен быть заключенный в одинарные кавычки литерал длиной до 50 символов. Обычно комментарии задаются для распределенных транзакций с целью облегчения их анализа и разрешения сомнительных транзакций в среде с двухфазовой фиксацией. Они хра­нятся в словаре данных вместе с идентификаторами транзакций.

После того как изменения будут закреплены, их откат становится невозможным.

Все команды в следующем фрагменте являются допустимыми применениями COMMIT :

Команда ROLLBACK

Команда ROLLBACK отменяет (полностью или частично) изменения, внесенные в базу данных в текущей транзакции. Для чего это может потребоваться? Например, для ис­правления ошибок:

«Нет, Нет! Я хотел удалить только те заказы, которые были сделаны до мая 2005 года!» Нет проблем — достаточно выполнить команду ROLLBACK. Что касается программиро­вания приложений, в случае возникновения проблем откат позволяет вернуться к ис­ходному состоянию.

Синтаксис команды ROLLBACK :

Все команды ROLLBACK в следующем фрагменте действительны :

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

Команда SAVEPOINT

Устанавливает в транзакции именованный маркер, позволяющий в случае необходи­мости выполнить откат до отмеченной точки сохранения. При таком откате отменяются все изменения и удаляются все блокировки после этой точки, но сохраняются изменения и блокировки, предшествовавшие ей. Синтаксис команды SAVEPOINT :

Команда SET TRANSACTION

Команда SET TRANSACTION позволяет начать сеанс чтения или чтения-записи, установить уровень изоляции или связать текущую транзакцию с заданным сегментом отката. Эта команда должна быть первой командой SQL транзакции и дважды использоваться в ходе одной транзакции не может. У нее имеются четыре разновидности.

Механизм сегментов отката считается устаревшим; вместо него следует использо­вать средства автоматического управления отменой, введенные в Oracle9i.

Команда LOCK TABLE

Команда блокирует всю таблицу базы данных в указанном режиме. Блокировка запре­щает или разрешает модификацию данных таблицы со стороны других транзакций на то время, пока вы с ней работаете. Синтаксис команды LOCK TABLE :

LOCK TABLE список_таблиц IN режим_блокировки MODE [NOWAIT];

Здесь список таблиц — список из одной или нескольких таблиц (локальных таблиц/пред- ставлений или доступных через удаленное подключение), а режим блокировки — один из шести режимов: ROW SHARE, ROW EXCLUSIVE, SHARE UPDATE, SHARE, SHARE ROW EXCLUSIVE, EXCLUSIVE.

Примеры допустимых команд LOCK TABLE :

Источник

Что такое commit sql

These statements provide control over use of transactions:

START TRANSACTION or BEGIN start a new transaction.

COMMIT commits the current transaction, making its changes permanent.

ROLLBACK rolls back the current transaction, canceling its changes.

SET autocommit disables or enables the default autocommit mode for the current session.

To disable autocommit mode implicitly for a single series of statements, use the START TRANSACTION statement:

START TRANSACTION permits several modifiers that control transaction characteristics. To specify multiple modifiers, separate them by commas.

The READ WRITE and READ ONLY modifiers set the transaction access mode. They permit or prohibit changes to tables used in the transaction. The READ ONLY restriction prevents the transaction from modifying or locking both transactional and nontransactional tables that are visible to other transactions; the transaction can still modify or lock temporary tables.

MySQL enables extra optimizations for queries on InnoDB tables when the transaction is known to be read-only. Specifying READ ONLY ensures these optimizations are applied in cases where the read-only status cannot be determined automatically. See Section 8.5.3, “Optimizing InnoDB Read-Only Transactions” for more information.

If no access mode is specified, the default mode applies. Unless the default has been changed, it is read/write. It is not permitted to specify both READ WRITE and READ ONLY in the same statement.

In read-only mode, it remains possible to change tables created with the TEMPORARY keyword using DML statements. Changes made with DDL statements are not permitted, just as with permanent tables.

For additional information about transaction access mode, including ways to change the default mode, see Section 13.3.7, “SET TRANSACTION Statement”.

If the read_only system variable is enabled, explicitly starting a transaction with START TRANSACTION READ WRITE requires the CONNECTION_ADMIN privilege (or the deprecated SUPER privilege).

Many APIs used for writing MySQL client applications (such as JDBC) provide their own methods for starting transactions that can (and sometimes should) be used instead of sending a START TRANSACTION statement from the client. See Chapter 29, Connectors and APIs, or the documentation for your API, for more information.

To disable autocommit mode explicitly, use the following statement:

After disabling autocommit mode by setting the autocommit variable to zero, changes to transaction-safe tables (such as those for InnoDB or NDB ) are not made permanent immediately. You must use COMMIT to store your changes to disk or ROLLBACK to ignore the changes.

autocommit is a session variable and must be set for each session. To disable autocommit mode for each new connection, see the description of the autocommit system variable at Section 5.1.8, “Server System Variables”.

BEGIN and BEGIN WORK are supported as aliases of START TRANSACTION for initiating a transaction. START TRANSACTION is standard SQL syntax, is the recommended way to start an ad-hoc transaction, and permits modifiers that BEGIN does not.

The AND CHAIN clause causes a new transaction to begin as soon as the current one ends, and the new transaction has the same isolation level as the just-terminated transaction. The new transaction also uses the same access mode ( READ WRITE or READ ONLY ) as the just-terminated transaction. The RELEASE clause causes the server to disconnect the current client session after terminating the current transaction. Including the NO keyword suppresses CHAIN or RELEASE completion, which can be useful if the completion_type system variable is set to cause chaining or release completion by default.

Beginning a transaction causes any pending transaction to be committed. See Section 13.3.3, “Statements That Cause an Implicit Commit”, for more information.

For best results, transactions should be performed using only tables managed by a single transaction-safe storage engine. Otherwise, the following problems can occur:

If you use tables that are not transaction-safe within a transaction, changes to those tables are stored at once, regardless of the status of autocommit mode.

If you issue a ROLLBACK statement after updating a nontransactional table within a transaction, an ER_WARNING_NOT_COMPLETE_ROLLBACK warning occurs. Changes to transaction-safe tables are rolled back, but not changes to nontransaction-safe tables.

You can change the isolation level or access mode for transactions with the SET TRANSACTION statement. See Section 13.3.7, “SET TRANSACTION Statement”.

Rolling back can be a slow operation that may occur implicitly without the user having explicitly asked for it (for example, when an error occurs). Because of this, SHOW PROCESSLIST displays Rolling back in the State column for the session, not only for explicit rollbacks performed with the ROLLBACK statement but also for implicit rollbacks.

When InnoDB performs a complete rollback of a transaction, all locks set by the transaction are released. If a single SQL statement within a transaction rolls back as a result of an error, such as a duplicate key error, locks set by the statement are preserved while the transaction remains active. This happens because InnoDB stores row locks in a format such that it cannot know afterward which lock was set by which statement.

If a SELECT statement within a transaction calls a stored function, and a statement within the stored function fails, that statement rolls back. If ROLLBACK is executed for the transaction subsequently, the entire transaction rolls back.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *