Loading...
MySQL 9.5 Reference Manual 9.5의 15.3.3 Statements That Cause an Implicit Commit의 한국어 번역본입니다.
아래의 경우에 피드백에서 신고해주신다면 반영하겠습니다.
감사합니다 :)
이 절에 나열된 statement(및 그 동의어)는, statement를 실행하기 전에 COMMIT을 수행한 것처럼, 현재 세션에서 활성 상태인 모든 트랜잭션을 암묵적으로 종료합니다.
이러한 statement의 대부분은 실행 후에도 암묵적인 commit을 발생시킵니다. 이는 각 statement를 자체적인 특별한 트랜잭션에서 처리하기 위한 의도입니다. 트랜잭션 제어 및 잠금 statement는 예외입니다. 실행 전에 암묵적인 commit이 발생한 경우, 실행 후에는 다시 발생하지 않습니다.
ALTER EVENT,
ALTER FUNCTION,
ALTER PROCEDURE,
ALTER SERVER,
ALTER TABLE,
ALTER TABLESPACE,
ALTER VIEW,
CREATE DATABASE,
CREATE EVENT,
CREATE FUNCTION,
CREATE INDEX,
CREATE PROCEDURE,
CREATE ROLE,
CREATE SERVER,
CREATE SPATIAL REFERENCE SYSTEM,
CREATE TABLE,
CREATE TABLESPACE,
CREATE TRIGGER,
CREATE VIEW,
DROP DATABASE,
DROP EVENT,
DROP FUNCTION,
DROP INDEX,
DROP PROCEDURE,
DROP ROLE,
DROP SERVER,
DROP SPATIAL REFERENCE SYSTEM,
DROP TABLE,
DROP TABLESPACE,
DROP TRIGGER,
DROP VIEW,
INSTALL PLUGIN,
RENAME TABLE,
TRUNCATE TABLE,
UNINSTALL PLUGIN.CREATE TABLE 및
DROP TABLE statement는 TEMPORARY 키워드가 사용된 경우에는 트랜잭션을 commit하지 않습니다. (이는 ALTER TABLE 및 CREATE INDEX와 같이 commit을 유발하는 temporary table에 대한 다른 작업에는 적용되지 않습니다.)
그러나 암묵적인 commit이 발생하지는 않지만, 해당 statement 역시 rollback할 수 없기 때문에, 이러한 statement의 사용은 트랜잭션의 원자성이 위반되도록 합니다. 예를 들어, CREATE TEMPORARY TABLE을 사용한 다음 트랜잭션을 rollback하면, 해당 table은 여전히 존재합니다.
InnoDB에서 CREATE TABLE statement는 하나의 트랜잭션으로 처리됩니다. 이는 사용자가 수행한 ROLLBACK이, 해당 트랜잭션 동안 사용자가 수행한 CREATE TABLE statement를 되돌리지 못한다는 것을 의미합니다.
CREATE TABLE ... SELECT은 non-temporary table을 생성할 때, statement가 실행되기 전과 후에 암묵적인 commit을 발생시킵니다. (CREATE TEMPORARY TABLE ... SELECT에 대해서는 commit이 발생하지 않습니다.)
mysql database의 table을 암묵적으로 사용하거나 수정하는 statement.
ALTER USER,
CREATE USER,
DROP USER,
GRANT,
RENAME USER,
REVOKE,
SET PASSWORD.
트랜잭션 제어 및 잠금 statement.
BEGIN,
LOCK TABLES, SET autocommit = 1 (값이 이미 1이 아닌 경우),
START TRANSACTION,
UNLOCK TABLES.
UNLOCK TABLES는, 현재 LOCK TABLES를 사용하여 비트랜잭션 테이블 잠금을 획득한 table이 있는 경우에만 트랜잭션을 commit합니다. FLUSH TABLES WITH READ LOCK에 이어지는 UNLOCK TABLES에서는 commit이 발생하지 않습니다. 이는 후자의 statement가 테이블 수준 잠금을 획득하지 않기 때문입니다.
트랜잭션은 중첩될 수 없습니다. 이는 START TRANSACTION statement 또는 그 동의어를 실행할 때, 현재 트랜잭션에 대해 수행되는 암묵적 commit의 결과입니다.
암묵적 commit을 발생시키는 statement는 트랜잭션이 ACTIVE 상태인 동안에는 XA 트랜잭션에서 사용할 수 없습니다.
BEGIN statement는 BEGIN ... END 복합 statement를 시작하는 BEGIN 키워드의 사용과는 다릅니다. 후자는 암묵적인 commit을 발생시키지 않습니다. Section 15.6.1, “BEGIN ... END Compound Statement”를 참조하십시오.
데이터 로딩 statement. LOAD DATA.
LOAD DATA는 NDB 스토리지 엔진을 사용하는 table에 대해서만 암묵적인 commit을 발생시킵니다.
관리용 statement. ANALYZE TABLE,
CACHE INDEX,
CHECK TABLE,
FLUSH,
LOAD INDEX INTO CACHE,
OPTIMIZE TABLE,
REPAIR TABLE,
RESET (단,
RESET PERSIST는 제외).
복제 제어 statement.
START REPLICA,
STOP REPLICA,
RESET REPLICA,
CHANGE REPLICATION SOURCE TO.
15.3.2 Statements That Cannot Be Rolled Back
15.3.4 SAVEPOINT, ROLLBACK TO SAVEPOINT, and RELEASE SAVEPOINT Statements