MySQL commit rollback
8138 ワード
1. commit & rollback
-- 테이블과 데이터 준비
DESC phonebook;
SELECT * FROM phonebook ;
DROP TABLE IF EXISTS phonebook;
CREATE TABLE phonebook(
id int PRIMARY KEY AUTO_INCREMENT,
name varchar(80) NOT NULL,
phonenum varchar(20) DEFAULT '010-0000-0000',
email varchar(100),
regdate datetime DEFAULT now()
);
INSERT INTO phonebook (name, phonenum, email)
VALUES
('아이언맨', '111-111-1111', '[email protected]')
, ('캡틴아메리카', '222-222-2222', '[email protected]')
, ('토르', '3333-3333-333', '[email protected]')
;
-- 기본적으로 MySQL 은 auto-commit 이다
-- DML 은 실행 즉시 물리적인 데이터에 반영된다.
-- MySQL 은 기본적으로 auto commit 이다.
-- commit 을 사용하려면 auto commit 부터 비활성화 해야 한다.
SELECT @@autocommit; -- 현재 auto COMMIT 활성화 여부. 1:활성화, 00:비활성화
SET @@autocommit = 0; -- auto COMMIT 비활성화
SELECT * FROM phonebook;
DELETE FROM phonebook WHERE id > 20;
-- rollback 하기 전까진, 마지막으로 commit 한 지점으로의 복구 가능하다.
ROLLBACK;
INSERT INTO phonebook (name, phonenum, email)
VALUES ('헐크', '4444-4444', '[email protected]');
SELECT * FROM phonebook;
SAVEPOINT A; -- A 라는 이름의 SAVEPOINT 지정. 나중에 A 지점으로 ROLLBACK 가능
UPDATE phonebook SET name = '블랙위도우' WHERE name = '캡틴아메리카';
SAVEPOINT B;
SELECT * FROM phonebook;
DELETE FROM phonebook WHERE regdate < '2022-03-19';
SELECT * FROM phonebook;
ROLLBACK TO SAVEPOINT B;
ROLLBACK TO SAVEPOINT A;
SELECT * FROM phonebook;
COMMIT; -- 모든 동작 마무리후에는 COMMIT 하여 dB에 저장.
SET @@autocommit = 1;
Reference
この問題について(MySQL commit rollback), 我々は、より多くの情報をここで見つけました https://velog.io/@plily93/MySQL-commit-rollbackテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol