-- 사용자 계정 생성
CREATE USER super@localhost IDENTIFIED BY 'password';
-- super, 사용자 계정
-- password, 사용자 비밀번호
> CREATE USER super@localhost IDENTIFIED BY 'password';
Query OK, 0 rows affected (0.01 sec)
-- 사용자 계정 생성 후 정보 확인
SHOW GRANTS FOR super@localhost;
-- USAGE, 접속 권한을 의미
-- 현재 super에게는 접속권한만 주어진 상태
> SHOW GRANTS FOR super@localhost;
+--------------------------------------------+
| Grants for user@localhost |
+--------------------------------------------+
| Grants USAGE ON *.* TO 'super'@'localhost' |
+--------------------------------------------+
1 row in set (0.00 sec)
-- 사용자 계정 제거
DROP USER super@localhost;
GRANT ALL ON *.* TO 'super'@'localhost' WITH GRANT OPTION;
> SHOW GRANTS FOR super@localhost;
+----------------------------------------------------------------------+
| Grants for user@localhost |
+----------------------------------------------------------------------+
| Grants ALL PRIVILEGES ON *.* TO 'super'@'localhost' WITH GRANT OPTION|
+----------------------------------------------------------------------+
1 row in set (0.00 sec)
-- super 유저가 biz라는 DATABASE에 대해 SELECT & UPDATE 권한만을 주는 경우
GRANT SELECT, UPDATE ON biz* TO super;
-- 이 경우 super라는 사용자는 biz 데이터베이스의 모든 테이블에 대해 데이터를 삽입하거나 삭제할 수 없다
다만 조회와 갱신만 가능
REVOKE ALL ON *.* FROM super@localhost;
1. 내 계좌에서 100원을 인출
2. 상대방 계좌에 100원을 입금
- 계좌 이체 과정은 최소 2번의 작업을 필요 (두 개의 작업을 하나로 해서 '인출하고 입금'한다는 작업 단위 정의 가능
이는 해당 작업을 하나의 문장으로 표현한것이지 결코 하나의 조작이 될 수 없다)
- 두 개의 작업 도중에 문제가 발생했다면, 즉 1번이나 2번 조작이 실패했다면 어떤 결과가 발생할까?
상대방 계좌에 근거 ㅇ벗는 100원이 나타나거나, 내 계좌에서 100원이 사라지는 현상 발생
- 이러한 문제를 예방하기 위해 트랜잭션을 사용
즉, 트랜잭션은 연관된 다수의 작업을 하나의 단위로 묶어서 하나의 단위가 바로 '분해할 수 없는 최소단위'가 되는 것
- 데이터베이스에서 '일관성'은 상태가 항상 같아야 함을 의미
상태라는 것은 이전에 오류가 있었다면 이후에도 오류가 있어야 하며,
이전에 오류가 없었다면 이후에도 오류가 없어야 함을 의미
- 오류가 없는 상태를 '무결성'이라 함
'무결성'은 '정확성', '일관성', '유일성', '신뢰성' 았는 상태를 한 번에 표현 하는 것
- 트랜잭션
언제 어떠한 형태의 실패에도 안전한 거래를 보장하는 수단
DBMS의 모든 정보는 하드디스크에 저장
DBMS에서 이루어진 모든 조작 또는 연산은 메모리에서 이루어진다
하드디스크에 있는 정보를 메모리로 옮겨서 연산을 수행
적당한 시점에서 메모리 정보를 하드디스크로 옮긴다
TCL 명령어의 메모리 관점 동작
-----------------------------------------------------------------------
순서 명령문 비고
-----------------------------------------------------------------------
1 트랜잭션 시작
-----------------------------------------------------------------------
2 INSERT
-----------------------------------------------------------------------
3 SAVEPOINT A A라는 이름으로 복구 지점 설정
-----------------------------------------------------------------------
4 UPDATE
-----------------------------------------------------------------------
5 SAVEPOINT B B라는 이름으로 복구 지점 설정
-----------------------------------------------------------------------
6 DELETE
-----------------------------------------------------------------------
7 (현재 위치에서 ROLLBACK 예정) 복구 지점 사용에 따라 결과 달라짐
-----------------------------------------------------------------------
-- MY-SQL에서 AUTO COMMIT 설정 여부 확인 명령어
SELECT @@AUTOCOMMIT
-- AUTOCOMMIT 설정 명령어, 1이 나오면 정상적으로 설정
SET AUTOCOMMIT = TRUE; -- AUTO COMMIT 설정
SET AUTOCOMMIT = FALSE; -- AUTO COMMIT 해제
----------------------------------------------------------------------------------------------------
위치 트랜잭션 제어 SQL문
----------------------------------------------------------------------------------------------------
1 | START TRANSACTION;
2 | savepoint a;
3 | INSERT INTO 'salaries'(emp_no, salary, from_date, to_date) VALUES (1001, 900, ...);
4 | savepoint b;
5 | UPDATE salaryes set salary = 1000 where emp_no = 1001;
6 | rollback to b;
7 | rollback to a;