테이블 생성
1. 구문
create table 테이블명(컬럼명1 컬럼타입 [제약조건],
컬럼명2 컬럼타입 [제약조건],.....);
- 문자로 시작(30자이내) : 영문 대소문자, 숫자, 특수문자( _ , $ , # ), 한글
- 중복되는 이름은 사용 안됨
- 예약어(create, table, column등)은 사용할 수 없다
2. 자료형
- number : number(전체자리, 소수이하), number → 숫자형(가변형)
- int : 정수형 숫자(고정형)
- varchar/varchar2 : 문자, 문자열(가변형) → 최대 4000byte -- MySQL 에서는 VARCHAR만 사용 가능(CHAR, VARCHAR2 안됨)
- char : 문자, 문자열(고정형) → 2000byte
- date : 날짜형
- clob : 문자열 → 최대4GB
- blob : 바이너리형(그림, 음악, 동영상..) → 최대4GB -- 웬만하면 쓰지 말 것
- 나중에 이미지 올릴 때 DB 에는 이미지 파일명만 넣고
- 실제 이미지는 pc 에 넣기
- 실제 이미지는 네이버 클라우드에 넣기
- 나중에 이미지 올릴 때 DB 에는 이미지 파일명만 넣고
3. 제약조건
- not null : 해당 컬럼에 NULL을 포함되지 않도록 함 (컬럼)
- unique : 해당 컬럼 또는 컬럼 조합 값이 유일하도록 함 (컬럼, 테이블) -- 무결성 제약조건 주의
- primary key : 각 행을 유일하게 식별할 수 있도록 함 (컬럼, 테이블)
- references table(column) : 해당 컬럼이 참조하고 있는 (부모)테이블의 특정 (컬럼, 테이블) 컬럼 값들과 일치하거나 또는 NULL이 되도록 보장함 -- 외래키
- check : 해당 컬럼에 특정 조건을 항상 만족시키도록 함 (컬럼, 테이블)
- [참고] primary key = unique + not null
ex)
idx | 일련번호 | primary key |
id | 아이디 | unique |
name | 이름 | not null |
phone | 전화번호 | |
address | 주소 | |
score | 점수 | check |
subject_code | 과목코드 | |
hire_date | 입학일 | 기본값 (오늘날짜) |
marriage | 결혼 | check |
4. 제약조건 확인
- constraint_name : 이름
- constraint_type : 유형
- P : primary key
- U : unique
- U : refernece
- C : check, not null
- search_condition : check조건 내용
- r_constraint_name : 참조테이블의 primary key 이름
- delete_rule : 참조테이블의 primary key 컬럼이 삭제될 때 적용되는 규칙 (no action, set null, cascade 등)
5. 삭제 RULE
- on delete cascade : 대상 데이터를 삭제하고, 해당 데이터를 참조하는 데이터도 삭제
- on delete set null : 대상 데이터를 삭제하고, 해당 데이터를 참조하는 데이터는 NULL로 바꿈
- on delete restricted : 삭제대상 데이터를 참조하는 데이터가 존재하면 삭제할 수 없음 (기본값)
6. 수정 RULE
- on update cascade : 대상 데이터를 수정하면, 해당 데이터를 참조하는 데이터도 수정
테이블 수정
1. 구문
alter table 테이블명
add 컬럼명 데이터타입 [제약조건]
add constraint 제약조건명 제약조건타입(컬럼명)
modify 컬럼명 데이터타입
drop column 컬럼명 [cascade constraints]
drop primary key [cascade] | union (컬럼명,.....) [cascade] .... | constraint 제약조건명 [cascade]
2. 이름 변경
alter table 기존테이블명 rename to 새테이블명
alter table 테이블명 rename column 기존컬럼명 to 새컬럼명
alter table 테이블명 rename constraint 기존제약조건명 to 새제약조건명
테이블 복사
1. 개념
- 서브쿼리를 이용한 테이블 생성 및 행(레코드) 복사
- 서브쿼리를 이용해서 복사한 경우 not null을 제외한 제약조건은 복사 안됨 (not null제약조건도 sys_*****로 복사됨)
2. 구문
create table 테이블명([컬럼명1,컬럼명2.....]) as 서브쿼리
3. 구조만 복사
create table 테이블명1 as select * from 테이블명2 where 1=0
where 1=0
시퀀스
1. 개념
- 순차적으로 정수값을 자동으로 생성하는 객체
2. 구문
create sequence 시퀀스명
[increment by 증가값]
[start with 시작값]
[maxvalue 최대값 | minvalue 최소값]
[cycle | nocycle]
[cache | nocache]
- increment by 증가값 : 증가/감소 간격(기본값 : 1)
- start with : 시작번호(기본값 : 1)
- maxvalue / minvalue : 시퀀스의 최대/최소값지정
- cycle / nocycle : 최대/최소값에 도달 시 반복여부결정
- cache / nocache : 지정한 수량만큼 메모리 생성여부결정 (최소값:2, 기본값:20)
insert
1. 개념
- 테이블에 데이터(새로운 행)추가
2. 구문
insert into 테이블명 [ (column1, column2, .....)] values (value1,value2,.....)
column과 values의 순서 일치
column과 values의 개수 일치
update
1. 개념
- 테이블에 포함된 기존 데이터수정
- 전체 데이터 건수(행수)는 달라지지 않음
- 조건에 맞는 행(또는 열)의 컬럼값을 갱신할 수 있다
2. 구문
update 테이블명 set 컬럼명1=value1, 컬럼명2=value2 ..... [where 조건절]
where 이 생략이 되면 전체행이 갱신
set 절은 서브쿼리 사용가능, default 옵션 사용가능
delete
1. 개념
- 테이블에 포함된 기존데이터를 삭제
- 행 단위로 삭제되므로 전체행수가 달라짐
2. 구문
delete [from] 테이블명 [where 조건절];
where 을 생략하면 전체행이 삭제됨 - 데이터는 삭제되고 테이블 구조는 유지됨
truncate
1. 개념
- 테이블의 데이터를 전부 삭제하고 사용하고 있던 공간을 반납
- 해당 테이블의 데이터가 모두 삭제되지만 테이블 자체가 지워지는 것은 아님
- 해당 테이블에 생성되어 있던 인덱스도 함께 truncate 됨
2. 구문
TRUNCATE TABLE 테이블명;
3. 특징
- DELETE 후에는 데이터만 지워지고 쓰고 있던 디스크 상의 공간은 그대로 가지고 있다
- TRUNCATE 작업은 최초 테이블이 만들어졌던 상태, 즉 데이터가 1건도 없는 상태로 모든 데이터 삭제, 칼럼 값만 남아 있다
- 그리고 용량도 줄고 인덱스 등도 모두 삭제된다
- DELETE 보다 TRUNCATE 가 더 좋아 보이나 DELETE 는 where 를 이용하여 원하는 데이터만 골라서 삭제가 가능하나 TRUNCATE 는 조건을 사용할 수 없다
- 또 DDL이기 때문에 사용권한 문제도 있다
- DROP 명령어는 데이터와 테이블 전체를 삭제하게 되고 사용하고 있던 공간도 모두 반납하고 인덱스나 제약조건 등 오브젝트로 삭제된다
transaction 처리
1. 개념
- commit 하기 이전까지 SQL 명령어들
- 일의 시작과 끝이 완벽하게 마무리(commit)
- 처리 도중 인터럽트(interrupt:장애)가 발생하면 되돌아옴(rollback)
⚒️ 예제