MySQL commit rollback

8138 ワード

1. commit & rollback

  • DCL : Data Control Language
  • コミット:操作結果を物理ディスクに保存します.動作正常完了
  • ロールバック:元のデータ状態に戻る
  • -- 테이블과 데이터 준비
    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;