티스토리 뷰
MS-SQL은 기본 설정이 AUTO_COMMIT으로 되어있습니다.
INSERT, UPDATE, DELETE 등 명령어를 사용할 때 COMMIT 명령어를 입력할 필요가 없습니다.
그렇기 때문에 UPDATE, DELETE 쿼리 수행 중 실수를 하게 된다면... 지옥을 경험할 수도 있습니다.. ㅠㅠ
예를 들어서 MEMBER라는 테이블이 있다고 가정하겠습니다. 멤버 테이블의 회원 삭제는 이력을 남기기 위해서 소프트 delete처리를 합니다. 이런일이 생기면 안되겠지만, 쿼리를 사용하여 회원을 삭제한다고 가정하겠습니다.
UPDATE MEMBER
SET DELETED = 1
WHERE MEMBER_SEQ = 1;
위와 같이 정상적으로 작성하면 좋겠지만, 우리는 사람이라 가끔 실수를 하곤 합니다.
UPDATE MEMBER
SET DELETED = 1;
WHERE MEMBER_SEQ = 1;
뭐가 잘못됐는지 확인이 되시나요??
생각만해도 지옥문에 들어가기 전이네요...
쿼리는 진짜 아무리 숙련된 사람이라도 실수할 수 있기 때문에 조심해야 한다고 생각합니다.
이럴 때 MS-SQL에서는 BEGIN TRAN이라는 명령어를 제공합니다.
BEGIN TRAN
UPDATE MEMBER
SET DELETED = 1
WHERE MEMBER_SEQ = 1;
이렇게 사용하고
SELECT * FROM MEMBER
WHERE MEMBER_SEQ = 1;
위와 같이 검증 쿼리로 확인하여,
정상이라면 COMMIT TRAN; 으로 내용을 반영해주면 됩니다.
반대로 잘못 반영되었을 땐
ROLLBACK TRAN;으로 트렉젝션을 롤백하면 됩니다.
BEGIN TRAN을 사용하고는 꼭! COMMIT TRAN 이나 ROLLBACK TRAN을 사용해줘야 합니다.
만약 잊고, 사용하지 않았다면.. TRANSACTION이 계속 잡혀 있는 상태여서 DB가 정상 동작하지 않습니다.
검증하는 시간도 그만큼 길면 안되겠지요.
TRANSACTION이란 DB에서 상태를 변경하기 위해 수행하는 작업의 단위를 뜻합니다.
SELECT, UPDATE, INSERT, DELETE 등의 명령어를 통해 상태를 변경할 때의 작업 단위라고 생각하면 됩니다,
MS-SQL을 사용하는 사용자분들은 위 명령어를 꼭 숙지하시면 좋을 것 같습니다.
'DB > RDB' 카테고리의 다른 글
[ORACLE] multiple row update (0) | 2019.10.24 |
---|---|
mybatis invalid comparison: java.util.ArrayList and java.lang.String (0) | 2019.08.16 |
[MSSQL] multiple row update (0) | 2019.05.28 |
[MSSQL] 다른 데이터베이스 데이터 복사 (0) | 2019.05.17 |
MS-SQL 버전 확인 (0) | 2019.04.17 |
- Total
- Today
- Yesterday
- multiple row update
- Slack
- spring-boot-starter-data-redis
- effectivejava
- 뱅크샐러드
- 그레이들
- update set multiple
- 슬랙 /
- update query mutiple row
- update query multi row
- 슬랙
- gradle
- SpringBoot
- update query set multiple
- 다중 업데이트
- visual studio code
- 슬랙봇
- springboot https
- MSSQL
- update set multi
- 이것이 자바다
- 이펙티브자바
- java
- 뱅셀 유전자
- update query
- vue.js
- 업데이트 쿼리
- 뱅크샐러드 유전자
- 몽고DB 완벽가이드
- 싱글턴
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |