오늘은 DML(Data Manipulation Language)의 데이터를 수정하고 삭제하는 두 가지 명령어인 UPDATE와 DELETE에 대해 알아본다.
UPDATE 문법
`UPDATE MEMBER SET PWD='111';` 이 구문은 MEMBER 테이블에서 PWD 컬럼의 값을 모두 111로 변경하겠다는 의미이다.
※ WHERE 절이 없을 경우, 테이블 내 모든 레코드가 수정된다. 따라서 특정 레코드만 수정하고자 할 때는 반드시 WHERE 조건을 추가해야 한다.
UPDATE문 실습
현재 모든 유저의 PWD는 111이다. 그래서 패스워드를 222로 업데이트 할 때 UPDATE MEMBER SET PWD='222'; 명령어를 실행하면 테이블의 모든 PWD 값이 222로 변경된다. 하지만 모든값이 222로 변경되는 문제가 발생한다. 만약 회원 수가 수십만 명에 이른다면, 의도하지 않은 대규모 데이터 변경이 발생할 수 있다.
그래서 UPDATE 문을 사용할 때, 특정 레코드만 변경하기 위해 WHERE 절을 반드시 포함해야 한다. 예를 들어, 특정 사용자 dragon의 비밀번호를 다시 111로 변경하고자 할 때 WHERE 절을 사용하여 원하는 사용자에 대한 조건을 지정한다. `UPDATE MEMBER SET PWD='111' WHERE ID='dragon';`와 같이 ID가 dragon인 사용자의 PWD 값을 111로 변경한다.
여러 컬럼을 수정할 때는 각 컬럼을 SET 절에 콤마(,)로 구분하여 나열하면 된다. 예를 들어, dragon 유저의 PWD 값을 333으로, NAME 값을 손오공으로 변경하려면 `UPDATE MEMBER SET PWD='333', NAME='손오공' WHERE ID='dragon';`와 같은 쿼리를 사용하면된다.
주의사항
앞의 내용을 실습중에 SELECT 문을 실행해도 데이터가 조회되지 않는 문제가 발생할 수도 있다. 오라클 데이터베이스에서 동일한 계정을 사용하여 두 개의 SQL Developer 창을 열어서 확인해보면 왼쪽 창에서는 SELECT 문을 통해 데이터가 정상적으로 조회되지만, 오른쪽 창에서는 동일한 SELECT 문을 실행해도 데이터가 조회되지 않는 문제가 발생한다. 이것은 오라클 데이터베이스의 트랜잭션 관리와 세션 처리 방식 때문에 발생하는 상황이다.
세션 관리: 오라클 서버는 같은 계정을 사용하더라도 접속한 세션을 별도로 관리한다. 즉, 동일한 계정이라도 각 세션은 독립적으로 데이터를 처리할 수 있다.
트랜잭션의 중요성: 오라클에서는 트랜잭션이라는 개념이 매우 중요한 역할을 한다. 데이터 변경 작업`(INSERT, UPDATE, DELETE 등)`이 발생하면 해당 작업은 트랜잭션으로 관리되며, 트랜잭션이 커밋(COMMIT)되기 전까지는 해당 세션에서만 변경된 내용을 볼 수 있다. 다른 세션에서는 커밋이 이루어지지 않은 데이터를 조회할 수 없다.
커밋과 롤백: 변경된 데이터가 모든 세션에서 보이게 하려면 COMMIT 명령어를 사용하여 트랜잭션을 완료해야 한다. 반대로, 작업을 취소하고 싶다면 ROLLBACK 명령어를 사용하여 변경 사항을 되돌릴 수 있다.
DELETE문 실습
`DELETE FROM MEMBER WHERE ID='test';`문을 사용하여 특정 데이터를 삭제한다. 특정 데이터를 삭제할 때는 반드시 WHERE 절을 사용하여 조건을 명확히 지정해야 한다. DELETE 문에서 WHERE 절이 없다면, 해당 테이블의 모든 데이터가 삭제될 수 있다. 그리고 데이터베이스에서는 문자열 값 비교 시 대소문자를 구분한다. 예를 들어 ID='TEST'라고 할 경우, 소문자 test는 해당되지 않아 삭제되지 않는다. 따라서 문자열을 비교할 때는 입력된 값의 대소문자를 정확하게 맞춰야 한다.
참고자료
[1] 유튜브 채널 뉴렉처 - 데이터 조작하기 #2 (UPDATE/DELETE)
'💾 Database > Oracle' 카테고리의 다른 글
[오라클] 11.산술 연산자 (0) | 2024.09.14 |
---|---|
[오라클] 10.트랜잭션 처리(Commit, Rollback) (0) | 2024.09.10 |
[오라클] 8.DML(Select, Insert) (0) | 2024.09.09 |
[오라클] 7.ALTER(수정, 삭제, 추가) (0) | 2024.08.31 |
[오라클] 6.SQL 데이터 타입(숫자형) (0) | 2024.08.31 |