관리 구문
DML
; Data Manipulation Language, DDL에서 정의한 대로 데이터를 입력하고, 입력된 데이터를 수정, 삭제, 조회하는 명령어
INSERT
; 테이블에 데이터를 입력하는 명령어
INSERT INTO 테이블명(컬럼명1, 컬럼명2, ...) VALUES(데이터1, 데이터2, ...);
INSERT INTO 테이블명 VALUES(전체 컬럼에 입력될 데이터 리스트);
- 명시되지 않은 컬럼에는 NULL 값이 입력되는데 PK나 NOT NULL 제약조건이 걸린 컬럼에는 NULL 값이 입력될 수 없으니 주의해야함
- 전체 컬럼에 대한 데이터가 테이블의 컬럼 순서대로 빠짐없이 나열되어야 하는데 순서가 뒤바뀌어 데이터 유형이 맞지 않거나 누락된 데이터가 있어 전체 컬럼 갯수와 맞지 않았을 경우 데이터베이스는 에러 발생
UPDATE
; 이미 저장된 데이터를 수정하고 싶을 때 사용하는 명령어
수정하고 싶은 컬럼이 많으면 SET절에 ,(콤마)로 이어서 명시
UPDATE 테이블명 SET 컬럼명 = 새로운 데이터(WHERE 수정할 데이터에 대한 조건);
DELETE
; 이미 저장된 데이터를 삭제하고 싶을 때
DELETE FROM 테이블명 (WHERE 수정할 데이터에 대한 조건);
- TRUNCATE는 별도의 로그를 쌓지 않아 ROLLBACK이 불가능하지만 DELETE는 COMMIT 전에 ROLLBACK이 가능
MERGE
; 테이블에 새로운 데이터를 입력하거나 이미 저장되어 있는 데이터에 대한 변경 작업을 한 번에 할 수 있도록 해주는 명령어
TCL
; Transaction Control Language, 트랜잭션을 제어하는 명령어
트랜잭션이란 쪼개질 수 없는 업무처리의 단위, 한 세트로 묶일 수밖에 없는 논리적인 업무 단위
트랜잭션 특징
- 원자성 : 트랜잭션으로 묶인 일련의 동작들은 모두 성공하거나 모두 실패해야 한다
- 일관성 : 트랜잭션이 완료된 후에도 데이터베이스가 가진 데이터에 일관성이 있어야 한다
- 고립성 : 하나의 트랜잭션은 고립되어 수행되야 한다
- 지속성 : 트랜잭션이 성공적으로 수행되었을 경우 트랜잭션이 변경한 데이터가 영구적으로 저장되어야 한다
COMMIT
; INSERT, DELETE, UPDATE 후에 변경된 내용을 확정, 반영하는 명령어
COMMIT을 실행하지 않으면 메모리까지만 반영되는데, 메모리는 휘발성이기 때문에 언제든 사라질 수 있고 다른 사용자는 변경된 값을 조회할 수 있음, COMMIT을 실행해야 최종적으로 데이터 파일에 기록이 되고 비로소 트랜잭션이 완료됨
ROLLBACK
; INSERT, DELETE, UPDATE 후에 변경된 내용을 취소하는 명령어, ROLLBACK을 하면 변경하기 이전 값으로 복구됨
SAVEPOINT
; ROLLBACK을 수행할 때 전체 작업을 되돌리지 않고 일부만 되돌릴 수 있게 하는 기능
DDL
; Data Definition Language란 의미로 데이터를 정의하는 SQL
문자 유형은 CHAR와 VARCHAR 두 가지가 있는데, 둘의 차이는 크기가 고정이나 가변이냐이다
CREATE
; 테이블을 생성하기 위한 명령어
CREATE TABLE 테이블명(
컬럼명1 데이터 타입(DEFAULT/NULL여부),
...
);
테이블 생성 시 반드시 지켜야 할 규칙
- 테이블명은 고유해야 한다
- 한 테이블 내에서 컬럼명은 고유해야 한다
- 컬럼명 뒤에 데이터 유형과 데이터 크기가 명시되어야 한다
- 컬럼에 대한 정의는 괄호 () 안에 기술한다
- 각 컬럼들은 , (콤마)로 구분된다
- 테이블명과 컬럼명은 숫자로 시작될 수 없다
- 마지막은 ; (세미콜론)으로 끝난다
CREATE TABLE을 할 때 제약조건 CONSTRAINT도 함께 정의해줄 수 있는데 제약 조건은 테이블에 저장될 데이터의 무결성을 위함
제약 조건의 종류
- PRIMARY KEY(기본키) : 테이블에 저장된 각각의 Row에 대한 고유성 보장, 한 테이블에 하나씩만 정의 가능, PK로 지정된 컬럼에는 NULL 값이 입력될 수 없고 자동으로 UNIQUE 인덱스로 생성
- UNIQUE KEY(고유키) : PRIMARY KEY와 유사한 목적이지만 NULL값이 허용됨
- NOT NULL
- CHECK : 컬럼에 저장될 수 없는 값의 범위를 제한
- FOREIGN EKY(외래키) : 하나의 테이블이 다른 테이블을 참고하고자 할 때
참조 무결성 규정 관련 옵션
- CASCADE : parent 값 삭제 시 child 값 같이 삭제
- SET NULL : parent 값 삭제 시 child의 해당 컬럼 NULL 처리
- SET DEFUALT : parent 값 삭제 시 child의 해당 컬럼 DEFAULT 값으로 변경
- RESTRICT : child 테이블에 해당 데이터가 PK로 존재하지 않는 경우에만 parent 값 삭제 및 수정 가능
- NO ACTION : 참조 무결성 제약이 걸려있는 경우 삭제 및 수정 불가
CREATE 테이블명 AS SELECT * FROM 복사할 테이블명;
; 완전히 새로운 테이블을 생성하는 것이 아니고 기존에 존재하던 테이블을 복사해서 생성하고 싶은 경우
제약조건의 NOT NULL 조건만 유지되며 나머지는 ALTER 명령어를 써서 정의해주어야 함
ALTER
- ADD COLUMN; 추가된 컬럼의 위치는 늘 맨 끝이 되며 별도의 위치를 지정해줄 수 없음
- DROP COLUMN; 한번 삭제한 컬럼은 복구할 수 없음
- MODIFY COLUMN; 기존에 있던 컬럼을 변경
- RENAME COLUMN; ALTER TABLE 테이블명 RENAME COLUMN 변경할 컬럼명 TO 변경할 이름;4
- ADD CONSTRAINT
- DROP TABLE
- TRUNCATE TABLE
DCL
; Data Control Language, USER를 생성하고권한을 부여하거나 회수하는 명령어
하나의 DATABASE는 여러 개의 USER를 가질 수 있음
- CREATE USER; 사용자를 생성하는 명령어
CREATE USER 사용자명 IDENTIFIED BY 패스워드;
- ALTER USERL; 사용자 변경하는 명령어
ALTER USER 사용자명 IDENTIFIED BY 패스워드;
- DROP USER; 사용자를 삭제하는 명령어
DROP USWER 사용자명;
권한 관련 명령어
- GRANT; 사용자에게 권한 부여
- REVOKE; 사용자에게 권한 회수
ROLE 관련 명령어
ROLE이란 특정 권한들을 하나의 세트처럼 묶는 것
ROLE을 이용한 권한 부여
- ROLE 생성; CREATE ROLE 롤명;
- ROLE에 권한 부여; GRANT 권한 TO 롤명;
- ROLE을 사용자에게 부여; GRANT 롤명 TO 사용자명;