[MSSQL] Delete문 사용법 & 예제(트랜잭션)

데이터베이스 MS_SQL Delete문 사용법 및 예제입니다. Delete문은 굉장히 위험한 명령어이므로 꼭 트랜잭션 안에서만 사용해주셔야 합니다. 처음 실무에 들어서서시는 분들이 가장 많이 실수 하는 경우가 바로 Update 와 Delete를 잘못 쓰는 경우라고 합니다. 특히 Delete문구에 실수로 Where절을 쓰지 않고 실행을 하게 되면 테이블에 있는 칼럼 모두가 삭제되는데 이런 큰 실수를 하게되면 되돌릴수도없고 바로 사직서를 써야하는 상황이 연출됩니다...... ㅠㅠㅠ 그러므로 먼저 Delete에 하기 앞서서 Select문으로 자신이 바꿔야할 데이터를 조회한뒤 꼭 트랜잭션 안에서 Delete문을 실행해주도록 합시다. 


트랜잭션이란? 

하나의 처리를 여러 단계로 다루는 기능을 트랜잭션(Transaction)이라고 합니다. 하나의 처리를 Commit이라는 명령어를 수행하기전 마지막으로 한번 더 확인할 수 있는 기회를 줌으로써 좀더 안정적인 데이터베이스 작업을 가능하게 합니다. 트랜잭션의 실행결과를 데이터베이스에 반영하는것을(Commit)이라고 하고 반영하기 전으로 되돌리는것을 롤백(RollBack)이라고 합니다.

BEGIN TRAN--트랜잭션 시작

ROLLBACK TRAN --트랜잭션 이전상태로 ROLL BACK

COMMIT TRAN --트랜잭션 완료


Delete(문법) 

DELETE FROM 테이블명

DELETE FROM 테이블명 WHERE 조건문


트랜잭션 + Delete

SELECT * FROM 테이블명 WHERE 조회할 칼럼 = '칼럼명' --컬럼의 존재 확인

BEGIN TRAN --트랜잭션 시작
DELETE FROM 테이블명 WHERE 조건문
SELECT * FROM 테이블명 WHERE 조건문 --나만 삭제된것을 확인할수 있고 아직 적용은 안되어있는 상태이다.
ROLLBACK TRAN -되돌리기 --Delete 취소
COMMIT TRAN --트랜잭션 완료 --Delete 적용
---------------------------------------------------------------------------------------------------
SELECT * FROM My_Table WHERE Nm_Kor = '홍길동' --홍길동 컬럼의 존재 확인

BEGIN TRAN --트랜잭션 시작
DELETE FROM My_Table WHERE Nm_Kor ='홍길동' --Km_Kor이 홍길동인 칼럼 삭제
SELECT * FROM My_Table WHERE NM_KOR = '홍길동'--나만 삭제된것을 확인할수 있고 아직 적용은 안되어있는 상태이다.
ROLLBACK TRAN -되돌리기
COMMIT TRAN --트랜잭션 완료


예제(Example) 

1. My_Table에서 Nm_Kor칼럼의 성이 김씨로 시작하는 사람 삭제

SELECT * FROM My_Table WHERE Nm_Kor LIKE '김%' --삭제할 데이터 조회

BEGIN TRAN --트랜잭션 시작
DELETE FROM My_Table WHERE Nm_Kor LIKE '김%' --데이터 삭제
SELECT * FROM My_Table WHERE Nm_Kor LIKE '김%' --삭제한 데이터 조회
COMMIT TRAN -- 트랜잭션 반영


2. My_Table에서 회사코드(COMPANY)가 '0327'이고 품목코드(ITEM)='400478','400614','400688'인 데이터 삭제

SELECT * FROM My_Table WHERE COMPANY ='0327' AND ITEM IN('400478','400614','400688')

BEGIN TRAN
DELETE FROM My_Table WHERE COMPANY ='0327' AND ITEM IN('400478','400614','400688')
SELECT * FROM My_Table WHERE COMPANY = '0327' AND ITEM IN('400478','400614','400688')
COMMIT TRAN

3. My_Table에서 회사코드(COMPANY)가 '0327'이고, 수량(QT)이 0이거나 100인 데이터 삭제

SELECT * FROM My_Table WHERE COMPANY ='0327' AND (QT = 0 OR QT = 100)

BEGIN TRAN
DELETE FROM My_Table WHERE COMPANY ='0327' AND (QT_SO = 0 OR QT_SO = 100)
SELECT * FROM My_Table WHERE COMPANY = '0327' AND (QT = 0 OR QT = 100)
COMMIT TRAN

4. My_Table에서 비고 할인(DC)이 NULL이 아니고 ID(ID)가 '5249'인 데이터 삭제

SELECT * FROM COMPANY DC IS NOT NULL AND ID ='5240'

BEGIN TRAN
DELETE FROM DC IS NOT NULL AND ID ='5240'
SELECT * FROM DC IS NOT NULL AND ID ='5240'
COMMIT TRAN


5. My_Table에서 공급금액(AM)이 2000000이상이고, 수정자(ID_UPDATE)가 NULL이고, 수정일자(DAY_UPDATE)가 NULL인 데이터 삭제

SELECT * FROM My_Table WHERE AM >= 2000000 AND ID_UPDATE IS NULL AND DAY_UPDATE IS NULL

BEGIN TRAN
DELETE FROM My_Table WHERE AM >= 2000000 AND ID_UPDATE IS NULL AND DAY_UPDATE IS NULL
COMMIT TRAN



[MS_SQL] Create Table, Alter Table, Drop Table(테이블 생성,수정,삭제)

[MS_SQL] Insert문 사용법 & 예제

[MS_SQL] Select문 사용법 & 예제

[MS_SQL] Update문 사용법 & 예제(트랜잭션)

[MS_SQL] JOIN의 종류설명 및 사용법 & 예제



댓글(0)

Designed by JB FACTORY