표를 만들고, 행을 넣고 고치고 지우고, 권한을 주는 문장이다. 결과를 세는 장이 아니라 문장을 정확히 적는 장이다
왜 이걸 하나 — 조회보다 적게 나오지만 외우면 확실한 5점이다. 계산도 함정도 없다.
11회분 220문항 중 이 장의 기출은 6문항이다. DELETE 작성(2023-1회), INSERT 작성과 DROP 옵션(2023-2회), INSERT · SELECT · UPDATE 빈칸(2024-2회), 외래키 제약 빈칸(2026-1회), CHECK 제약(2026-2회). 회차로 보면 11회 중 5회에 나왔고, 2026년에는 두 회 연속으로 제약 조건이 나왔다.
| 꼴 | 몇 문항 | 무엇을 적나 | 보기 |
|---|---|---|---|
| 문장 작성 | 2 | DELETE · INSERT 한 문장 전부 | 2023-1회 13번 · 2023-2회 1번 |
| 키워드 빈칸 | 3 | VALUES · SET · CONSTRAINT · FOREIGN · REFERENCES · CHECK | 2024-2회 3번 · 2026-1회 18번 · 2026-2회 19번 |
| 옵션 용어 | 1 | CASCADE | 2023-2회 2번 |
→ 여섯 문항의 정답에 나온 키워드를 다 모아도 12개다. VALUES · SELECT · FROM · SET · DELETE · INSERT · CONSTRAINT · FOREIGN · KEY · REFERENCES · CHECK · CASCADE. 이 장은 그 12개에 아직 안 나온 짝(GRANT · REVOKE · ALTER · CREATE VIEW · INDEX · COMMIT · ROLLBACK)을 더해 한 벌로 만든다.
2회에서 SQL 이 약했다면 이 장은 가장 빨리 메워지는 자리다. 문장의 꼴이 정해져 있어 여섯 문장을 백지에 적을 수 있으면 끝나고, 03절이 그 여섯을 한 줄씩 세운다.
문항 수는 이 노트의 문제 데이터에서 ch=E09 인 것을 센 값이다(2026-09-14). 2026-1회 18번의 제약 이름과 참조 열은 복원본마다 달라 그랜드라이프 복원(TEAM_TF · TEAM_ID2)을 따랐다.
왜 이걸 하나 — 시험 전날 이 절의 문장 6개를 백지에 적어 본다.
INSERT INTO 표(열1, 열2) VALUES (값1, 값2); 열 목록을 빼면 표의 열 순서대로 전부 준다. 문자열은 작은따옴표, 숫자는 그대로.UPDATE 표 SET 열 = 값 WHERE 조건; SET 이 키워드다. INTO 나 FROM 을 쓰면 틀린다. WHERE 를 빼면 전부 바뀐다.DELETE FROM 표 WHERE 조건; 열 이름을 적지 않는다. WHERE 를 빼면 전부 지워지고 표는 남는다.CREATE TABLE 표 (열 자료형 [NOT NULL | PRIMARY KEY | UNIQUE | CHECK(조건) | DEFAULT 값], …, FOREIGN KEY (열) REFERENCES 부모표(열)); 제약에 이름을 붙이려면 앞에 CONSTRAINT 이름.ALTER TABLE 표 ADD 열 자료형; · ALTER TABLE 표 DROP COLUMN 열; · DROP TABLE 표; · DROP VIEW 뷰 CASCADE;(의존 객체까지) · RESTRICT(의존 객체 있으면 거부).CREATE VIEW 뷰 AS SELECT …; · CREATE INDEX 이름 ON 표(열); · CREATE DOMAIN 이름 AS 자료형 CHECK(VALUE IN (…));GRANT SELECT ON 표 TO 사용자 [WITH GRANT OPTION]; · REVOKE SELECT ON 표 FROM 사용자; TO 와 FROM 이 짝이다. GRANT ALL, TO PUBLIC 도 있다.ROLLBACK TO 이름 으로 부분 취소.왜 이걸 하나 — 키워드를 외우는 게 아니라 왜 그 자리에 그 말이 오는지를 알면 빈칸이 어디 뚫려도 채운다.
SQL 문장은 전부 같은 뼈대다. 맨 앞에 동사(무엇을 하나), 그 다음에 대상(어느 표), 마지막에 세부(어느 행 · 어떤 값)가 온다. 동사마다 대상을 받는 전치사가 정해져 있다는 것이 빈칸 문제의 전부다.
| 동사 | 대상을 받는 말 | 세부를 받는 말 | 문장 |
|---|---|---|---|
| INSERT | INTO 표 | VALUES (값) | INSERT INTO 학생 VALUES (…); |
| UPDATE | 표 (전치사 없음) | SET 열 = 값 · WHERE | UPDATE 학생 SET 학년 = 4 WHERE …; |
| DELETE | FROM 표 | WHERE | DELETE FROM 학생 WHERE …; |
| SELECT | 열 … FROM 표 | WHERE · GROUP BY · ORDER BY | SELECT 이름 FROM 학생; |
| GRANT | 권한 ON 표 | TO 사용자 | GRANT SELECT ON 학생 TO 김기사; |
| REVOKE | 권한 ON 표 | FROM 사용자 | REVOKE SELECT ON 학생 FROM 김기사; |
| CREATE · DROP · ALTER | TABLE · VIEW · INDEX · DOMAIN 이름 | 괄호 안 정의 · ADD · CASCADE | DROP VIEW 성적요약 CASCADE; |
→ 2024년 2회 3번의 빈칸 넷(VALUES · SELECT · FROM · SET)은 전부 이 표의 둘째 · 셋째 칸이다. INSERT 는 INTO 와 VALUES, UPDATE 는 SET, DELETE 는 FROM — 동사가 정해지면 나머지 칸이 정해진다.
CREATE TABLE 안의 제약은 다섯이고, 각각 막는 것이 다르다. PRIMARY KEY 는 중복과 NULL 을, UNIQUE 는 중복을, NOT NULL 은 NULL 을, CHECK 는 조건 밖의 값을, FOREIGN KEY 는 부모 표에 없는 값을 막는다. 문제가 「값의 범위」「조건」을 말하면 CHECK, 「다른 표를 참조」를 말하면 FOREIGN KEY 다.
외래키 한 줄은 여섯 토막이 정해진 순서로 온다. CONSTRAINT 이름 FOREIGN KEY (내 열) REFERENCES 부모표 (부모 열). 2026년 1회 18번은 이 여섯 토막 중 다섯을 빈칸으로 뚫었다. 괄호 두 개 중 앞은 자식, 뒤는 부모다.
CHECK 는 열 정의에 붙을 수도 있고 도메인에 붙을 수도 있다. 2026년 2회 19번의 CREATE DOMAIN SEASON AS VARCHAR(6) CHECK (VALUE IN (…)) 에서 VALUE 는 그 도메인에 들어올 값을 가리키는 예약어다. 훈련 1번은 같은 CHECK 를 열에 붙인 꼴이라 급여 INT CHECK (급여 >= 0) 처럼 열 이름을 쓴다.
지우는 말은 셋이다. DELETE 는 행을 지우고 표는 남기며, TRUNCATE 는 행 전부를 비우되 되돌릴 수 없는 DDL 이고, DROP 은 표 자체를 없앤다. 「어느 행」이 있으면 DELETE, 「표를」이면 DROP 이다.
DROP 뒤의 CASCADE 와 RESTRICT 는 의존하는 객체가 있을 때의 태도다. CASCADE 는 뷰 · 제약처럼 그 표에 매달린 것까지 같이 지우고, RESTRICT 는 매달린 것이 있으면 지우기를 거부한다. 2023년 2회 2번이 「연쇄적으로 함께 제거」라고 했으니 CASCADE 다.
되돌리는 말은 COMMIT 과 ROLLBACK 이다. ROLLBACK 은 마지막 COMMIT 이후만 취소하므로, 훈련 5번처럼 COMMIT 을 사이에 두면 그 앞의 INSERT 는 살아남는다. GRANT 로 준 권한을 거두는 것은 ROLLBACK 이 아니라 REVOKE 다.
왜 이걸 하나 — 문장을 끝까지 적는 연습이다. 세미콜론과 따옴표까지 답 칸에 적는다.
작성 문제는 답 칸에 문장을 끝까지 쓴 뒤 정답을 연다. 키워드 · 따옴표 · 괄호 · 세미콜론 중 하나라도 다르면 틀렸다를 누른다. 시험장 채점이 그렇다.
학생 테이블에서 이름이 '민수'인 튜플을 삭제하는 SQL문을 작성하시오. (구문 끝에 세미콜론 포함)
DELETE FROM 학생 WHERE 이름 = '민수';답 — DELETE FROM 학생 WHERE 이름 = '민수';
원리 — 행을 지우는 명령은 DELETE FROM 테이블 WHERE 조건 이다. DELETE 뒤에 열 이름을 적지 않는다 — 행 전체가 지워지므로 "무엇을"이 아니라 "어느 테이블에서 · 어느 행을"만 말한다. WHERE 를 빼면 테이블의 모든 행이 지워지므로 조건이 답의 핵심이다. 문자열 값은 작은따옴표로 감싼다.
따라가기
헷갈리는 자리 — DELETE * FROM 학생 처럼 * 를 넣는 것(SELECT 와 섞임 — 오류). DROP TABLE 은 테이블 자체를 없애는 것이라 다른 명령이다. 따옴표를 큰따옴표로 쓰거나 빼는 것도 감점 자리다. DELETE 는 DML 이라 COMMIT 전에는 ROLLBACK 으로 되돌릴 수 있지만, 같은 결과를 내는 TRUNCATE 나 DROP 은 되돌릴 수 없다 — 이 차이도 같은 묶음에서 자주 나온다.
답의 SQL 을 sqlite 3.49 에서 실행해 확인했다. 복원 출처 grandlife.co.kr(2026-09-14) — 공식 원문이 아니라 문장 · 열 이름이 실제와 다를 수 있다.
학생 테이블(학번, 이름, 학년, 과목, 전화번호)에 학번 98170823, 이름 '한국산', 3학년, '경영학개론', '050-1234-1234'인 학생을 삽입하는 SQL을 작성하시오.
INSERT INTO 학생 VALUES(98170823, '한국산', 3, '경영학개론', '050-1234-1234');답 — INSERT INTO 학생 VALUES(98170823, '한국산', 3, '경영학개론', '050-1234-1234');
원리 — 행을 넣는 명령은 INSERT INTO 테이블 VALUES(값들) 이다. 열 이름을 생략하면 값을 테이블의 열 순서(학번, 이름, 학년, 과목, 전화번호)대로 전부 적어야 한다. 숫자는 그대로, 문자열은 작은따옴표로 감싼다. 전화번호는 숫자처럼 보여도 하이픈이 있어 문자열이다. 열을 골라 넣으려면 INSERT INTO 학생(학번, 이름) VALUES(…) 처럼 열 목록을 적는다.
따라가기
헷갈리는 자리 — 학년 3 을 '3' 으로 감싸는 것(틀리진 않지만 숫자 열은 숫자로), 전화번호의 따옴표를 빼는 것(오류). 값 순서를 바꾸면 열과 어긋난다. VALUES 를 VALUE 로 적는 것도 오류다.
답의 SQL 을 sqlite 3.49 에서 실행해 확인했다. 복원 출처 grandlife.co.kr(2026-09-14) — 공식 원문이 아니라 문장 · 열 이름이 실제와 다를 수 있다.
뷰(VIEW)를 제거할 때, 그 뷰를 참조하는 다른 뷰나 제약조건까지 연쇄적으로 함께 제거하는 DROP 옵션은?
답 — CASCADE. 뷰를 지울 때 그것에 기대고 있는 다른 뷰 · 제약까지 함께 지우는 옵션이다.
원리 — 뷰는 다른 테이블이나 뷰 위에 세운 창이다. 어떤 뷰 위에 또 다른 뷰가 서 있을 때 아래 것을 지우면 위 것이 허공에 뜬다. DROP VIEW 이름 CASCADE 는 "위에 기댄 것까지 연쇄로 지워라", RESTRICT 는 "기댄 것이 있으면 지우지 말고 막아라"다. 같은 짝이 DROP TABLE 에도 있다. cascade 는 폭포처럼 아래로 번진다는 뜻이다.
따라가기
헷갈리는 자리 — RESTRICT 와 반대로 적는 것. "연쇄 · 함께" 가 나오면 CASCADE, "막는다 · 거부" 가 나오면 RESTRICT 다. 외래키의 ON DELETE CASCADE 도 같은 낱말이라 문맥이 뷰인지 외래키인지 본다. 옵션을 아예 안 적으면 DBMS 마다 기본값이 달라(대개 RESTRICT), 시험 답으로는 문제가 묻는 낱말 하나만 적는다.
SQL 표준 · 교재 정의와 대조했다. 복원 출처 grandlife.co.kr(2026-09-14) — 공식 원문이 아니라 문장이 실제와 다를 수 있다.
다음 SQL문의 괄호 ①부터 ④에 들어갈 키워드를 순서대로 쓰시오.
답 — ① VALUES ② SELECT ③ FROM ④ SET. 넣기 · 읽기 · 고치기 세 문장의 자리를 채우는 것이다.
원리 — INSERT 는 INSERT INTO 테이블(열) VALUES(값), 읽기는 SELECT 열 FROM 테이블 WHERE …, 고치기는 UPDATE 테이블 SET 열 = 값 WHERE … 꼴이다. 세 문장의 예약어 자리는 정해져 있어서 앞뒤 낱말만 보면 채워진다: INTO 뒤에 괄호 값이 오면 그 앞은 VALUES, 열 이름 앞이 문장 시작이면 SELECT, 테이블 이름 앞은 FROM, UPDATE 뒤에서 열 = 값 앞은 SET 이다.
따라가기
헷갈리는 자리 — ④ 에 VALUES 를 적는 것. UPDATE 는 SET 이다. ① 에 VALUE(단수)를 적는 것 — 표준은 VALUES 다. 네 칸을 순서대로 적어야 하며 하나라도 자리가 바뀌면 그 칸은 0 점이다.
답의 SQL 을 sqlite 3.49 에서 실행해 확인했다. 복원 출처 grandlife.co.kr(2026-09-14) — 공식 원문이 아니라 문장 · 열 이름이 실제와 다를 수 있다.
다음 조건을 만족하도록 PLAYER 테이블의 외래키 제약 조건을 완성하시오.
외래키 제약 조건의 이름은 TEAM_TF이다.
PLAYER 테이블의 TEAM_ID가 외래키다.
TEAM 테이블의 TEAM_ID2를 참조한다.
답 — ① CONSTRAINT ② FOREIGN ③ TEAM_ID ④ REFERENCES ⑤ TEAM_ID2. 이름 붙은 외래키 제약을 적는 정해진 꼴이다.
원리 — 외래키는 "이 열의 값은 저 테이블의 저 열에 있는 값이어야 한다"는 약속이다. 테이블을 만들 때 적는 꼴은 CONSTRAINT 제약이름 FOREIGN KEY (내 열) REFERENCES 상대테이블(상대 열) 이다. CONSTRAINT 이름은 나중에 지울 때(ALTER TABLE … DROP CONSTRAINT 이름) 부르기 위해 붙인다. 문제가 준 조건 셋 — 이름 TEAM_TF, 내 열 TEAM_ID, 상대 TEAM 의 TEAM_ID2 — 을 그 자리에 넣으면 된다.
따라가기
헷갈리는 자리 — ⑤ 에 TEAM_ID 를 적는 것. 상대 테이블의 열 이름은 TEAM_ID2 라고 문제가 못 박았다. ④ 에 REFERENCE(단수)를 적는 것 — REFERENCES 다. PRIMARY KEY 처럼 FOREIGN KEY 도 두 낱말이라 ② 는 FOREIGN 하나다.
답의 SQL 을 sqlite 3.49 에서 실행해 확인했다. 복원 출처 grandlife.co.kr(2026-09-14) — 공식 원문이 아니라 문장 · 열 이름이 실제와 다를 수 있다.
다음 SQL문의 빈칸 ①에 들어갈 키워드를 쓰시오.
답 — CHECK. 값이 정해진 범위 · 목록 안에 있는지 검사하는 제약이다.
원리 — CREATE DOMAIN 은 "이 이름의 자료형은 VARCHAR(6) 이되 값은 이 네 가지만 된다"처럼 자료형에 규칙을 붙여 이름을 만드는 문장이다. 값의 범위를 제한하는 제약이 CHECK (조건) 이고, 도메인 안에서는 열 이름 대신 VALUE 라는 낱말로 그 값을 가리킨다. 테이블의 열에 붙일 때는 급여 INT CHECK (급여 >= 0) 처럼 열 이름을 쓴다. NOT NULL · UNIQUE · DEFAULT 와 함께 열 제약의 네 식구다.
따라가기
헷갈리는 자리 — IN 이 보인다고 WHERE 나 CONSTRAINT 를 적는 것. 조건이 붙는 제약은 CHECK 이고, CONSTRAINT 는 제약에 이름을 붙이는 낱말이라 자리가 다르다. DEFAULT 는 값을 안 넣었을 때의 기본값이라 뜻이 다르다.
SQL 표준 · 교재 정의와 대조했다. 복원 출처 grandlife.co.kr(2026-09-14) — 공식 원문이 아니라 문장이 실제와 다를 수 있다.
사용자 '김기사'에게 학생 테이블의 SELECT 권한을 부여하되, 김기사가 그 권한을 다른 사용자에게도 부여할 수 있도록 하는 SQL문을 작성하시오.
GRANT SELECT ON 학생 TO 김기사 WITH GRANT OPTION;답 — GRANT SELECT ON 학생 TO 김기사 WITH GRANT OPTION;
원리 — 권한을 주는 명령은 GRANT 권한 ON 대상 TO 사용자 다(DCL). 여기에 WITH GRANT OPTION 을 붙이면 받은 사람이 그 권한을 남에게 다시 줄 수 있다. 거두는 명령은 REVOKE 권한 ON 대상 FROM 사용자 이고, 남에게 넘겨준 권한까지 같이 거두려면 CASCADE 를 붙인다. GRANT 는 TO, REVOKE 는 FROM 이라는 짝을 기억한다.
따라가기
헷갈리는 자리 — TO 를 FOR 나 FROM 으로 적는 것. WITH GRANT OPTION 을 빼면 "권한 부여"까지만 맞고 문제의 둘째 조건이 빠진다. 낱말 순서(권한 → ON → TO → WITH)가 곧 채점 기준이다.
이전 자료의 예상 문제다. sqlite 3.49 에서 실행해 정답을 확인했다.
학생 테이블에서 이름이 '홍길동'인 학생의 학년을 4로 변경하는 SQL문을 작성하시오.
UPDATE 학생 SET 학년 = 4 WHERE 이름 = '홍길동';답 — UPDATE 학생 SET 학년 = 4 WHERE 이름 = '홍길동';
원리 — 값을 고치는 명령은 UPDATE 테이블 SET 열 = 새값 WHERE 조건 이다. SET 뒤에 고칠 열과 값을 적고, WHERE 로 고칠 행을 고른다. WHERE 를 빼면 모든 행의 학년이 4 가 되므로 조건이 반드시 있어야 한다. 여러 열을 한 번에 고치려면 SET 학년 = 4, 학과 = '…' 처럼 쉼표로 잇는다.
따라가기
헷갈리는 자리 — INSERT 처럼 VALUES 를 쓰거나, SET 대신 = 만 적는 것. 4 는 숫자라 따옴표가 없고 홍길동은 문자열이라 있다. 이 셋(SET · WHERE · 따옴표)이 UPDATE 작성 문제의 감점 자리다.
이전 자료의 예상 문제다. sqlite 3.49 에서 실행해 정답을 확인했다.
왜 이걸 하나 — 문장 문제는 아는데 깎이는 자리가 정해져 있다.
| 자리 | 새는 꼴 | 적는 법 | 기출 |
|---|---|---|---|
| 전치사 | UPDATE … FROM, DELETE … INTO, GRANT … FROM | INSERT INTO · DELETE FROM · UPDATE 표 SET · GRANT TO · REVOKE FROM | 2024-2회 3번 · 예상 2회 11번 |
| 따옴표 | 문자열을 큰따옴표로, 숫자를 따옴표로 | 문자열만 작은따옴표. 숫자는 그대로 | 2023-2회 1번 · 2023-1회 13번 |
| 세미콜론 | 문장 끝을 비운다 | 문제가 「세미콜론 포함」이라 하면 반드시, 아니어도 붙이는 쪽이 안전 | 2023-1회 13번 |
| 열 목록과 값 순서 | INSERT 의 값 순서를 표 순서와 다르게 | 열 목록을 적었으면 그 순서로, 안 적었으면 표의 열 순서로 | 2023-2회 1번 |
| 키워드 짝 | FOREIGN 만 쓰고 KEY 를 빼거나, REFERENCES 를 REFERENCE 로 | FOREIGN KEY · PRIMARY KEY 는 두 낱말, REFERENCES 는 s 까지 | 2026-1회 18번 |
| 괄호 안팎 | 외래키의 자식 열과 부모 열을 바꾼다 | 앞 괄호 = 내 열, 뒤 괄호 = 부모 열 | 2026-1회 18번 |
| 옵션 낱말 | CASCADE 를 CASCADING 으로, WITH GRANT OPTION 을 빼먹는다 | 문제가 「다른 사용자에게도 부여」라고 하면 WITH GRANT OPTION 까지 | 2023-2회 2번 · 예상 1회 11번 |
작성 문제는 한 문장이 곧 답이라 부분 점수가 없다고 보고 쓴다. 빈칸 문제는 칸마다 점수가 갈리므로 모르는 칸도 비우지 않는다.
왜 이걸 하나 — 기출에 아직 안 나온 짝을 미리 풀어 둔다. 제약 다섯 · REVOKE · ALTER · COMMIT 이다.
5문항은 02절 카드의 문장 중 기출에 없던 것들이다. 정답은 전부 sqlite 로 실행해 확인했고, GRANT · REVOKE 만 sqlite 에 없어 표준 문법으로 대조했다.
다음 SQL문의 괄호 ①부터 ④에 들어갈 키워드를 순서대로 쓰시오. 사번은 기본키, 부서코드는 부서 테이블의 부서코드를 참조하며, 급여는 0 이상이어야 한다.
답 — ① PRIMARY ② KEY ③ CHECK ④ REFERENCES. 기본키 · 값 범위 · 외래키 참조를 적는 세 예약어다.
원리 — 열 뒤에 바로 PRIMARY KEY 를 붙이면 그 열이 기본키다. CHECK (조건) 은 그 열의 값이 조건을 만족해야 한다는 제약이다. FOREIGN KEY (열) REFERENCES 상대(열) 은 외래키다. CREATE TABLE 안의 제약은 이 셋에 NOT NULL · UNIQUE · DEFAULT 를 더한 여섯이 전부라 낱말과 자리를 짝으로 외운다.
따라가기
이 노트에서 만든 변형 문제다. sqlite 3.49 에서 실행해 확인했다.
학생 테이블에서 학년이 4인 학생을 모두 삭제하는 SQL문과, 학생 테이블 자체를 삭제하는 SQL문을 각각 쓰시오.
답 — DELETE FROM 학생 WHERE 학년 = 4; 와 DROP TABLE 학생;. 행을 지우는 것과 테이블을 없애는 것은 다른 명령이다.
원리 — DELETE 는 조건에 맞는 행만 지우고 테이블(틀)은 남는다 — DML 이라 ROLLBACK 으로 되돌릴 수 있다. DROP 은 테이블의 틀과 데이터를 통째로 없앤다 — DDL 이라 되돌릴 수 없다. 둘 사이에 TRUNCATE(행만 전부 지움, 틀은 남김, 되돌리기 불가)가 있다. "학년이 4인 학생만"은 조건이 있으니 DELETE, "테이블 자체"는 DROP 이다.
따라가기
이 노트에서 만든 변형 문제다. sqlite 3.49 에서 실행해 확인했다.
사용자 김기사에게 부여했던 학생 테이블의 SELECT 권한을 회수하는 SQL문을 쓰시오.
답 — REVOKE SELECT ON 학생 FROM 김기사;
원리 — 권한을 거두는 명령은 REVOKE 권한 ON 대상 FROM 사용자 다. 주는 GRANT 가 TO 를 쓰는 것과 짝을 이루어 REVOKE 는 FROM 이다. 김기사가 WITH GRANT OPTION 으로 남에게 넘긴 권한까지 거두려면 끝에 CASCADE 를 붙이고, 넘긴 것이 있으면 거부하려면 RESTRICT 다. 이 문제는 그 조건이 없으니 기본 꼴이다.
따라가기
GRANT 문과 나란히 적어 두면 TO 와 FROM 이 바뀌는 실수가 사라진다.
이 노트에서 만든 변형 문제다. sqlite 3.49 에서 실행해 확인했다.
다음 SQL문의 괄호 ①과 ②에 들어갈 키워드를 쓰시오. 학생 테이블에 이메일 열을 추가하고, 이름 열에 대해 인덱스 idx_name 을 만든다.
답 — ① ADD ② CREATE. 열을 더하는 ALTER 의 낱말과 인덱스를 만드는 문장의 시작이다.
원리 — 이미 있는 테이블의 구조를 바꾸는 명령이 ALTER TABLE 이고, 그 뒤에 ADD 열 자료형(열 추가) · DROP COLUMN 열(열 삭제) · MODIFY 또는 ALTER COLUMN(열 변경)이 온다. 인덱스는 테이블과 별개의 객체라 CREATE INDEX 이름 ON 테이블(열) 로 만들고 DROP INDEX 로 없앤다. 만드는 것은 전부 CREATE, 없애는 것은 DROP 이다.
따라가기
이 노트에서 만든 변형 문제다. sqlite 3.49 에서 실행해 확인했다.
다음 문장을 순서대로 실행한 뒤 학생 테이블의 행 수를 쓰시오. 처음 학생 테이블에는 3행이 있다.
답 — 4. COMMIT 까지의 결과(4 행)는 굳어졌고, 그 뒤의 DELETE 두 번은 ROLLBACK 으로 취소된다.
원리 — 트랜잭션은 "여기까지를 한 덩어리로"다. COMMIT 은 지금까지의 변경을 확정해 되돌릴 수 없게 하고, ROLLBACK 은 마지막 COMMIT 이후의 변경을 전부 취소한다. INSERT 뒤에 COMMIT 을 했으니 4 행이 기준점이 되고, 그 뒤 두 DELETE 로 2 행이 됐다가 ROLLBACK 이 기준점으로 되돌려 다시 4 행이다.
따라가기
이 노트에서 만든 변형 문제다. sqlite 3.49 에서 실행해 확인했다.
왜 이걸 하나 — 아래를 안 보고 적을 수 있어야 문장 문제가 끝난다.