-
초급 (6)UPDATE, commit, rollback, CREATE AS SELECT, WHERE 1=2;, DELETE, TRUNCATE, rollback&logDB/SQL 2023. 2. 10. 19:37
---
https://youtube.com/playlist?list=PLyQR2NzLKOCb-i7xCOQVU_yomhvHRteDy
이거 보는 중
---
(15/28)
댓글Q : select문으로 먼저 조회하고 난 뒤에 맨 위에 update 문 쓰고 where절은 select 쿼리에서 조회한 걸로 그대로 복붙해서 쿼리 날리는 게 제일 안전 할 것 같네요 !
댓글A : 네~ 저도 그런식으로 많이 합니다!!
시작
저 null값들을 채워주도록 해볼게
이런식
, 로 컬럼 추가하면 동시에 여러개 update가능
SET REAL_NAME ='예슈화', SNS-INFO='V LIVE,인스타그램' WHERE~
이런식
여기서 끝내면 완벽하게 완료가 되지 않음, CUD 같은 DML문은 commit을 쳐줘야 한다
commit을 쳐주지 않으면 이 세션에 데이터들이 업데이트 된것 처럼 보이는데 다른 세션으로 들어왔을 땐 이게 보이지가 않아. 영구적인게 아니라서 날아가게 됨
이제 다른 세션으로 들어와도 데이터가 보이게 되는 것
만약에 update를 치다가 실수로 where절을 빠뜨릴 수가 있는데,
UPDATE IDOL_MEMBER SET REAL_NAME='조미연';
테이블에 있는 전체 데이터들이 전부 업데이트가 되는 것
이럴 땐 당황하지 않고 ROLLBACK 명령어를 쳐주면
다시 기존의 데이터로 돌아감
▽이 세션에서만 바뀌고, commit이 이걸 디스크에 보내는거겠지?
---
(16/28)
DELETE, TRUNCATE
DELETE하기 전에는 테이블을 COPY를 떠놓고 COPY테이블을 갖고 테스트를 해본다
카피하는 법은 CREATE TABLE IDOL_GROUP_COPY 여기에다가 SELECT * FROM IDOL_GROUP;의 결과를 그대로 담으려고 한다
그렇게 하려면 AS를 써주는데
이렇게 하면 그대로 복사가 된다. 근데 CREATE TABLE ~ AS SELECT로 복사한건 PK, FK, Index같은 테이블의 속성값은 복사 되지 않는다
또 CREATE TABLE ~ AS SELECT는 WHERE을 넣어서 넣고 싶은 데이터만 골라 넣을 수도 있다
데이터 다 필요없고 테이블 구조만 가져가고 싶으면 CREATE TABLE ~ AS SELECT ~ WHERE 1=2; 라고 쓰면 된다. 조건이 무조건 거짓이 되기 때문에
▽WHERE절에 변수를 놓고 레코드 마다의 값을 변수에 넣어서 참거짓 연산을 하는건가 보네 참이면 출력하고
DELETE는 데이터가 삭제됨
DELETE FROM IDOL_GROUP_COPY; 보통은 DELETE에 WHERE절이 안오는건 없다
ROLLBACK;하면 돌아옴
DELETE FROM IDOL_GROUP_COPY WHERE GROUP_NAME='Wanna One';
여러개
DELETE FROM IDOL_GROUP_COPY; 처럼 모든 데이터를 날리고 싶을 때, DELETE 명령이랑 비슷한 기능을 하는 명령어도 있다
TRUNCATE TABLE IDOL_GROUP_COPY; 이렇게 하면 저거랑 똑같이 데이터가 다 없어진다
차이점은 DELETE나 UPDATE나 모든 명령어들은 DB내에서 로그를 쌓게 돼 있는데, 더 깊이 들어가면 영역이 undo, redo이렇게 나뉘어지게 되는데, 자세한건 다음에 또 설명하고
어쨌든 모든 쿼리를 날렸을 땐 로그에 쌓이게 된다.
근데 TRUNCATE는 로그를 쌓지 않는다
상식적으로 생각을 해보면 데이터가 되게 많은 테이블이 있다.
그럼 DELETE보다 로그를 쌓지 않고 데이터를 날려버리는 TRUNCATE가 빠르겠지? ROLLBACK할 필요가 전혀 없는 데이터다. 확실하게 날려도 된다고 확신이 있을 땐 그냥 바로 TRUNCATE를 해주는 것
로그를 쌓지 않기 때문에 TRUNCATE는 ROLLBACK도 되지 않는다 = 신중하게 날려야 하는 명령어다.
▽ROLLBACK을 로그를 보고 하는건가보네?
댓글 :
TOAD, PL/SQL developer, 오렌지도 많이 사용한다
컬럼 삭제는 ALTER TABLE 테이블명 DROP COLUMN 컬럼명;
테이블 삭제는 DROP TABLE TABLENAME;
'DB > SQL' 카테고리의 다른 글
초급 (8)SYNONYM&오류가능성, 계정 개념, 정규화, 반정규화 (0) 2023.02.11 초급 (7)NVL(+컬럼추가시주의), NULLIF, COALESCE, 엑셀데이터import, UNION & UNION ALL, SORT를 발생시키는 명령어 (0) 2023.02.11 스피드퀴즈 (0) 2021.11.19 초급 (5)INNER JOIN, OUTER JOIN, COUNT&GROUP BY, OUTER JOIN, ANSI JOIN (0) 2021.09.02 초급 (4)SELECT, SELECT 1;, GROUP BY(강제사항), Group Function, SELECT 1;, INSERT, '', ORDER BY (0) 2021.08.27