[sql] MERGE, TRANSACTION


MERGE

MERGE [ hint ]
  INTO [ schema. ] { table | view } [ t_alias ] -- INSERT되거나 UPDATE될 t/v
  USING { [ schema. ] { table | view } --비교할 t/v
  	| subquery
	} [ t_alias ]
	ON (조건) --INSERT되거나 UPDATE될 조건
----------------------------------------------
WHEN MATCHED THEN --조건을 만족하면/UPDATE, DELETE가능
UPDATE SET column = { 값1 | DEFAULT }
		[, column = { 값2 | DEFAULT } ]...
[ DELETE where_clause ]
----------------------------------------------
WHEN NOT MATCHED THEN --조건을 만족하지 않으면/INSERT
INSERT [ (column [, column ]...) ]
VALUES ({ 값1 [,2 ]... | DEFAULT })

TRANSACTION


トランザクションは、データベース内でグループとして処理する必要がある文を集約する論理ワークユニットです.
DML文はCOMMITを使わないと実用化できません!!!
🚨 必ずCOMMITになってから適用されますか?
いいえ.DDL、DCL運転時に自動的に発行されるので適用

🌠取引の開始


DML運転時

🌠取引の終了


COMMITまたはROLLBACKの実行
DDLまたはDCL文の実行
機械が故障したりシステムがクラッシュした場合
デッドロック発生
ユーザーが正常に終了

🌈自動COMMIT状況


DDL、DCL文の完了
SQL*Plusは正常にオフになっています

🌈自動ROLLBACK発生状況


SQL*Plus非正常クローズ
システム異常シャットダウン

AUTOCOMMIT

--현재 오토커밋 상태 확인
SHOW AUTOCOMMIT;

-- 오토커밋 ON으로 세팅
SET AUTOCOMMIT ON;
🚨 オートコミットモードがOFFであっても、DML運転後にDDL、DCLを実行した場合に自動コミットされます.
自動コミット後、ROLLBACKは実行できません.

SAVEPOINT / ROLLBACK TO


SAVEPOINT:取引タスクをセグメントに分割し、一部のROLLBACKを許可する
ROLLBACK TO:複数のSAVEPOINT内の特定のポイントを返す
INSERT INTO 테이블명(컬럼1, 컬럼2)
VALUES (1,2)

SAVEPOINT A;

SAVEPOINT
INSERT INTO 테이블명(컬럼1, 컬럼2)
VALUES (1,2)

SAVEPOINT B;

ROLLBACK TO A;