본문 바로가기
Database/SQLD

SQLD 문제 풀이 3

by KkingKkang 2023. 5. 10.

1. 아래와 같은 데이터 모델에서 데이터를 조작하려고 한다. 다음 중 오류가 발생하는 SQL 문장인 것은? 

BOARD_ID VARCHAR2(10) NOT NULL
BOARD_NM VARCHAR2(50) NOT NULL,
USE_YN VARCHAR2(1) NOT NULL,
REG_DATE DATE NOT NULL,
BOARD_DESC_VARCHAR2(100) NULL

체크사항 : 길이, 데이터 유형, NULL 허용 여부

--1
INSERT INTO BOARD VALUES (1, 'Q&A', 'Y', SYSDATE, 'Q&A 게시판');

--2
INSERT INTO BOARD (BOARD_ID, BOARD_NM, USE_YN, BOARD_DESC) VALUES ('100','FAQ','Y','FAQ 게시판');
--DATE 가 NOT NULL 이라서 오류가 발생한다.

--3
UPDATE BOARD SET USE_YN = 'N' WHERE BOARD_ID = '1';

--4
UPDATE BOARD SET BOARD_ID =  200 WHERE BOARD_ID = '100';

 

2. 아래 데이터 모델과 같이 고객과 주문 테이블이 생성되어 있으며, 고객과 주문 테이블에 입력되어 있는 데이터는 아래 표와 같다. 이 때 FK_001이라는 제약 조건을 아래 SQL과 같이 설정하였다. 다음 중 오류 없이 정상적으로 수행되는 SQL 2개를 고르시오.

고객

고객ID VARCHAR2(20) NOT NULL
고객명 VARCHAR2(20) NULL
가입일시 DATE NOT NULL

주문

주문번호 VARCHAR2(20) NOT NULL
고객ID VARCHAR2(20) NOT NULL (FK)
주문일시 DATE NOT NULL

주문데이터

주문번호(PK) 고객ID (FK) 주문일시
0001 C001 2013-12-24
0002 C001 2013-12-25
0003 C002 2013-12-25
0004 C002 2013-12-27

고객데이터

고객ID (PK) 고객명 가입일시
C001 홍길동 2013-12-12
C002 이순신 2013-12-13

ALTER TABLE 주문 ADD CONSTRAINT FK_001 FOREIGN KEY (고객ID)

REFERENCES 고객 (고객ID) ON DELETE SET NULL;

 

1) INSERT INTO 고객 VALUES('C003', '강감찬', '2014-01-01'); 
2) INSERT INTO 주문 VALUES('0005','C003','2013-12-28'); ▶  고객 테이블에 C003이 없으므로 오류가 남
3) DELETE FROM 주문 WHERE 주문번호 IN ('0001','0002'); ▶ 자식테이블에서의 삭제는 가능함
4) DELETE FROM 고객 WHERE 고객ID = 'C002'; ▶고객 아이디가 지워지면 주문 테이블에서 참고하고 있던 고객 아이디는 NULL이 되는 조건을 걸었는데, 주문 테이블의 고객 아이디는 NOT NULL 조건이므로 오류가 발생

 

3. 개발 프로젝트의 표준은 모든 삭제 데이터에 대한 로그를 남기는 것을 원칙으로 하고, 테이블 삭제의 경우는 허가된 인력만이 정기적으로 수행 가능하도록 정하고 있다. 개발팀에서 사용 용도가 없다고 판단한 STADIUM 테이블의 데이터를 삭제하는 가장 좋은 방법은 무엇인가?

1) DELETE FROM STADIUM;
2) DELETE * FROM STADIUM; DELETE는 *가 먹히지 않는다.
3) TRUNCATE TABLE STADIUM; 
4) DROP TABLE STADIUM; 

DELETE, DROP, TRUNCATE 중 LOG를 남길 수 있는 건 DELETE 뿐이다. (ROLLBACK 가능 여부)

DROP TRUNCATE DELETE
DDL DDL (일부 DML 성격 가짐) DML
ROLLBACK 불가 ROLLBACK 불가 COMMIT 이전 ROLLBACK 가능
AUTO COMMIT AUTO COMMIT 사용자 COMMIT
용량 모두 반환 테이블 최초 생성 시 용량만 남기고 모두 반환함 용량 반환 하지 않음
테이블의 정의 자체를 완전히 삭제함 테이블을 최초 생성된 초기 상태로 만듦 데이터만 삭제

 

4, 다음 중 아래와 같은 상황에서 사용할 수 있는 SQL 명령어는?

우리가 관리하는 데이터베이스의 "매출"테이블이 너무나 많은 디스크 용량을 차지하여 "매출" 테이블에서 필요한 데이터만을 추출하여 별도의 테이블로 옮겨 놓았다.

이후 "매출"원본 테이블의 데이터를 모두 삭제함과 동시에, 디스크 사용량도 초기화하고자 한다. (단, "매출"이라는 테이블의 스키마 정의는 유지한다.)

▶ TRUNCATE TABLE 매출

 

5. 다음 중 DELETE와 TRUNCATE, DROP 명령어에 대해 비교한 설명으로 가장 부적절한 것을 2개 고르시오

1) 특정 테이블에 대하여 WHERE 조건절이 없는 DELETE 명령을 수행하면 DROP TABLE 명령을 수행했을 때와 똑같은 결과를 얻을 수 있다.

→ 모든게 날아가는 DROP 과 구조를 남기고 데이터만 날리는 DELETE는 다름

2) DROP 명령어는 테이블 정의 자체를 삭제하고, TRUNCATE 명령어는 테이블을 초기상태로 만든다.

3) TRUNCATE 명령어는 UNDO를 위한 데이터를 생성하지 않기 때문에 동일 데이터랑 삭제시 DELETE 보다 빠르다.
    → UNDO는 실행 취소, LOG를 남기는 DELETE와 남기지 않는 TRUNCATE, DROP 

4) DROP은 Auto Commit이 되고, DELETE와  TRUNCATE는 사용자 COMMIT으로 수행된다. 
     → DELETE만 사용자 COMMIT, DROP과 TRUNCATE는 AUTO COMMIT

 

6. 데이터베이스 트랜잭션에 대한 설명으로 가장 부적절한 것을 2개 고르시오.

1) 원자성 (automicity) : 트랜잭션에서 정의된 연산들을 모두 성공적으로 실행되던지 아니면 전혀 실행되지 않은 상태로 남아 있어야 한다. (all or nothing)

2) 일관성 (consistency) : 트랜잭션이 성공적으로 수행되면 그 트랜잭션이 갱신한 데이터베이스의 내용은 영구적으로 저장된다. → 지속성

3) 고립성(isolation) : 트랜잭션이 실행되는 도중에 다른 트랜잭션의 영향을 받아 잘못된 결과를 만들어서는 안된다.

4) 지속성(durability) : 트랜잭션이 실행 되기 전의 데이터베이스 내용이 잘못 되어 있지 않다면 트랜잭션이 실행된 이후에도 데이터베이스의 내용에 잘못이 있으면 안된다. → 일관성

ACID

 

7. 데이터베이스 트랜잭션에 대한 격리성이 낮은 경우 발생할 수 있는 문제점으로 가장 부적절한 것을 2개 고르시오.

1) Dirty Read : 다른 트랜잭션에 의해 수정되었고 이미 커밋된 데이터를 읽는 것을 말한다. → 아직 커밋되지 않은 데이터

2) Non-Repeatable Read : 한 트랜잭션 내에서 같은 쿼리를 두 번 수행했는데, 그 사이에 다른 트랜잭션이 값을 수정 또는 삭제하는 바람에 두 쿼리 결과가 다르게 나타나는 현상을 말한다. → 일관성에 어긋남

3) Phantom Read : 한 트랜잭션 내에서 같은 쿼리를 두 번 수행했는데, 첫번째 쿼리에서 없던 유령 레코드가 두 번째 쿼리에서 나타나는 현상을 말한다.

4) isolation : 트랜잭션이 실행되는 도중에 다른 트랜잭션의 영향을 받아 잘못된 결과를 만들어서는 안된다.  

▶ 1, 4 ?

 

8. 테이블 A에 대해 아래와 같은 SQL을 수행하였을 때 테이블 A의 ID '001'에 해당하는 최종 VAL 의 값이 ORACLE에서는 200, SQL SERVER에서는 100이 되었다. 다음 설명 중 가장 부적절한 것은? (AUTO COMMIT = FALSE)

테이블A

ID(PK) VAL
001 100
002 200
UPDATE A SET VAL = 200 WHERE ID = '001';

CREATE TABLE B (ID CHAR(3) PRIMARY KEY);

ROLLBACK;

1) ORACLE 에서는 CREATE TABLE 문장을 수행한 후, 묵시적으로 COMMIT이 수행되어 VAL 값은 200이 되었다.
    → 오라클은 AUTO COMMIT 이 FALSE더라도 DDL 문장 수행 후 자동으로 COMMIT 이 수행됨.

2) SQL SERVER에서는 ROLLBACK 문장에 의해 UPDATE가 취소되어 VAL 값은 100이 되었다.
   → SQL SERVER은 DDL 문장 수행 후 자동으로 COMMIT 해주지 않음

3) ORACLE에서는 CREATE TABLE 문장 수행에 의해 VAL 값은 200 되었지만, ROLLBACK 실행으로 인하여 최종적으로 B테이블은 생성되지 않았다. → B 테이블 생성됨

4) SQL SERVER에서는 ROLLBACK 실행으로 인하여 UPDATE가 취소되었으며, 최종적으로 B테이블은 생성되지 않았다.

 

9. ㄱ,ㄴ,ㄷ 에 해당하는 단어를 순서대로 작성하시오.

(ㄱ) 은 데이터베이스의 논리적 연산단위로서 밀접히 관련되어 분리될 수 없는 한 개 이상의 데이터베이스 조작을 가리킨다.

(ㄱ) 의 종료를 위한 대표적 명령어로서는 데이터에 대한 변경사항을 데이터베이스에 영구적으로 반영하는 (ㄴ) 과 데이터에 대한 변경사항을 모두 폐기하고 변경 전의 상태로 되돌리는 (ㄷ)이 있다.

ㄱ) 트랜잭션

ㄴ) COMMIT

ㄷ) ROLLBACK

반응형

'Database > SQLD' 카테고리의 다른 글

SQLD 문제 풀이 6  (0) 2023.05.15
SQLD 문제 풀이 5  (1) 2023.05.13
SQLD 문제 풀이 4  (0) 2023.05.11
SQLD 문제풀이 2  (0) 2023.05.10
SQLD 문제풀이 1  (0) 2023.05.08

댓글