[SQLD]「3」(3.1) DML, TCL, DDL, DCL
「1」 데이터 모델링의 이해
「2」 SQL 기본 / 활용
> 「3」 관리 구문
> 1. DML
> 2. TCL
> 3. DDL
> 4. DCL
1. DML
DML
⸰ 입력된 데이터를 수정, 삭제, 조회하는 명령어
INSERT
⸰ 테이블에 데이터를 입력하는 명령어
√. 칼럼명 명시되지 않은 경우, 전체 데이터를 모두 삽입하여야 함
INSERT INTO 테이블명 (칼럼명1, 칼럼명2, ... ) VALUES (데이터1, 데이터2, ... );
⸰ 명시되지 않은 칼럼에는 NULL 값이 입력되는데, 해당 칼럼이 PK나, NOT NULL 제약조건이 걸린 칼럼인 경우 에러 발생
INSERT INTO 테이블명 VALUES (데이터1, 데이터2, 데이터3, ... );
⸰ 순서가 바뀌어 데이터 유형에 맞지 않거나, 전체 칼럼 개수와 맞지 않는 경우 에러 발생
UPDATE
⸰ 이미 저장된 데이터를 수정하고 싶을 때 사용하는 명령어
UPDATE 테이블명 SET 칼럼명1 = 데이터1, 칼럼명2 = 데이터2, ... (WHERE 조건);
DELETE
⸰ 이미 저장된 데이터를 삭제하는 명령어, ROLLBACK 가능
√. WHERE 절 없이 테이블 전체 데이터를 삭제하는 경우, TRUNCATE(ROLLBACK 불가능)를 사용하는 것이 좋음
DELETE FROM 테이블명 (WHERE 조건);
MERGE
⸰ 테이블에 새로운 데이터 입력, 이미 저장되어 있는 데이터 변경을 한 번에 할 수 있는 명령어
MERGE
INTO 타겟_테이블명
USING 비교_테이블명
ON 조건
WHEN MATCHED THEN
UPDATE
SET 칼럼명1 = 새로운_데이터1, 칼럼명2 = 새로운_데이터2, ...
WHEN NOT MATCHED THEN
INSERT 칼럼명1, 칼럼명2, ...
VALUES 데이터1, 데이터2, ...;
2. TCL
TCL
⸰ 트랜잭션을 제어하는 명령어
트랜잭션
⸰ 나눌 수 없는 업무 처리의 단위
-원자성
: 모두 성공 or 모두 실패
-일관성
: 트랜잭션 전과 후, 데이터베이스의 데이터가 일치
-격리성
: 하나의 트랜잭션은 고립되어 수행
-지속성
: 데이터가 영구적으로 저장
COMMIT
⸰ INSERT, DELETE, UPDATE 후 변경된 내용을 확정, 반영하는 명령어
⸰ 최종적으로 데이터 파일에 기록되고, 트랜잭션 완료
√. COMMIT 후, 이전 SAVEPOINT도 삭제
ROLLBACK
⸰ INSERT, DELETE, UPDATE 후 변경된 내용을 취소하는 명령어
√. COMMIT 후, COMMIT 전에 있는 SAVEPOINT로 ROLLBACK 하면 에러 발생
SAVEPOINT
⸰ 전체 작업을 되돌리지 않고, 일부만 되돌릴 수 있게 하는 명령어
⸰ ROLLBACK 뒤에 특정 SAVEPOINT 를 지정해주면, 그 지점까지 데이터 복구
3. DDL
DDL
⸰ 데이터를 정의하는 명령어
⸰ 데이터에 대한 데이터 유형을 정함
문자 | CHAR VARCHAR CLOB |
숫자 | NUMBER |
날짜 | DATE |
-CHAR
: 고정, 정의된 용량 전부 사용, 공백 무시하고 비교
-VARCHAR
: 가변, 정의된 용량 중 실제 사용된 용량만 사용, 공백 포함하여 비교
CREATE
⸰ 테이블을 생성하는 명령어
⸰ 테이블 생성 시 제약조건을 함께 정의하는 것이 좋음
CREATE TABLE 테이블명 (
칼럼명1 데이터_유형 [DEFAULT 값] [NOT NULL],
칼럼명2 데이터_유형 [DEFAULT 값] [NOT NULL],
...
);
-DEFAULT
: 값을 별도로 명시하지 않았을 때 저장되는 데이터의 기본값
-NULL
: 공백(' ')과 다르며, 존재하지 않는 값
⸰ 테이블 생성 시 지켜야 할 규칙, 지키지 않으면 에러 발생
- 테이블명은 고유
- 한 테이블 내 칼럼명 고유
- 칼럼명 뒤에 데이터 유형, 데이터 크기 명시
- 칼럼에 대한 정의는 ( ) (괄호)안에 기술
- 각 칼럼들은 , (콤마)로 구분
- 마지막은 ; (세미콜론)
⸰ 테이블 생성 시 지향할 점
- 테이블명은 각각의 정체성을 가져야 함
- 칼럼명은 다른 테이블과 통일성 있어야 함
⸰ 제약조건의 종류
-PRIMARY KEY
: 테이블에 저장된 각각의 행에 대한 고유성 보장
: 한 테이블 당 한 개
√. 생성하지 않아도 됨
: NULL 값 불가
: UNIQUE 인덱스로 생성
-UNIQUE KEY
: 테이블에 저장된 각각의 행에 대한 고유성 보장
: NULL 값 가능
-NOT NULL
: NULL 값 불가
-CHECK
: 칼럼의 도메인 지정
-FOREIGN KEY
: 하나의 테이블이 다른 테이블을 참조하기 위한 키를 정의
: NULL 값 가능
: 참조 무결성 제약 옵션 선택 가능
‣CASCADE
: 부모 값 삭제 시 자식 값 같이 삭제
‣SET NULL
: 부모 값 삭제 시 자식 값 NULL 값으로 변경
‣SET DEFAULT
: 부모 값 삭제 시 자식 값 DEFAULT 값으로 변경
‣RESTRICT
: 부모 값을 참조하지 않는 경우에만 부모 값 삭제, 수정 가능
‣NO ACTION
: 참조 무결성 제약이 걸려있는 경우 삭제, 수정 불가
CTAS(CREATE TABLE ~ AS SELECT)
⸰ 기존에 존재하던 테이블을 복사해서 생성하는 명령어
⸰ 칼럼별로 데이터 유형을 다시 명시하지 않아도 됨
⸰ 제약조건 중 NOT NULL만 복사되고, 나머지 제약조건은 ALTER 명령어를 사용하여 정의해야 함
CREATE 테이블명 AS SELECT * FROM 복사할_테이블명;
ALTER
⸰ 테이블 구조를 변경하는 명령어
⸰ADD COLUMN
- 새로운 칼럼 추가하는 명령어
- 추가된 칼럼의 위치는 맨 끝 고정
ALTER TABLE 테이블명 ADD 칼럼명 데이터_유형;
⸰DROP COLUMN
- 칼럼을 삭제하는 명령어
- 삭제 시 복구 불가능
ALTER TABLE 테이블명 DROP COLUMN 칼럼명;
⸰MODIFY COLUMN
- 기존의 칼럼을 변경하는 명령어
- 데이터 크기 줄이기 : 줄이고자 하는 데이터 크기가 모든 데이터 중 가장 큰 경우만 줄일 수 있음
- 데이터 크기 늘리기 : 모두 가능
- 데이터 유형 변경 : 데이터가 없는 경우에만 가능
- DEFAULT 값 변경 : 변경 이후 저장되는 데이터에만 적용
- NOT NULL 추가 : 현재 NULL 값이 저장되어 있지 않은 칼럼만 가능
ALTER TABLE 테이블명 MODIFY (
칼럼명1 데이터_유형 [DEFAULT 값] [NOT NULL],
칼럼명2 데이터_유형 [DEFAULT 값] [NOT NULL],
...
);
⸰RENAME COLUMN
- 기존에 있던 칼럼명을 변경하는 명령어
ALTER TABLE 테이블명 RENAME COLUMN 기존_칼럼명 TO 변경할_칼렴명;
⸰ADD CONSTRAINT
- 제약조건을 추가하는 명령어
ALTER TABLE 테이블명 ADD CONSTRAINT 제약조건명 제약조건 (칼럼명);
DROP TABLE
⸰ 테이블을 삭제하는 명령어
⸰ CASCADE 옵션이 없고, 해당 테이블을 참조하는 다른 테이블이 존재하는 경우, 삭제되지 않음
DROP TABLE 테이블명 [CASCADE CONSTRAINT];
RENAME TABLE
⸰ 테이블명을 변경하는 명령어
RENAME 기존_테이블명 TO 변경할_테이블명;
TRUNCATE TABLE
⸰ 테이블에 저장되어 있는 데이터를 모두 제거하는 명령어
⸰ ROLLBACK 불가능
⸰ 저장 공간이 재사용되도록 초기화 (DELETE는 재사용 불가)
√. 데이터만 삭제, 테이블 삭제 X
TRUNCATE TABLE 테이블명;
4. DCL
DCL
⸰ USER 를 생성하여 권한을 부여하거나 회수하는 명령어
USER 관련 명령어
⸰CREATE USER
- 사용자를 생성하는 명령어
CREATE USER 사용자명 IDENTIFIED BY 패스워드;
⸰ALTER USER
- 사용자를 변경하는 명령어
ALTER USER 사용자명 IDENTIFIED BY 패스워드;
⸰DROP USER
- 사용자를 삭제하는 명령어
DROP USER 사용자명;
권한 관련 명령어
⸰GRANT
- 사용자에게 권한을 부여하는 명령어
GRANT 권한 TO 사용자명;
⸰REVOKE
- 사용자에게 권한을 회수하는 명령어
REVOKE 권한 FROM 사용자명;
ROLE 관련 명령어
⸰ 특정 권한을 하나로 묶는 것
⸰ ROLE 을 이용한 권한 부여
CREATE ROLE 롤명;
GRANT 권한 TO 롤명;
GRANT 롤명 TO 사용자명;
- ROLE 을 생성
- ROLE 에 권한 부여
- ROLE 을 사용자에게 부여
DML | INSERT, UPDATE, DELETE, MERGE |
TCL | COMMIT, ROLLBACK, SAVEPOINT |
DDL | CREATE, ALTER, DROP, RENAME, TRUNCATE |
DCL | CREATE USER, DROP USER, GRANT, REVOKE |
유선배 SQLD 과외노트
'💠기타 > 자격증' 카테고리의 다른 글
[SQLD]「2」(2.8) ROWNUM, 셀프 조인, 계층 쿼리 (0) | 2024.07.08 |
---|---|
[SQLD]「2」(2.7) FIRST_VALUE/LEAD, RATIO_TO_REPORT/CUME_DIST/NTILE (0) | 2024.06.21 |
[SQLD]「2」(2.6) RANK, MAX/AVG/SUM, WINDOWING 절 (0) | 2024.06.20 |
[SQLD]「2」(2.5) ROLLUP/CUBE/GROUPING SETS/GROUPING (0) | 2024.06.20 |
[SQLD]「2」(2.4) 서브쿼리, 뷰, 집합 연산자 (0) | 2024.06.19 |