SQL 기본
- 관계형 데이터베이스 개요
-DDL, DML, DCL, TCL
관계형 데이터베이스 개요
1. 데이터 베이스
특정 기업이나 조직 또는 개인이 필요에 의해 공유하고 사용할 목적으로 통합 관리되는 데이터를 일정한 형태로 저장한 것
2. SQL
관계형 데이터베이스 관리 시스템(DMBS)의 데이터를 관리하기 위해 설계된 특수 목적의 프로그래밍 언어
명령어의 종류 | 명령어 | 설명 |
데이터 조작어(DML) | SELECT | 데이테베이스에 들어 있는 데이터를 조회, 검색 |
INSERT UPDATE DELETE |
데이터베이스의 테이블에 들어 있는 데이터를 변형을 가하는 종류의 명령어 | |
데이터 정의어(DDL) | CREATE ALTER DROP RENAME |
데이틀과 같은 데이터 구조를 정의하는데 사용되는 명령어 |
데이터 제어어(DCL) | GRANT REVOKE |
데이터베이스에 접근하고 객체들을 사용하도록 권한을 주고 회수하는 명령어 |
트랙잰션 제어어(TCL) | COMMIT ROLLBACK |
논리적인 작업의 단위를 묶어서 DML에 의해 조작된 결과를 작업단위(트랜잭션) 별로 제어하는 명령어 |
DDL
1. 데이터 유형
데이터 유형 | 설명 |
CHARACTER(s) | - 고정 길이 문자열 정보(Oracle, SQL Server 모두 CHAR로 표현) - s는 기본 길이 1바이트, 최대 길이 Orcale 2,000바이트, SQL Server 8,000바이트 - s만큼 최대 길이르 ㄹ갖고 고정 길이를 가지고 있으므로 할당된 변수 값이 길이가 s보다 작을 경우에는 그 차이 길이만큼 공간으로 채워진다 |
VARCHAR(s) | - CHARACTER VARYING의 약자로 가변 길이 문자열 정보(Oracle VARCHAR2, SQL Server VARCHER) - s는 최소 길이 1바이트, 최대 길이 Oracle 4,000바이트, SQL Server 8,000바이트 - s만큼의 최대 길이를 갖지만 가변 길이로 조정이 되기 때문에 할당된 변수값의 바이트만 적용(Limit 개념) |
NUMERIC | - 정수, 실수 등 숫자 정보(Oracle NUMBER, SQL Server는 10가지 이상의 숫자 타입 가지고 있음) - Oracle은 처음에 전체 자리 수를 지정하고, 그다음 소수 부분의 자리 수를 지정 예를들어, 정수 부분이 6자리고 소수점 부분이 2자리인 경우에는 'NUMBER(8,2)' 와 같이 된다. |
DATETIME | - 날짜와 시각 정보(Oracle DATE, SQL Server DATETIME) - Oracle은 1초 단위, SQL Server는 3.33ms 단위 관리 |
2. CREATE TABLE
CREATE TABLE 테이블 이름(
칼럼명 DATATYPE [DEFAULT 형식],
칼럼명 DATATYPE [DEFAULT 형식],
칼럼명 DATATYPE [DEFAULT 형식],
)
-- 예제
create table emp(
empno number,
ename varchar2(10),
job varchar2(9),
mgr number(4,0),
hiredate date,
sal number(7,2),
comm number(7,2),
deptno number,
constraint pk_emp primary key (empno),
constraint fk_deptno foreign key (deptno) references dept (deptno)
);
- 제약 조건(CONSTRAINT)
사용자가 원하는 조건의 데이터만 유지하기 위한 방법
종류 | 설명 | 예시 |
NOT NULL | 해당 컬럼에 NULL값이 들어오지 못하게 함 | 컬럼명 데이터타입 NOT NULL |
UNIQUE | NULL은 허용 중복은 불가능 |
컬럼명 데이터타입 UNIQUE CONSTRAINTS 제약조건명 UNIQUE(컬럼명, ...) |
PRIMARY KEY | 기본키 NULL, 중복 불가능(UNIQUE + NOT NULL) 테이블당 1개의 기본키만 생성 |
컬럼명 데이터타입 PRIMARY KEY CONSTRAINTS 제약조건명 PRIMARY KEY(컬럼명,...) |
FOREIGN KEY | 테이블 간의 참조 데이터 무결성을 위한 제약 조건 NULL 가능, 타 테이블의 PRIMARY KEY여야하고, 해당 테이블의 컬럼에 삽입되지 않은 값은 사용 불가 |
CONSTRAINT 외래키명 FOREIGN KEY(컬럼명, ...) REFERENCES 참조테이블(참조테이블 컬럼명, ...) |
CHECK | 특정 범위 혹은 특정 값만 들어올 수 있게 함 | CONSTRAINT 체크명 CHECK(체크조건) |
DEFAULT | NULL 값이 들어올 시 지정된 값을 삽입함 | 컬럼명 데이터타입 DEFAULT 값 |
- SELECT 문장을 통한 테이블 생성
CREATE TABLE ~ AS SELECT ~
SELECT ~ INTO ~
- 기존테이블의 제약조건 중 NOT NULL만 새로운 복제테이블에 적용됨
3. ALTER TABLE
ALTER TABLE 테이블명 ADD 속성_이름 데이터타입 [DEFAULT]; //추가
ALTER TABLE 테이블명 ALTER 속성_이름[SET DEFAULT]; //속성명 변경
ALTER TABLE 테이블명 DROP 속성_이름[CASCADE | RESTRICT];//속성 삭제
- DROP CLUMN: 데이터가 있거나 없거나 모두 삭제 가능. 한번에 하나의 칼럼만 삭제 가능.
- MODIFY COLUMN, RENAME COLUMN
- DROP CONSTRAINT: 테이블 생성 시 부여했던 제약조건을 삭제하는 명령어
- ADD CONSTRAINT: 테이블 생성 이후에 필요에 의해서 제약조건을 추가
4. RENAME TABLE
ALTER TABLE 테이블명
RENAME COLUMN 변경해야할 컬럼명 TO 새로운 컬럼명
5. DROP TABLE
ALTER TABLE 테이블명 DROP COLUMN 삭제할 컬럼명;
- 테이블의 모든 데이터 및 구조 삭제, CASCADE CONSTRAIN 옵션은 해당 테이블과 관계가 있었던 참조되는 제약조건에 대해서도 삭제
6. TRUNCATE TABLE
TRUNCATE TABLE 테이블명 DROP COLUMN 삭제할 컬럼명;
- 테이블 자체가 삭제 X, 해당테이블에 들어있던 모든 행들이 제거(데이터만 제거)
- 기존에 사용하던 테이블의 모든 로우를 제거하기 위한 명령어
DML
1. SELECT
SELECT 컬럼명 FROM 테이블명 WHERE 조건;
2. INSERT
INSERT INTO 테이블명(컬럼1, 컬럼2, ..) VALUES (값1, 값2, ..)
INSERT INTO 테이블명 VALUES(값1, 값2, 값3, ...)
3. UPDATE
UPDATE 테이블명 SET 컬럼명 = 변경할 값 WHERE 조건;
4. DELETE
DELETE FROM 테이블명 WHERE 조건;
TCL
1. 트랜잭션이란?
데이터베이스의 논리적 연산 단위
2. 트랜젝션 특성
특성 | 설명 |
원자성(atomicity) | 트랜잭션에서 정의된 연산자들은 모두 성공적으로 실행되던지 아니면 전혀 실행되지 않은 상태로 남아 있어야한다.(all or nothing) |
일관성(consistency) | 트랜잭션이 실행되기 전의 데이터베이스 내용이 잘못 되어 있지 않다면 트랜잭션이 실행된 이후에도 데이터베이스의 내용에 잘못이 있으면 안된다. |
고립성(isolation) | 트랜잭션이 실행되는 도중에 다른 트랜잭션의 영향을 받아 잘못된 결과를 만들어서는 안된다. |
지속성(durability) | 트랜잭션이 성공적으로 수행되면 그 트랜잭션이 갱신한 데이터베이스의 내용은 영구적으로 저장된다. |
3. COMMIT
- Oracle은 DML문장 수행 후 사용자가 임의로 COMMIT 또는 ROLLBACK 수행해줘야함
- SQL Server는 기본적으로 AUTO COMMIT
4. ROLLBACK
- 트랜젝션으로 인한 하나의 묶음 처리가 시작디기 이전의 상태로 되돌린다.
- 이전 COMMIT한 곳 까지만 복구
5. SAVEPOINT
- 현재의 트랜젝션을 작게 분할하는 명령어
- 현 시점에서 SAVEPOINT까지 트랜잭션의 일부만 롤백할 수 있다.
SAVEPOINT 세이브포인트명;
ROLLBACK TO 세이브포인트명;
'프로그래밍 > SQLD' 카테고리의 다른 글
[SQLD][1과목] 데이터모델링의 이해 (0) | 2022.03.07 |
---|
댓글